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

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

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
В проекте есть выноски с несколькими типоразмерами.
Эти выноски представляют собой пользовательское семейство (Mарки обобщенной модели/OST_GenericModelTAG)
При помощи
Код - Visual Basic [Выбрать]
  1. Selection.PickObjects(ObjectType.Element, myfilter, "Select...")
получается список элементов типа...DB.IndependetntTag

Для обычного семейства, чтобы поменять типоразмер надо  получить FamilyInstance.
Но у IndependetntTag нет FamilyInstance.
« Последнее редактирование: 24-08-2017, 15:01:56 от Anatoly »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Как изменить типоразмер у выносок?
« Ответ #1 : 25-08-2017, 10:11:54 »
Anatoly, а myFilter что из себя представляет? Есть подозрение что выбраны не те объекты в итоге.

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как изменить типоразмер у выносок?
« Ответ #2 : 25-08-2017, 10:40:20 »
C помощью фильтра выбираются два типа объектов, первый - семейство, второй тип - выноски, которые отображают параметры этого семейства.
Выбор действительно происходит, выбирается то, что нужно.
Revit 2015

Код - vb.net [Выбрать]
  1. Public Class myfilter
  2.  Implements ISelectionFilter
  3.  
  4.  Public Function AllowElement(e As Element) As Boolean Implements ISelectionFilter.AllowElement
  5.  
  6.   Return SolidboxAndMetka(e)
  7.  End Function
  8.  
  9.  Public Function AllowReference(refer As Reference, point As XYZ) As Boolean Implements ISelectionFilter.AllowReference
  10.   Return False
  11.  End Function
  12.  
  13.  Public Shared Function SolidboxAndMetka(ByVal e As Element) As Boolean
  14.   Dim rc As Boolean = False
  15.   Dim cat As Category = e.Category
  16.   Dim doc As Document = e.Document
  17.  
  18.   If (Not (cat) Is Nothing) Then
  19.  
  20.    If cat.Id.IntegerValue.Equals(CInt(BuiltInCategory.OST_GenericModel)) Then
  21.     Dim fi As FamilyInstance = CType(e, FamilyInstance)
  22.     If (Not (fi) Is Nothing) Then
  23.      Dim fname As String = fi.Symbol.Family.Name
  24.      If fname = "solidboxn" Then rc = True
  25.     End If
  26.    End If
  27.  
  28.    If cat.Id.IntegerValue.Equals(CInt(BuiltInCategory.OST_GenericModelTags)) Then
  29.     Dim tagobj As IndependentTag = CType(e, IndependentTag)
  30.     If (Not (tagobj) Is Nothing) Then
  31.      Dim elt As ElementType = TryCast(doc.GetElement(tagobj.GetTypeId()), ElementType)
  32.      If elt.FamilyName = "metkaSB" Then rc = True
  33.     End If
  34.    End If
  35.   End If
  36.  
  37.   Return rc
  38.  End Function
  39. End Class

Парадокс: создать выноску с нужным типоразмером могу,
Код - vb.net [Выбрать]
  1. uidoc.PromptForFamilyInstancePlacement(cursymb)
а изменить существующую нет.

Отмечено как Решение Anatoly 28-08-2017, 23:53:29

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как изменить типоразмер у выносок?
« Ответ #3 : 28-08-2017, 23:53:26 »
Все оказалось очень просто.
Код - vb.net [Выбрать]
  1. indptag.ChangeTypeId(symbId)
где symbId (As ElementID) Id нужного мне типоразмера