Aller au contenu

Messages recommandés

Posté(e)

Bonjour a tous et a toutes,

Tout d’abord je voudrais m’excusé auprès de ceux que mes question commence a énervés

Et remercié spécialement Gile pour sa patiente avec moi (pour les balise).

Mais ayez un peux de patience il ne m’en reste plus que 2 :

1. les Groupes (que je vais poser maintenant)

2. les Quadrants (que je poserais la semaine prochaine)

 

Voilà pour les Groupes en VBA c’étais comme cela qu’on procédé :

 
Dim GroupCollectie As AcadGroups
GroupCollectie = ThisDrawing.Groups
Dim Group As AcadGroup
Group = GroepCollectie.Add("*")
Dim Legroup(0 To 1) As AcadEntity
Legroup(0) = line1
Legroup(1) = Line2
Group.AppendItems(Legroup)
Group.Update()

 

Alors si quelqu’un aurais la gentillesse de m’indique l’équivalence en .Net.

Je crois que j’ai enfin saisie pour les balises. :o

Posté(e)

Salut,

 

Dans AutoCAD les groupes sont enregistrés dans un dictionnaire : ACAD_GROUP.

ThisDrawing.Groups pointe vers ce dictionnaire.

 

Avec DotNet, les dictionnaires de la base de donnée (DBDictionary) sont tous des entrées du dictionnaire racine : NamedObjectsDictionary (de type DBDictionary lui aussi).

 

Le dictionnaire ACAD_GROUP est une entrée (DBDictionaryEntry) du dictionnaire racine et chaque groupe est une entrée du dictionnaire ACAD_GROUP.

 

Une entrée (DBDictionaryEntry) est une paire Key / Value Key est de type String et Value de type ObjectId.

 

Un exemple pour créer un groupe anonyme à partir d'un jeu de sélection.

Note l'utilisation des instructions using (Imports en VB) en début de code pour alléger le code (ne pas avoir à répéter l'arborescence complète des noms d'espaces)

Group est aussi un nom d'espace, il faut donc spécifier :

Autodesk.AutoCAD.DatabaseServices.Group pour pointer sur la classe Group.

L'utilisation d'un alias :

using AcDb = Autodesk.AutoCAD.DatabaseServices;

permet d'utiliser dans le corps du code : AcDb.Group

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using AcDb = Autodesk.AutoCAD.DatabaseServices;

namespace Group
{
   public class Commands
   {
       [CommandMethod("GRP")]
       public void MakeGroup()
       {
           Document doc = acadApp.DocumentManager.MdiActiveDocument;
           Database db = doc.Database;
           Editor ed = doc.Editor;
           PromptSelectionResult psr = ed.GetSelection();
           if (psr.Status != PromptStatus.OK)
               return;
           ObjectId[] ss = psr.Value.GetObjectIds();
           using (Transaction tr = db.TransactionManager.StartTransaction())
           {
               DBDictionary NOD = 
                   (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
               DBDictionary groups =
                   (DBDictionary)tr.GetObject(NOD.GetAt("ACAD_GROUP"), OpenMode.ForWrite);
               using (AcDb.Group grp = new AcDb.Group())
               {
                   foreach (ObjectId id in ss)
                   {
                       grp.Append(id);
                   }
                   groups.SetAt("*", grp);
               }
               tr.Commit();
           }
       }
   }
}

 

PS : Ce ne sont pas tes questions qui ont pu m'énerver, mais la façon dont elles sont posées. un effort sur la présentation et l'orthographe est la marque d'un minimum de correction pour ceux à qui tu demandes de te répondre.

Je ne dis pas que je ne fais jamais de fautes d'orthographe, mais j'essaye d'en faire le moins possible par respect pour ceux qui pourraient me lire.

Quand on code, on a le droit à aucune faute de syntaxe, même si le cerveau humain est plus souple qu'un compilateur, les fautes d'orthographe ne facilitent pas l'interprétation.

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour tout le monde,

Tu (gile) m’as fait gagne beaucoup de temps, merci :D

Dans mon cas c’étais rajouter un groupe a la création de mon Objet pour facilite la manipulation dans le MSpace.

Pour ceux que ca intéresse ca donne ca:

 

 Dim GroupDico As New DBDictionary
               GroupDico = MyTrans.GetObject(MyDb.NamedObjectsDictionaryId, OpenMode.ForRead)
               Dim LesGroupes As DBDictionary
               LesGroupes = MyTrans.GetObject(GroupDico.GetAt("ACAD_GROUP"), OpenMode.ForWrite)
               Using LeGroupe As New Autodesk.AutoCAD.DatabaseServices.Group
                   LeGroupe.Append(Pline0.ObjectId)
                   LeGroupe.Append(Pline1.ObjectId)
                   LeGroupe.Append(Pline2.ObjectId)
                   LesGroupes.SetAt("*", LeGroupe)
               End Using

 

Voilà maintenant je peux passer à la phase suivante. :casstet:

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité