Как вставить семейство с нужным типоразмером?

Автор Тема: Как вставить семейство с нужным типоразмером?  (Прочитано 2811 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Код
Код - vb.net [Выбрать]
  1. Dim familyType As FamilySymbol = TryCast(doc.GetElement(elementSet.First()), FamilySymbol)
вставляет первый типоразмер, а если у меня есть семейство с типоразмерами "a", "b", "c", "d", то как вставить, например с типоразмером "с"?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Код - C# [Выбрать]
  1.  /// <summary>Вставка семейства</summary>
  2.         /// <param name="uiApplication"></param>
  3.         private void InsertFamily(UIApplication uiApplication)
  4.         {
  5.             try
  6.             {
  7.                 var insertionPoint = XYZ.Zero;
  8.                 var doc = uiApplication.ActiveUIDocument.Document;
  9.                 FamilyInstance familyInstance = null;
  10.                 using (Transaction tr = new Transaction(doc, "PIK_ShowZero"))
  11.                 {
  12.                     tr.Start();
  13.                     Family family = (Family)doc.GetElement(_familyElementId);
  14.                     FamilySymbol familySymbol = (FamilySymbol)doc.GetElement(family.GetFamilySymbolIds().First());
  15.                     if (!familySymbol.IsActive)
  16.                         familySymbol.Activate();
  17.  
  18.                     familyInstance = doc.Create.NewFamilyInstance(insertionPoint, familySymbol, StructuralType.NonStructural);
  19.                     tr.Commit();
  20.                 }
  21.                 if (familyInstance != null)
  22.                 {
  23.                     var dialog = new TaskDialog("Системный ноль")
  24.                     {
  25.                         MainContent = "Семейство, обозначающее системный ноль, удачно вставлено"
  26.                     };
  27.                     dialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Показать вставленное семейство");
  28.                     var dialogResult = dialog.Show();
  29.                     if (dialogResult == TaskDialogResult.CommandLink1)
  30.                     {
  31.                         uiApplication.ActiveUIDocument.ShowElements(familyInstance.Id);
  32.                     }
  33.                 }
  34.                 else TaskDialog.Show("Системный ноль", "Не получилось вставить семейство");
  35.             }
  36.             catch (Exception exception)
  37.             {
  38.                 Log.Error("ShowZero.InsertFamily", exception);
  39.                 TaskDialog.Show("Блииииин :(",
  40.                     "Что-то пошло не так:" + Environment.NewLine + exception.Message + Environment.NewLine +
  41.                     exception.StackTrace);
  42.             }
  43.         }

Отмечено как Решение Anatoly 20-08-2017, 14:20:44

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Т.е. Вам нужно family.GetFamilySymbolIds() - уже среди полученного списка искать нужный тип и вставлять его. Не забывайте активировать

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Спасибо.
Так и сделал-в списке ищу нужный тип.
Код - vb.net [Выбрать]
  1.  If family IsNot Nothing Then
  2.    Dim elementSet As ISet(Of ElementId) = family.GetFamilySymbolIds()
  3.    For Each symbId In elementSet ' As ElementId  
  4.     Dim cursymb As FamilySymbol = doc.GetElement(symbId)
  5.     If cursymb.Name = "L35" Then
  6.      uidoc.PromptForFamilyInstancePlacement(cursymb)
  7.      isload = True
  8.      Exit For
  9.     End If
  10.    Next
Я вставляю семейство через указание пользователем на экране.

Кстати (прошу прощения, это уже другая тема) у меня после вставки ревит продолжает дальше просить следующие точки вставки.
Приходится два раза жать Esc.
Как бы осуществить одноразовую вставку?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Спасибо.
Так и сделал
Если ответ вам подошёл, то отметите его как решение
Кстати (прошу прощения, это уже другая тема) у меня после вставки ревит продолжает дальше просить следующие точки вставки.
Приходится два раза жать Esc.
Как бы осуществить одноразовую вставку?
Запустите отладку и посмотрите, что у вас происходит. Если не получится - создавайте новую тему с примером кода

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
у меня после вставки ревит продолжает дальше просить следующие точки вставки
А лучше почитайте справку к методу ;)
Цитировать
This method opens its own transaction, so it's not permitted to be invoked in an active transaction. In a single invocation, the user can place multiple instances of the input family type until they finish the placement (with Cancel or ESC or a click elsewhere in the UI). The user will not be permitted to change the type to be placed. Users are not permitted to change the active view during this placement operation (the operation will be completed).