CadXP: Block imbriqués - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Block imbriqués

#1 L'utilisateur est hors-ligne   coyotte 

  • ceinture verte
  • Groupe : Membres
  • Messages : 75
  • Inscrit(e) : 13-septembre 05

Posté 19 mars 2020 - 14:34

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.net
Plugins pour AutoCAD
0

#2 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11 320
  • Inscrit(e) : 02-septembre 05

Posté 19 mars 2020 - 15:55

Salut,

Est-ce-que tu cherches pour un bloc précis ou pour tous les blocs ?
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#3 L'utilisateur est hors-ligne   coyotte 

  • ceinture verte
  • Groupe : Membres
  • Messages : 75
  • Inscrit(e) : 13-septembre 05

Posté 19 mars 2020 - 16:16

Bonjour Giles,

pour tous les blocs ce serait mieux.

Cordialement.
http://www.carpetdiem.net
Plugins pour AutoCAD
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11 320
  • Inscrit(e) : 02-septembre 05

Posté 19 mars 2020 - 18:21

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est hors-ligne   coyotte 

  • ceinture verte
  • Groupe : Membres
  • Messages : 75
  • Inscrit(e) : 13-septembre 05

Posté 19 mars 2020 - 19:33

Merci Gile,

Je teste cela dès demain et je te tiens au courant.
http://www.carpetdiem.net
Plugins pour AutoCAD
0

#6 L'utilisateur est hors-ligne   coyotte 

  • ceinture verte
  • Groupe : Membres
  • Messages : 75
  • Inscrit(e) : 13-septembre 05

Posté 20 mars 2020 - 10:13

Bonjour Gile,

Tester ce matin, fonctionnement nickel.

Merci encore.

Cordialement.
http://www.carpetdiem.net
Plugins pour AutoCAD
0

#7 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8 791
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 20 mars 2020 - 10:56

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
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)