Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 09-10-2020, 16:46:57

Название: Изменение переменных во временной базе данных
Отправлено: Дмитрий Загорулькин от 09-10-2020, 16:46:57
Здравствуйте!
Столкнулся с необходимостью задать значения переменных 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 назначить переменным значения. Насколько это корректно? Может быть есть способ лучше?
Название: Re: Изменение переменных во временной базе данных
Отправлено: Дмитрий Загорулькин от 09-10-2020, 16:58:01
Нашёл  :)!
Код - C# [Выбрать]
  1. newDb.Insunits = UnitsValue.Meters;
  2. newDb.Measurement = MeasurementValue.Metric;
Название: Re: Изменение переменных во временной базе данных
Отправлено: Александр Ривилис от 09-10-2020, 18:05:45
А я даже не успел до дома доехать и ответить.  :)
Название: Re: Изменение переменных во временной базе данных
Отправлено: Дмитрий Загорулькин от 12-10-2020, 09:55:13
Да я как-то не сразу догадался, что вот так напрямую переменные в свойства базы "встроены"...
А вот интересно, если для переменной нет такого эквивалента, через Application.SetSystemVariable задавать? Например, для переменной IMAGEFRAME я такого не нашёл.
Название: Re: Изменение переменных во временной базе данных
Отправлено: Александр Ривилис от 12-10-2020, 10:36:51
А вот интересно, если для переменной нет такого эквивалента
Во-первых, следует убедится, что эта системная переменная хранится в dwg-файле.
Во-вторых, имя системной переменной может не совпадать с именем метода для Database.
В данном же случае всё хорошо иллюстрирует эта картинка (т.е. информация о IMAGEFRAME хранится в NOD):

(https://live.staticflickr.com/65535/50458192041_ffb9a45813_o.png)


Название: Re: Изменение переменных во временной базе данных
Отправлено: Привалов Дмитрий от 12-10-2020, 13:16:45
если для переменной нет такого эквивалента, через Application.SetSystemVariable задавать?
Переменные хранятся в различных местах.
Например у Александра на скриншоте AcDbVariableDictionary, некоторые храниться там.

Чтоб быстрее найти где хранятся свойства, связанные с переменной,  открывай справку arxmgd.chm и набирай имя переменной.
Например переменная UCSFOLLOW храниться в свойстве Viewport.UcsFollowModeOn.
Название: Re: Изменение переменных во временной базе данных
Отправлено: Александр Ривилис от 12-10-2020, 13:40:02
Например переменная UCSFOLLOW храниться в свойстве Viewport.UcsFollowModeOn.
...для каждого видового экрана и соответственно системная переменная UCSFOLLOW соответствует свойству UcsFollowModeOn для активного видового экрана.
Название: Re: Изменение переменных во временной базе данных
Отправлено: Привалов Дмитрий от 12-10-2020, 14:08:50
...для каждого видового экрана и соответственно системная переменная UCSFOLLOW соответствует свойству UcsFollowModeOn для активного видового экрана.
Согласен.

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

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

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