coyotte Posté(e) le 19 mars 2020 Posté(e) le 19 mars 2020 Bonjour à tous, je cherche par le code ci-dessous à savoir si le bloc en cours fait parti d'un autre bloc. Database database = HostApplicationServices.WorkingDatabase; using (Transaction transaction = database.TransactionManager.StartTransaction()) { BlockTable blkTable = (BlockTable)transaction.GetObject(database.BlockTableId, OpenMode.ForRead); foreach (ObjectId id in blkTable) { BlockTableRecord btRecord = (BlockTableRecord)transaction.GetObject(id, OpenMode.ForRead); /* Comment savoir si ce bloc fait parti d'un autre bloc } transaction.Commit(); } j'espère avoir été clair. merci par avance. http://www.carpetdiem.netPlugins pour AutoCAD
(gile) Posté(e) le 19 mars 2020 Posté(e) le 19 mars 2020 Salut, Est-ce-que tu cherches pour un bloc précis ou pour tous les blocs ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
coyotte Posté(e) le 19 mars 2020 Auteur Posté(e) le 19 mars 2020 Bonjour Giles, pour tous les blocs ce serait mieux. Cordialement. http://www.carpetdiem.netPlugins pour AutoCAD
(gile) Posté(e) le 19 mars 2020 Posté(e) le 19 mars 2020 La fonction ci-dessous renvoie un dictionnaire avec les noms des blocs contenant des blocs imbriqués.Pour chaque entrée, la clé est le nom du bloc parent, la valeur est la liste des noms des blocs imbriqués au premier niveau. public static Dictionary<string, List<string>> GetNestedBlocks(Database db) { var result = new Dictionary<string, List<string>>(); using (var tr = new OpenCloseTransaction()) { // on parcourt la table des blocs var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); // pour chaque définition de bloc (excepté les espaces) foreach (ObjectId btrId in bt) { var btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead); if (btr.IsLayout) continue; // pour chaque entité dans la définition de bloc foreach (ObjectId id in btr) { // si c'est une référence de bloc, on l'ajout au dictionnaire if (id.ObjectClass.DxfName == "INSERT") { var br = (BlockReference)tr.GetObject(id, OpenMode.ForRead); if (!result.ContainsKey(btr.Name)) result[btr.Name] = new List<string>(); result[btr.Name].Add(br.Name); } } } } return result; } Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
coyotte Posté(e) le 19 mars 2020 Auteur Posté(e) le 19 mars 2020 Merci Gile, Je teste cela dès demain et je te tiens au courant. http://www.carpetdiem.netPlugins pour AutoCAD
coyotte Posté(e) le 20 mars 2020 Auteur Posté(e) le 20 mars 2020 Bonjour Gile, Tester ce matin, fonctionnement nickel. Merci encore. Cordialement. http://www.carpetdiem.netPlugins pour AutoCAD
lecrabe Posté(e) le 20 mars 2020 Posté(e) le 20 mars 2020 Hello Quand le Dieu Gilles cause ... On ecoute "religieusement" et on remercie ! LA SANTE, Bye, lecrabe "triste"Automne 2020, la retraite ... Autodesk Expert Elite Team
PHILPHIL Posté(e) le 28 mai 2020 Posté(e) le 28 mai 2020 hello Gile le code que tu donnes en message 4 existe til en version lisp ou vlisp. j'ai récupérer un IFCil y a des blocs avec des blocs imbriqués sur pas mal de niveaux,les couleurs des blocs semblent par contre bien ordonnées par type mon idée en lisp aurait été de décomposer tous les blocs comportant des blocs imbriquéset de redistribuer les blocs de niveau 1 ( qui ne comporte pas de blocs imbriqués)dans des couches en fonction de leurs couleurs ton code donnait déja la liste des blocks avec des blocks imbriqués a décomposer a+ merciPhil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
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