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

17/09/2013

Пример кода аннотации для нескольких арматурных стержней

Вопрос: Можно мне увидеть пример кода создания аннотации для нескольких арматурных стержней?

Я поискал в Revit SDK и нашел класс MultiReferenceAnnotation, но я так и не смог реализовать пример использования этого класса.

С помощью метода Autodesk.Revit.Creation.Document.Create.NewTag я создал обычную метку для арматурного стержня и заметил, что метка имеет свойство MultiReferenceAnnotationId.

Ответ: Обратите внимание на метод  MultiReferenceAnnotation.Create, который в качестве аргумента принимает класс MultiReferenceAnnotationOptions.

Минимально необходимые свойства для этого класса, которые позволят создать аннотацию для нескольких стрежней это тип и ElementsToDimension.

Ниже вы найдете кусок кода, который мы использовали для внутреннего тестирования метода.  В нем правда есть парочка жестко закодированных идентификаторов элемента. Обратитесь к документации, чтобы понять, что они означают:

Код - C#: [Выделить]
  1.   var view = GetElement<View>( 124186 );
  2.  
  3.   var rebarList = GetElements<Element>(
  4.     doc, new[] { 280427 } ).ToList();
  5.  
  6.   Assert.IsTrue( rebarList.Count > 0,
  7.     "There are no rebars in the document!" );
  8.  
  9.   IList<ElementId> elementIds
  10.     = new List<ElementId>();
  11.  
  12.   foreach( Element rebar in rebarList )
  13.   {
  14.     elementIds.Add( rebar.Id );
  15.   }
  16.  
  17.   MultiReferenceAnnotationType type
  18.     = GetElement<MultiReferenceAnnotationType>(
  19.       doc, 260544 );
  20.  
  21.   Assert.IsNotNull( type,
  22.     "the MultiReferenceAnnotationType does not exist!" );
  23.  
  24.   MultiReferenceAnnotationOptions options
  25.     = new MultiReferenceAnnotationOptions( type );
  26.  
  27.   options.TagHeadPosition = new XYZ( 0, 100, 0 );
  28.   options.DimensionLineOrigin = new XYZ( 5, 5, 1 );
  29.   options.DimensionLineDirection = new XYZ( 0, 1, 0 );
  30.   options.DimensionPlaneNormal = view.ViewDirection;
  31.   options.SetElementsToDimension( elementIds );
  32.  
  33.   using( Transaction tran = new Transaction( doc ) )
  34.   {
  35.     tran.Start( "Create_Rebar_Vertical" );
  36.  
  37.     var mra = MultiReferenceAnnotation.Create(
  38.       doc, view.Id, options );
  39.  
  40.     var dimension = GetElement<Dimension>(
  41.       doc, mra.DimensionId );
  42.  
  43.     tran.Commit();
  44.   }

Источник: http://thebuildingcoder.typepad.com/blog/2013/09/multireferenceannotation-example.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=218

Опубликовано 17.09.2013
Отредактировано 17.09.2013 в 09:08:39