.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Do you have some example of code for XRecords and DBDictionary?
I'm searching, but it hard to find what I need.
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Here're two little example to set and get xrecord data (ResultBuffer as for Xdata) in a named dictionary child of the root NamedObjectsDictionary (NOD).
/// <summary>
/// Add or edit a Xrecord data in a named dictionary (the dictionary and xrecord are created if not already exist)
/// </summary>
/// <param name="dictName">The dictionary name</param>
/// <param name="key">the xrecord key</param>
/// <param name="resbuf">the xrecord data</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.NamedObjectsDictiona ryId, 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();
}
}
/// <summary>
/// Gets an xrecord data in a named dictionary
/// </summary>
/// <param name="dictName">The dictionary name</param>
/// <param name="key">The xrecord key</param>
/// <returns>The xrecord data or null if the dictionary or the xrecord do not exist</returns>
public ResultBuffer GetXrecord(string dictName, string key)
{
Document doc = acadApp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
DBDictionary NOD =
(DBDictionary)tr.GetObject(db.NamedObjectsDictiona ryId, OpenMode.ForRead);
if (!NOD.Contains(dictName))
return null;
DBDictionary dict = tr.GetObject(NOD.GetAt(dictName), OpenMode.ForRead) as DBDictionary;
if (dict == null || !dict.Contains(key))
return null;
Xrecord xRec = tr.GetObject(dict.GetAt(key), OpenMode.ForRead) as Xrecord;
if (xRec == null)
return null;
return xRec.Data;
}
}
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Thank you very much for help.
Please tell me one more thinkg. Am I able to get specified TypedValue from ResultBuffer?
If not I suppose that the best way would be to put all values into dictionary<int,string>. Am I right?
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
As for Xdata you have to use a ResultBuffer to set data in a Xrecord and the Xrecord.Data property is a ResultBuffer.
Assuming your xrecord contains a single data of type String, you can get the data this way:
ResultBuffer resbuf = GetXrecord(theDictName, theXrecKey);
string theFirstData =(string) resbuf.AsArray()[0].Value;
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Thank you for the help ![]()
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Please let me know one more thing.
Am I able to get all keys from my dictionary?
I would to allow user to select from which Key in my dictionary user want to see his variables.
In example:
SetXrecord("myDict", "keysFirst", rb);
SetXrecord("myDict", "keysSecond", rb);
SetXrecord("myDict", "keysThird", rb);
And now I want to list: keysFirst,keysSecond,keysThird.
Ok, I've got it:
List<string> _keys = new List<string>();
foreach (DBDictionaryEntry entry in dict)
{
_keys.Add(entry.Key);
}
return string.Join(",", _keys.ToArray());
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
One more to do
Removing keys ![]()
I have this code:
public static void RemoveXrecord(string dictName, string key)
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.D ocumentManager.MdiActiveDocument;
Database db = doc.Database;
DocumentLock dl = doc.LockDocument(DocumentLockMode.ProtectedAutoWri te, null, null, true);
using (dl)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
DBDictionary NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictiona ryId, OpenMode.ForRead);
if (!NOD.Contains(dictName))
return;
DBDictionary dict = tr.GetObject(NOD.GetAt(dictName), OpenMode.ForWrite) as DBDictionary;
if (dict == null || !dict.Contains(key))
return;
dict.Remove(key);
}
}
} But key still exist after removing ![]()
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
It looks like you forgot to call: tr.Commit();
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Lol, I'm blind ![]()
Thank you!
Re: Save some variables into DWG file - how? C#.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Once you work with Dictionaries very useful is ArxDbd utility for testing.


