PhilOctet Posté(e) le 26 juin 2012 Posté(e) le 26 juin 2012 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 ?
(gile) Posté(e) le 26 juin 2012 Posté(e) le 26 juin 2012 ?????Vous pouvez répéter la question ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PhilOctet Posté(e) le 26 juin 2012 Auteur Posté(e) le 26 juin 2012 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.
(gile) Posté(e) le 26 juin 2012 Posté(e) le 26 juin 2012 Je ne comprends toujours pas la demande.Mais pour conserver une (ou plusieurs) valeur dans un dessin, il y a les Xdata et les Xrecord dans un dictionnaire qui ne sont accessible que par programmation. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PhilOctet Posté(e) le 26 juin 2012 Auteur Posté(e) le 26 juin 2012 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".
(gile) Posté(e) le 26 juin 2012 Posté(e) le 26 juin 2012 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
PhilOctet Posté(e) le 27 juin 2012 Auteur Posté(e) le 27 juin 2012 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,
(gile) Posté(e) le 27 juin 2012 Posté(e) le 27 juin 2012 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
PhilOctet Posté(e) le 28 juin 2012 Auteur Posté(e) le 28 juin 2012 Merci. Cela va me donner du grain à moudre pour cet été.
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