Создание крыши
Изначально вопрос бы задан на форуме Revit API и Stack Overflow:
Вопрос: У меня проблема с программным созданием крыши. Я знаю, как создавать лестницы, к примеру, используя CreateSketchedLanding с корректными параметрами. Но вот как воздать крышу с нуля, не пойму. Может кто-нибудь направить меня в нужное русло?
Ответ: Пожалуйста, всегда ищите нужную информацию в файле справки Revit API и онлайн помощи до того, как задавать подобные вопросы.
Вот один из моих недавних примеров по разделу Крыши:
- // Перед запуском примера, выделите несколько стен
- // над которыми будет создана крыша. Удостоверьтесь, что в
- // проекте есть уровень «Крыша»
- Level level
- = new FilteredElementCollector( doc )
- .OfClass( typeof( Level ) )
- .Where<Element>( e =>
- !string.IsNullOrEmpty( e.Name )
- && e.Name.Equals( "Крыша" ) )
- .FirstOrDefault<Element>() as Level;
- RoofType roofType
- = new FilteredElementCollector( doc )
- .OfClass( typeof( RoofType ) )
- .FirstOrDefault<Element>() as RoofType;
- // Ссылка на приложен
- Application application = doc.Application;
- // Определяем контур нашей крыше по выделенным стенам
- CurveArray footprint = application.Create
- .NewCurveArray();
- UIDocument uidoc = new UIDocument( doc );
- ICollection<ElementId> selectedIds
- = uidoc.Selection.GetElementIds();
- if( selectedIds.Count != 0 )
- {
- foreach( ElementId id in selectedIds )
- {
- Element element = doc.GetElement( id );
- Wall wall = element as Wall;
- if( wall != null )
- {
- LocationCurve wallCurve = wall.Location as LocationCurve;
- footprint.Append( wallCurve.Curve );
- continue;
- }
- ModelCurve modelCurve = element as ModelCurve;
- if( modelCurve != null )
- {
- footprint.Append( modelCurve.GeometryCurve );
- }
- }
- }
- else
- {
- throw new Exception(
- "Пожалуйста, выберите замкнутые кривые или замкнутые стены "
- + "или комбинацию стен и кривых, образующих замкнутое пространство"
- + " для создания крыши по контуру." );
- }
- ModelCurveArray footPrintToModelCurveMapping
- = new ModelCurveArray();
- FootPrintRoof footprintRoof
- = doc.Create.NewFootPrintRoof(
- footprint, level, roofType,
- out footPrintToModelCurveMapping );
- ModelCurveArrayIterator iterator
- = footPrintToModelCurveMapping.ForwardIterator();
- iterator.Reset();
- while( iterator.MoveNext() )
- {
- ModelCurve modelCurve = iterator.Current as ModelCurve;
- footprintRoof.set_DefinesSlope( modelCurve, true );
- footprintRoof.set_SlopeAngle( modelCurve, 0.5 );
- }
Для тестирования проверьте, что в модели есть стены, над которыми можно разместить крышу и что в модели есть уровень с именем «Крыша».
Я создал простой прямоугольник из стен, выбрал их и запустил команду.
Этот код создает крышу по контуру.
Revit позволяет также создавать другие типы крыш.
Важно понимать, как работает Revit и что обозначают разные типы крыш с точки зрения пользователя до того, как реализовывать создание с помощью API.
Крыша по контуру определяется горизонтальным контуром и создается с помощью метода Document.NewFootPrintRoof. такие крыши могут быть плоскими, или вы можете задать наклон для каждой стороны крыши.
В Building Coder Xtra labs есть еще рабочие примеры создания крыш в команде Lab2_0_CreateLittleHouse in Labs2.cs
На сайте The Building Coder также есть несколько примеров по созданию крыш (на англ.):
Источник: http://thebuildingcoder.typepad.com/blog/2015/09/revit-answer-day-and-creating-a-roof.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=3060
Опубликовано 29.09.2015