чтение данных из словаря

Автор Тема: чтение данных из словаря  (Прочитано 8458 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
чтение данных из словаря
« : 10-09-2017, 02:45:36 »
не удается получить конечные данные, записанные мною в словарь.
вношу данные в примитив
Код - C# [Выбрать]
  1.            //http://adndevblog.typepad.com/autocad/2012/06/adding-extension-dictionary.html
  2.             public static void LAddExDict(string ndic, string rs)
  3.             {
  4.                 PromptEntityResult per = ed.GetEntity("Select entity to add extensiondictionary.");
  5.                 if (per.Status != PromptStatus.OK) return;
  6.                 using (Transaction tr = db.TransactionManager.StartTransaction())
  7.                 {
  8.                     DBObject dbObj = tr.GetObject(per.ObjectId, OpenMode.ForRead);
  9.                     ObjectId edId = dbObj.ExtensionDictionary;
  10.                     if (edId == ObjectId.Null)
  11.                     {
  12.  
  13.                         dbObj.UpgradeOpen();
  14.                         dbObj.CreateExtensionDictionary();
  15.                         edId = dbObj.ExtensionDictionary;
  16.                     }
  17.                     DBDictionary dbED = (DBDictionary)tr.GetObject(edId, OpenMode.ForRead);
  18.                     if (!dbED.Contains(ndic))
  19.                     {
  20.                        
  21.                         dbED.UpgradeOpen();
  22.                         Xrecord xRec = new Xrecord();
  23.                         ResultBuffer rb = new ResultBuffer();
  24.                         rb.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "TEST"));
  25.                         rb.Add(new TypedValue((int)DxfCode.ExtendedDataReal, 100));
  26.                         xRec.Data = rb;
  27.                         dbED.SetAt(ndic, xRec);
  28.                         tr.AddNewlyCreatedDBObject(xRec, true);
  29.                         ed.WriteMessage("\nDictionarw Count - {0}", dbED.Count);
  30.                        
  31.                     }
  32.                     else
  33.                     {
  34.                         ed.WriteMessage("entity contains the TEST data/\n");
  35.                     }
  36.                     tr.Commit();
  37.                 }
  38.             }

читаю данные
Код - C# [Выбрать]
  1.             public static void LEDataGet(string ndic)
  2.             {
  3.                 PromptEntityResult surRes = ed.GetEntity("Select source entity");
  4.                 if (surRes.Status != PromptStatus.OK) return;
  5.                 using (Transaction tr = db.TransactionManager.StartTransaction())
  6.                 {
  7.                     DBObject dbobj = tr.GetObject(surRes.ObjectId, OpenMode.ForRead);
  8.                     ObjectId surId = dbobj.ExtensionDictionary;
  9.                     if (surId != ObjectId.Null)
  10.                     {
  11.                         DBDictionary dbEd = (DBDictionary)tr.GetObject(surId, OpenMode.ForRead);
  12.                         foreach (DBDictionaryEntry ent in dbEd)
  13.                         {
  14.                             ObjectId dId = dbEd.GetAt(ndic);
  15.                             Xrecord xr = (Xrecord)tr.GetObject(dId, OpenMode.ForRead);
  16.                             TypedValue[] arr = xr.Data.AsArray();
  17.                             ed.WriteMessage("\n** {0}", arr.Length);
  18.                             for (int i = 0; i < arr.Length;i++)
  19.                             {
  20.                                 ed.WriteMessage("\n\t\t {0}", arr[i]);
  21. // [color=red]цель получить данные в том виде в котором вносил "TEST" и 100[/color]
  22.  
  23.                             }
  24.  
  25.                         }
  26.                     }
  27.                 }
  28.             }
Лень - двигатель прогресса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #1 : 10-09-2017, 12:44:12 »
не удается получить конечные данные, записанные мною в словарь.
Это потому, что ты не понимаешь разницу между Xdata и Xrecord. В Xdata (расширенные данные) пишутся группы начиная с номера 1000 (DxfCode.ExtendedDataAsciiString), а в Xrecord обычные группы начиная с 1 и до 999 (например, DxfCode.Text - для строк и DxfCode.Real для действительных чисел)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #2 : 10-09-2017, 12:46:20 »
Советую пользоваться ARXDBG и MGDDBG - утилиты для анализа AutoCAD, чертежа и т.д. - они помогут понять содержимое чертежа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #3 : 10-09-2017, 16:04:46 »
Это потому, что ты не понимаешь разницу между Xdata и Xrecord.
И это правда, потому и возникают вопросы, потому и спрашиваю тут.
Советую пользоваться ARXDBG и MGDDBG
поставил загрузил не пашет. возможно причина в том что нет файлов 2014......
Фартуна повернулась задом называется.

Лень - двигатель прогресса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #4 : 10-09-2017, 16:06:55 »
поставил загрузил не пашет. возможно причина в том что нет файлов 2014......
Используются те, которые для 2013-го. Проверь, что незаблокированны файлы, как указано в той статье.

Стоп!!! Ты неправильно разархивировал. У тебя путь:
C:\Program Files\Autodesk\ApplicationPlugins\ArxDbg.bundle\ArxDbg.bundle
А должно быть:
C:\Program Files\Autodesk\ApplicationPlugins\ArxDbg.bundle
Разницу чувствуешь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #5 : 10-09-2017, 16:13:29 »
Фартуна повернулась задом называется.
Потому что она не Фартуна, а Фортуна.  ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #6 : 10-09-2017, 16:20:00 »
Потому что она не Фартуна, а Фортуна. 
Да уж.
Разницу чувствуешь?
Асюсяю.
исправляю.
Лень - двигатель прогресса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #7 : 10-09-2017, 16:28:35 »
исправляю.
И? А MGDDBG запустился?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #8 : 10-09-2017, 17:36:15 »
да спасибо все запустилось.
попытался понять куда и чего пишет.
записал с  помощью vlax-ldata-put  данные.
(vlax-ldata-put obj "Test" 1000)
"Test" нашел по такому пути
object -> extension dictionaty -> Test
а 1000 так пока и не нашел
Лень - двигатель прогресса.

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #9 : 10-09-2017, 17:54:43 »
ха.................. нашел и значение string под dxfcode - 300
Лень - двигатель прогресса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #10 : 10-09-2017, 18:06:01 »
Советую обратить внимание на вот эту картинку:


Как видишь хранится в этом случае информация в объекте VLO-VL, а не в XRECORD. Т.е. средствами .NET ты не можешь сделать то, что делал в VisualLisp с помощью (vlax-ldata-put). Да и не нужно. Очень давно была рекомендация не пользоваться (vlax-ldata-put) совсем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #11 : 10-09-2017, 18:12:13 »
хорошо. порою еще малость.
Лень - двигатель прогресса.

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #12 : 10-09-2017, 18:24:10 »

произвел запись с помощью функции поста#1, но видно, что dxfcode 1000 for string and 1040 for integer.
что является признаком XData?
В Xdata (расширенные данные) пишутся группы начиная с номера 1000
ладно пойдем дальше.......
Лень - двигатель прогресса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: чтение данных из словаря
« Ответ #13 : 10-09-2017, 19:06:32 »
что является признаком XData?
Чего ты добиваешься? То что ты получил - это некорректные Xdata внутри XRecord. Например, эти Xdata не содержат группу 1001 которая определяет имя приложения (APPID). Без такой группы Xdata быть не может. Но зачем вообще это всё, если в Xrecord ты можешь поместить обычные группы и не мучатся???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolteАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: чтение данных из словаря
« Ответ #14 : 10-09-2017, 19:59:09 »
нужно для аппликации, которую задумал. построение системы канализации с номерами колодцев, глубинами для труб и колодца, подгонка всего этого дела по высотам, построение разреза ну и так далее.
дабы определить и куда то запомнить глубину колодца врезки, необходимо его куда то записать глубину его(IL) и от этого плясать.
А вообще, если даже и отпадет необходимость в XRecord, знать и уметь это не так уж и плохо. Я только учусь так что пригодиться.
Лень - двигатель прогресса.