Как программно выбрать штриховку "соответствующую" конкретному блоку?

Автор Тема: Как программно выбрать штриховку "соответствующую" конкретному блоку?  (Прочитано 16097 раз)

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Какой-то дурацкий перевод (это я не про тебя, а про картинку). Да еще и с ошибками.
Со справки AutoCAD скрин сделал.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Со справки AutoCAD скрин сделал.
Вот здесь: http://images.autodesk.com/adsk/files/autocad_2012_pdf_dxf-reference_enu.pdf начиная со страницы 246 (Extended Data) правильнее. Единственная разница DXF по сравнению с TypedValue, что точки передаются как массив из трех double, а не по отдельности каждая из координат в своей группе. Т.е. в 1010 содержится все три координаты, а не в 1010 - X, в 1020 - Y, и в 1030 - Z.
В переводе написана глупость в том, что код 1000 - это в действительно просто строка, а код 1001 - это имя приложения (тоже строка, но имеющая радикально другой смысл).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Вот здесь: http://images.autodesk.com/adsk/files/autocad_2012_pdf_dxf-reference_enu.pdf начиная со страницы 246 (Extended Data) правильнее. Единственная разница DXF по сравнению с TypedValue, что точки передаются как массив из трех double, а не по отдельности каждая из координат в своей группе. Т.е. в 1010 содержится все три координаты, а не в 1010 - X, в 1020 - Y, и в 1030 - Z.
В переводе написана глупость в том, что код 1000 - это в действительно просто строка, а код 1001 - это имя приложения (тоже строка, но имеющая радикально другой смысл).
Согласен, если читать только справку AutoCAD, то не совсем ясен тот факт, что код 1001 соответствует началу приложения/группы, которое/которая включает в себя все остальные коды и информацию. В принципе, для себя я решил, что мне достаточно всего лишь 2х кодов (1001 и 1000). 1001 - я начинаю группу, затем я формирую n-ое количество строк с кодом 1000 с абсолютно любым содержимым.
Например,
1001 - Перекрытие (appname/string)
1000 - Класс бетона_С16/20
1000 - Толщина перекрытия_200
1000 - Диаметр фона_12
и т.д.
Вот такая получается "вынужденная" структура, к которой не сложно привыкнуть.
В принципе, для того, чтобы все это понять (не читая русскоязычную справку:)), достаточно использовать утилиту MgdDbg или утилиту из ExpressTools(XDLIST) и немного поэкспериментировать с программным кодом.


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В принципе, для себя я решил, что мне достаточно всего лишь 2х кодов (1001 и 1000). 1001 - я начинаю группу, затем я формирую n-ое количество строк с кодом 1000 с абсолютно любым содержимым.
Например,
1001 - Перекрытие (appname/string)
1000 - Класс бетона_С16/20
1000 - Толщина перекрытия_200
1000 - Диаметр фона_12
и т.д.
Можно и так, если в тексте никогда не может встретится подчеркивание. Я так понял, что подчеркивание - это твой символ разделитель. Я бы выбрал бы какой-то более экзотический. Например, \ или | (можно парные).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Я так понял, что подчеркивание - это твой символ разделитель.
Да, именно так. На него я буду опираться при "извлечении" информации.
Я бы выбрал бы какой-то более экзотический. Например, \ или | (можно парные).
Кстати, да. Вы правы. Спасибо за совет.
Интересно получается, что, если работать с адним и тем же 1001, то его даже удалять не нужно - я так понял, что группа перезаписывается целиком каждый раз.
Например, я записал что-то типа:
Код - C# [Выбрать]
  1. RegAppTable regTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);
  2.                 if (!regTable.Has("Перекрытие"))
  3.                 {
  4.                     regTable.UpgradeOpen();
  5.                     RegAppTableRecord app = new RegAppTableRecord();
  6.                     app.Name = "Перекрытие";
  7.                     regTable.Add(app);
  8.                     tr.AddNewlyCreatedDBObject(app, true);
  9.                 }
  10.                 ent.XData = new ResultBuffer(new TypedValue(1001, "Перекрытие"),
  11.                     new TypedValue(1000, "Класс бетона||С16/20"));
Получил:
Код - INI [Выбрать]
  1. 1001 - Перекрытие (appname/string)
  2. 1000 - Класс бетона||С16/20
А потом ничего не удаляя добавил следующую инфу:
Код - C# [Выбрать]
  1. ent.XData = new ResultBuffer(new TypedValue(1001, "Перекрытие"),
  2.                     new TypedValue(1000, "Класс бетона||С20/25"));
[/code]
И группа целиком перезаписалась:
Код - INI [Выбрать]
  1. 1001 - Перекрытие (appname/string)
  2. 1000 - Класс бетона||С20/25
Это меня удивило потому, что я ожидал другой результат, такой, например:
Код - INI [Выбрать]
  1. 1001 - Перекрытие (appname/string)
  2. 1000 - Класс бетона||С16/20
  3. 1000 - Класс бетона||С20/25
Но существующий вариант меня, вообще, целиком устраивает. Вопрос только, не происходит ли там какого "захламления", которым часто тут пугают ;) ?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Это меня удивило потому, что я ожидал другой результат, такой, например:
Код - INI [Выбрать]

    1001 - Перекрытие (appname/string)
    1000 - Класс бетона||С16/20
    1000 - Класс бетона||С20/25

Но существующий вариант меня, вообще, целиком устраивает. Вопрос только, не происходит ли там какого "захламления", которым часто тут пугают ;) ?
Ты абсолютно прав о том, что происходит полная замена. Это как замена по ключу. Захламления нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Захламления нет.
Отлично :)
В общем, xData мне пришлась по душе. В данный момент запиливаю окошка типа:

Установить создает группу 1001 Перекрытие и записывает туда строки 1000 (правда их будет порядка 10).
Проверить выводит всю группу 1001 Перекрытие, чтобы убедиться, что все ок.
В общем, считаю данный вариант оптимальным решением вопроса, который после появления самого решения, стал неактуальным :) - то есть мне больше не нужен блок. Конечно с обработкой информации придется чутка больше провозиться, но мне нравится, все устраивает.
Решением данной темы, для себя, считаю первое сообщение от Александра Ривилиса(спасибо!), а также спасибо Владимиру Шу за интересные предложения.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Вот что вышло в итоге (самым сложным было сделать окошки WPF, с XData все просто и приятно):

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
IMHO достаточно симпатично и удобно для пользователя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение