sam-123 Posté(e) le 14 février 2010 Posté(e) le 14 février 2010 Bonjour a tous et a toutes,Tout d’abord je voudrais m’excusé auprès de ceux que mes question commence a énervésEt 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
(gile) Posté(e) le 14 février 2010 Posté(e) le 14 février 2010 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 où 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.Groupusing 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
sam-123 Posté(e) le 15 février 2010 Auteur Posté(e) le 15 février 2010 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:
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