Изменение переменных во временной базе данных

Автор Тема: Изменение переменных во временной базе данных  (Прочитано 6953 раз)

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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Здравствуйте!
Столкнулся с необходимостью задать значения переменных INSUNITS и MEASUREMENT в базе данных, которая создаётся "на лету" и не открывается как документ:
Код - C# [Выбрать]
  1. using (var objIds = new ObjectIdCollection(ids.ToArray()))
  2. using (var newDb = new Database(true, true))
  3. {
  4.     database.Wblock(newDb, objIds, Point3d.Origin, DuplicateRecordCloning.Ignore);
  5.     newDb.SaveAs(path, DwgVersion.Current);
  6. }
  7.  
В голову приходит только вариант сделать её текущей и с помощью Application.SetSystemVariable назначить переменным значения. Насколько это корректно? Может быть есть способ лучше?

Отмечено как Решение Александр Ривилис 09-10-2020, 18:04:51

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Нашёл  :)!
Код - C# [Выбрать]
  1. newDb.Insunits = UnitsValue.Meters;
  2. newDb.Measurement = MeasurementValue.Metric;

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

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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Да я как-то не сразу догадался, что вот так напрямую переменные в свойства базы "встроены"...
А вот интересно, если для переменной нет такого эквивалента, через Application.SetSystemVariable задавать? Например, для переменной IMAGEFRAME я такого не нашёл.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот интересно, если для переменной нет такого эквивалента
Во-первых, следует убедится, что эта системная переменная хранится в dwg-файле.
Во-вторых, имя системной переменной может не совпадать с именем метода для Database.
В данном же случае всё хорошо иллюстрирует эта картинка (т.е. информация о IMAGEFRAME хранится в NOD):




Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
если для переменной нет такого эквивалента, через Application.SetSystemVariable задавать?
Переменные хранятся в различных местах.
Например у Александра на скриншоте AcDbVariableDictionary, некоторые храниться там.

Чтоб быстрее найти где хранятся свойства, связанные с переменной,  открывай справку arxmgd.chm и набирай имя переменной.
Например переменная UCSFOLLOW храниться в свойстве Viewport.UcsFollowModeOn.

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

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

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
...для каждого видового экрана и соответственно системная переменная UCSFOLLOW соответствует свойству UcsFollowModeOn для активного видового экрана.
Согласен.

Для данной переменной в справке указано, что значение храниться в чертеже.
Тип: Целый
Сохранен в:  Чертеж
Начальное значение: 0

Но по факту, это свойство есть у каждого видового экрана. И переменная задает значение для активного видового экрана.

...но я лишь хотел помочь Дмитрию быстрее по имени переменной найти соответствующий объект и свойство. К счастью справка содержит подобную информацию.