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

ADN Club => Revit API => Тема начата: Антон Останин от 18-06-2015, 12:40:53

Название: Создать Отличительный знак.
Отправлено: Антон Останин от 18-06-2015, 12:40:53
Добрый день, есть ли в Revit возможность создать какой-то свой отличительный знак?
Например, пометить семейство.
Название: Re: Создать Watermark.
Отправлено: Александр Игнатович от 18-06-2015, 12:44:50
День добрый!

А что Вы подразумеваете под пометить? Я так понимаю, задача в том, чтобы можно было отловить использование семейства в чужих проектах?

Тогда можно использовать ExtensibleStorage или параметры, доступные только программно (на сколько не врет память, они появились в 2015 версии). Только чтобы прочитать пометку нужен свой addin
Название: Re: Создать Watermark.
Отправлено: Антон Останин от 18-06-2015, 12:50:11
То есть нет такого пути, чтобы это можно было внести через API, а проверить потом не используя Add-in?
Название: Re: Создать Watermark.
Отправлено: Александр Игнатович от 18-06-2015, 12:56:25
Ну я такого способа не вижу, параметры, которые видны в пользовательском интерфейсе поменять проблем нет, если только какую-то отличительную геометрию создавать очень маленькую, чтобы не заметили :-)
Название: Re: Создать Watermark.
Отправлено: Антон Останин от 18-06-2015, 12:58:03
Создать что-то типа системного параметра тоже нельзя? :-\
Название: Re: Создать Watermark.
Отправлено: Александр Игнатович от 18-06-2015, 13:06:55
ну вот с 2015 версии как раз можно, но он и доступен только программно будет
Название: Re: Создать Watermark.
Отправлено: Антон Останин от 18-06-2015, 15:17:03
Александр,  я задаю при создании параметра "UserModifiable = false", а свойство не срабатывает.
Также и с Visible = false.

 ExternalDefinitonCreationOptions options = new ExternalDefinitonCreationOptions("paramName", ParameterType.Text);
                    options.Visible = false;
                    options.UserModifiable = false;

Что я не так делаю?
Название: Re: Создать Watermark.
Отправлено: Александр Игнатович от 19-06-2015, 06:33:44
Ну ларчик открывается не так просто. Тут задачка, на самом деле, делится на 2.

Первая - создать определение общего параметра, как-то примерно вот так:
Код - C# [Выбрать]
  1.                 var definitionFile = doc.Application.OpenSharedParameterFile();
  2.  
  3.                 var group = definitionFile.Groups.get_Item("mygroup");
  4.                
  5.                 var options = new ExternalDefinitonCreationOptions("myprm1", ParameterType.Text)
  6.                     {
  7.                         UserModifiable = false,
  8.                         Visible = false
  9.                     };
  10.  
  11.                 var definition = group.Definitions.Create(options);

Вторая - используя определение этого параметра уже добавить его в параметры семейства:
Код - C# [Выбрать]
  1. doc.FamilyManager.AddParameter(definition as ExternalDefinition, BuiltInParameterGroup.PG_IDENTITY_DATA, false);

Название: Re: Создать Watermark.
Отправлено: Александр Игнатович от 19-06-2015, 06:44:09
Но я, кстати, все-таки, посоветовал бы использовать не параметры, а Extensible storage. В любом случае, Ваш Watermark в UI будет не виден, если в ExternalDefinitonCreationOptions поставить Visible = true, то в редакторе семейств параметр можно изменить или удалить, параметр виден в RevitLookup, extensible storage, конечно, тоже, но привлекает гораздо меньше внимания, плюс имеет кое-какую защиту в т.ч. на чтение из него данных.

Второй плюс - поиск ваших семейств в проекте. ExtensibleStorageFilter относится к быстрым фильтрам, в отличие от фильтров по параметрам
Название: Re: Создать Отличительный знак.
Отправлено: Пашин Евгений от 22-10-2015, 10:52:04
Первая - создать определение общего параметра, как-то примерно вот так:
Код - C#: [Выделить]
                var definitionFile = doc.Application.OpenSharedParameterFile();
 
                var group = definitionFile.Groups.get_Item("mygroup");
               
                var options = new ExternalDefinitonCreationOptions("myprm1", ParameterType.Text)
                    {
                        UserModifiable = false,
                        Visible = false
                    };
 
                var definition = group.Definitions.Create(options);

А можно ли не трогать общие параметры вообще?
Название: Re: Создать Отличительный знак.
Отправлено: Александр Игнатович от 22-10-2015, 10:54:03
Не понял вопрос, честно говоря. В комменте выше рекомендую пользовать расширяемую область хранения
Название: Re: Создать Отличительный знак.
Отправлено: Пашин Евгений от 22-10-2015, 11:16:19
Что касается Extensible Storage, добавлять данные можно, а защитить их от удаления возможно?

Уже узнал - нет!