Создание марки элемента.

Автор Тема: Создание марки элемента.  (Прочитано 302 раз)

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

Оффлайн ST520Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Создание марки элемента.
« : 22-03-2020, 19:09:40 »
Добрый день.
Пожалуйста дайте пример кода, размещающий марку выбранного элемента (Tag) на виде.

Вроде как за это в Revit API отвечает:
IndependentTag.Create
https://www.revitapidocs.com/2020/b8e8eec2-8e3b-08f2-a9a5-89f24465c8b9.htm
но вот заставить работать этот метод кодом из примера я не смог.

Вот что у меня не получилось:

Код - C# [Выбрать]
  1.     FamilySymbol tagType = (from tag in new FilteredElementCollector(doc)
  2.     .OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_ConduitTags)
  3.                                 .Cast<FamilySymbol>()
  4.                                    where tag.Name == "Имя_Teg"
  5.                                    select tag).First();
  6.                 var view = doc.ActiveView;
  7.                 var tagMode = false;
  8.                 var tagorn = TagOrientation.Horizontal;
  9.                 Reference rRef = new Reference(tagType);
  10.  
  11.             Selection selection = uidoc.Selection;
  12.             ICollection<ElementId> selectedIds = uidoc.Selection.GetElementIds();
  13.  
  14.             List<ElementId> ids = new List<ElementId>();
  15.             ids = selectedIds.ToList();
  16.  
  17.             Element e = doc.GetElement(ids[0]);
  18.             XYZ xyz = new XYZ(0, 0, 0);
  19.  
  20.             using (Transaction tx = new Transaction(doc))
  21.             {
  22.                 tx.Start("Create tags");
  23.  
  24. IndependentTag newTag = IndependentTag.Create(
  25.                     doc,
  26.                     view.Id,
  27.                     e.Id,
  28.                     rRef,
  29.                     tagMode,
  30.                     tagorn,
  31.                     xyz);
  32.  
  33.                 tx.Commit();
  34.                 return Result.Succeeded;
  35.             }

Отмечено как Решение ST520 25-03-2020, 22:10:05

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 758
  • Карма: 241
  • Skype: alexandr.ignatovich.itc
Re: Создание марки элемента.
« Ответ #1 : 22-03-2020, 19:43:50 »
Привет. Почитай внимательно описание параметров, 2-ым должен быть id типоразмера самой марки, 3 - id вида.

Опять же смотри, там эти методы создания марки меняли сигнатуры в последних нескольких версиях Revit (насколько помню)

Вот кусочек кода из проекта, думаю, идея понятна, опять же внимательно смотри сигнатуру метода версии Revit, под которую ты пишешь код.

Код - C# [Выбрать]
  1. const double distanceInMm = 10;
  2.  
  3. var center = GetOrigin(elementToTag);
  4.  
  5. if (center == null)
  6.         return;
  7.  
  8. var view = (View)document.GetElement(elementToTag.OwnerViewId);
  9.  
  10. var distance = UnitUtils.ConvertToInternalUnits(distanceInMm * view.Scale, DisplayUnitType.DUT_MILLIMETERS);
  11.  
  12. var direction = view.RightDirection + view.UpDirection;
  13.  
  14. var tagCenter = center + distance * direction;
  15.  
  16. var tag = IndependentTag.Create(document, view.Id, new Reference(elementToTag), true, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Horizontal, tagCenter);
  17.  
  18. var tagType = FindTagType(document) ?? tagTypeGenerator.Create(document);
  19.  
  20. if (tagType != null)
  21.         tag.ChangeTypeId(tagType.Id);
  22.  
  23. tag.TagHeadPosition = tagCenter;

Оффлайн ST520Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Создание марки элемента.
« Ответ #2 : 25-03-2020, 22:10:53 »
Спасибо большое, все получилось!