' This class is instantiated by AutoCAD for each document when
' a command is called by the user the first time in the context
' of a given document. In other words, non static data in this class
' is implicitly per-document!
2. Если вам не очень важно контролировать файл хранения параметров вашего плагина, то вам отлично подойдут возможности, которые предоставляет VisualStudio - свойства проекта, вкладка "Параметры". Достаточно гибкий инструмент, который все делает сам - и создает классы для работы с параметрами и папку хранения параметров, в которой хранится тот-же самый xml-файл. Папка создается в каталоге AppData пользователя. Главный плюс - стабильная работаЯ использую Visual Studio крайне эпизодически, ткните носом пожалуйста, как извлекать/записывать значения из своей процедуры в эти параметры?
Да и кстати, а как сам AutoCAD поступает с сохранением параметров своих команд? К примеру, команда ФАСКА. Параметры сохраняются в чертеже, в новом - параметры по умолчанию (а может из шаблона?)Если они сохраняются, то обычно в системных переменных. Для Фаски:
Если они сохраняются, то обычно в системных переменныхА можно ли такие системные переменные создавать? Если да, то каким образом?
А можно ли такие системные переменные создавать?Нет.
2. Если вам не очень важно контролировать файл хранения параметров вашего плагина, то вам отлично подойдут возможности, которые предоставляет VisualStudio - свойства проекта, вкладка "Параметры". Достаточно гибкий инструмент, который все делает сам - и создает классы для работы с параметрами и папку хранения параметров, в которой хранится тот-же самый xml-файл. Папка создается в каталоге AppData пользователя. Главный плюс - стабильная работаАлександр, а можно поподробнее? Не очень понимаю, о чём речь.
Александр, а можно поподробнее? Не очень понимаю, о чём речь.В Visual Basic все оказалось достаточно просто: нужно открыть вкладку My Project в обозревателе решений, далее в ней открыть закладку Параметры. Там надо создать необходимые параметры. В коде их можно использовать через объект My.Settings. Соответствующие свойства объекта создаются автоматически, их можно читать/записывать. Эффективно, но не вижу возможности использовать значения по умолчанию для каждого нового чертежа. Свойства доcтупны для чтения и изменения из всех чертежей.
Раз вам все-таки надо хранить разные настройки в разных чертежах, то вариант с хранением во внешних файлах вам не подходит. Используйте пользовательские свойства чертежа или xData или xRecord для хранения любых своих данных внутри файла dwgxData и xRecord создаются для конкретных объектов? Как использовать пользовательские свойства чертежа?
Александр, а можно поподробнее? Не очень понимаю, о чём речь.
Эффективно, но не вижу возможности использовать значения по умолчанию для каждого нового чертежа. Свойства доcтупны для чтения и изменения из всех чертежей.Ну как я и сказал - открываете свойства проекта и идете на вкладку "Параметры". Её многие привыкли использовать для локализации (не лучший способ, ИМХО). Там ручками создаем параметры. При этом мы задаем тип данных и значение по умолчанию (которое Phil почему-то не увидел).
Ну как я и сказал - открываете свойства проекта и идете на вкладку "Параметры". Её многие привыкли использовать для локализации (не лучший способ, ИМХО). Там ручками создаем параметры. При этом мы задаем тип данных и значение по умолчанию (которое Phil почему-то не увидел).Значения по умолчанию я увидел и уже использовал. Проблема в другом: изменения этих параметров видят все открытые в данный момент чертежи. То есть они являются не локальными для каждого чертежа, а глобальными. Иначе говоря, изменяя параметры команды в одном чертеже и сохраняя их таким способом, в другом параллельно открытом чертеже, читаю только что измененные параметры.
Проблема в другом: изменения этих параметров видят все открытые в данный момент чертежи. То есть они являются не локальными для каждого чертежа, а глобальными. Иначе говоря, изменяя параметры команды в одном чертеже и сохраняя их таким способом, в другом параллельно открытом чертеже, читаю только что измененные параметры.Ну как выше уже ответили - использовать тогда вам XData
Использование xData для таких целей вижу неудобным, поскольку объекты могут копироваться и удаляться, таким образом теряются прикрепленные данныеВам же сказали - вы можете хранить XData в самом чертеже. И пример выше дали. Эти данные никуда не денутся
Использование xData для таких целей вижу неудобным, поскольку объекты могут копироваться и удаляться, таким образом теряются прикрепленные данные
Пространство модели - объект и к нему можно добавлять XData/Вот как можно потерять пространство модели?
Ну как я и сказал - открываете свойства проекта и идете на вкладку "Параметры". Её многие привыкли использовать для локализации (не лучший способ, ИМХО). Там ручками создаем параметры. При этом мы задаем тип данных и значение по умолчанию (которое Phil почему-то не увидел).Хм, как интересно! То ли раньше этот механизм по-другому работал, то ли я в нём в своё время не до конца разобрался. Спасибо!
При этом VisualStudio создает специальный класс
Дальше уже в коде использовать эти параметры проще простого
Код - C# [Выбрать]
var isCurrent = Properties.Settings.Default.IsCurrent;
При задании новых значений нужно не забывать вызывать метод сохранения, так как само это не происходит
Код - C# [Выбрать]
Properties.Settings.Default.IsCurrent = true;
Properties.Settings.Default.Save();
Еще эти параметры удобно биндить на WPF окна, что сокращает количество кода в разы
Вот мой хелпер для записи в свойства чертежа
Я немного дополню. Пространство модели - объект и к нему можно добавлять XData/Странно, что никто ещё не посоветовал использовать NamedObjectDictionary. Хотя, на мой взгляд, это самое оптимальное место хранения данных уровня чертежа.
Странно, что никто ещё не посоветовал использовать NamedObjectDictionary. Хотя, на мой взгляд, это самое оптимальное место хранения данных уровня чертежа.А можно пример практической реализации? Я пробовал читать и записывать, но не разобрался как, к примеру, записать в словарь числовое значение double
Странно, что никто ещё не посоветовал использовать NamedObjectDictionaryПочему же никто? Первый комментарий в теме:
Если надо сохранить в чертеж - я бы использовал словари и xRecord
Один из самых простых и наглядных: https://forums.autodesk.com/t5/net/save-some-variables-into-dwg-file-how-c/td-p/3617358Обнаружилась некоторая проблема при использовании этого решения... Ниже приведен код.
Ну и, классика: https://google.gik-team.com/?q=autocad+net+namedobjectsdictionary ;)
Почитай: http://adndevblog.typepad.com/autocad/2012/07/undo-removes-updated-dictionary-entry.html