Aller au contenu

Variable System AutoCAD


Messages recommandés

Bonjour,

 

Dans le cadre de nettoyage quasi automatique, certains de mes collègues arrivent tout de même à jouer du système.

 

J'aimerai créer un outil qui rendrait difficile cet échapatoire. Je pensais à une variable système (un booléen) qui serait bloqué en écriture.

 

Est-il possible de l'implémenter dans chaque dessin ? Avez vous un exemple ? Merci.

 

Au plaisir de vous lire ?

Lien vers le commentaire
Partager sur d’autres sites

Les "User x" 1 à 5 ne me sont pas utiles. En effet, elles sont modifiables.

 

Donc, peut-être naîvement, je cherche à créer une nouvelle variable système dans un dessin de type DBMode. Je crois que DBMode permet de déclencher la commande sauvegarde le cas échéant.

Je ne peux pas me servir des registres. J'ai plus de 200 licences réparties dans des agences qui ne sont pas forcément connectées.

 

A moins que vous ayez une idée géniale ? Ce que je ne doute en aucune façon. Il faudrait que ce soit un moyen lié au dessin.

Lien vers le commentaire
Partager sur d’autres sites

Il existe de nombres variables système modifiables avec la commande "modifvar". Est-ce qu'il y a un moyen d'en créer une nouvelle ?

 

L'utilisation des Xdata est une solution mais il faudrait créer un objet qui soit identique en tous points sur tous les dessins créés en interne ou non. C'est quasiment impossible.

 

Il y a les Xrecords mais je ne sais pas les créer. je crois qu'il y a une notion de dictionnaire.

 

Une variable de type "DBMOD" serait tellement plus pratique. Ou une propriété associée à l'espace objet.

 

Je crois que je vais me pencher de plus prêt sur les "Dictionnaires".

Lien vers le commentaire
Partager sur d’autres sites

On peut, depuis la version 2011, créer de véritables variables système accessibles via MODIFVAR (ou les fonctions LISP getvar et setvar) mais j'avais cru comprendre que tu ne voulais pas que ce soit accessible.

Dans tous les cas, ces variables ne sont pas faciles à déployer, il faut créer des clés dans HKEY_LOCAL_MACHINE ce qui nécessite un installeur avec manifeste (voir ici). Voir aussi dans la doc ObjectARX 2011 ou plus la classe Autodesk.Runtime.Variable

 

L'utilisation des Xdata est une solution mais il faudrait créer un objet qui soit identique en tous points sur tous les dessins créés en interne ou non. C'est quasiment impossible.

On peut attacher des Xdata à n'importe quel objet AutoCAD graphique ou non (DBObject), par exemple le calque "0" ou le BlockTableRecord ModelSpace.

 

Pour les dictionnaires, tu peux lire les généralités dans ce sujet qui traite plutôt du LISP, mais les fondamentaux sont les mêmes.

 

Un exemple simple qui permet de spécifier les données d'un Xrecord contenu dans un dictionnaire nommé du dictionnaire racine (si le dictionnaire n'existait pas il est créé).

 

        /// <summary>
       /// Ajoute ou modifie les données d'un Xrecord dans un dictionnaire
       /// </summary>
       /// <param name="dictName">Le nom du dictionnaire</param>
       /// <param name="key">La clé du Xrecord</param>
       /// <param name="resbuf">Les données</param>
       public void SetXrecord(string dictName, string key, ResultBuffer resbuf)
       {
           Document doc = acadApp.DocumentManager.MdiActiveDocument;
           Database db = doc.Database;
           using (Transaction tr = db.TransactionManager.StartTransaction())
           {
               DBDictionary NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
               DBDictionary dict;
               if (NOD.Contains(dictName))
               {
                   dict = (DBDictionary)tr.GetObject(NOD.GetAt(dictName), OpenMode.ForWrite);
               }
               else
               {
                   dict = new DBDictionary();
                   NOD.UpgradeOpen();
                   NOD.SetAt(dictName, dict);
                   tr.AddNewlyCreatedDBObject(dict, true);
               }
               Xrecord xRec = new Xrecord();
               xRec.Data = resbuf;
               dict.SetAt(key, xRec);
               tr.AddNewlyCreatedDBObject(xRec, true);
               tr.Commit();
           }
       }

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

Lien vers le commentaire
Partager sur d’autres sites

Un grand merci à (gile),

 

Cet échange m'a permis d'apprendre, une fois de plus, énormément de chose:

- Je connaissais les Xdatas mais je ne savais pas que l'on pouvait en attacher aux objets non graphiques,

- Je ne m'étais jamais aventuré à me préoccuper de la création de dictionnaires et de Xrecords.

 

Je vais profiter de l'été pour commencer à migrer mes librairies pour être utilisables dans l'environnement AutoCAD 2013. Je sais que c'est un nouveau format et qu'il y un nouvel ObjectArx.

J'utilise VS2008. Dois-je impérativement faire évoluer ma plateforme vers VS2010 ? Ou seul une compilation avec le nouvel ObjectARX 2013 suffit ?

 

A bientôt,

Lien vers le commentaire
Partager sur d’autres sites

Pour compiler des application .NET pour AutoCAD 2013 il faut cibler le Framework 4.0, il est donc indispensable d'utiliser Visual Studio 2010.

Après avoir ciblé le Framework 4.0 il faut référencer, en plus des traditionnelles acdbmgd.dll et acmgd.dll, la nouvelle bibliothèque accore.dll.

Le plus souvent c'est suffisant pour pour pouvoir compiler, mais certaines méthodes ont changé. Voir dans ObjectARX 2013\docs\acmgd.chm la rubrique .NET Migration Guide, voir aussi le billet de Serge Camiré sur Augifr.fr et les commentaires.

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

Lien vers le commentaire
Partager sur d’autres sites

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é