2016-02-29 6 views
34

У меня есть куча рамп, которые я хотел бы знать о начале и конце точки (и в случае нескольких начальных/конечных точек я хотел бы знать, как они соединяются). я в настоящее время получить их какКак найти начало/конец рампы в revit, возможно с эскизами?

List<TransitionPoint> ret = new List<TransitionPoint>(); 
FilteredElementCollector collector = new FilteredElementCollector(doc); 
ICollection<Element> ramps = collector.OfCategory(BuiltInCategory.OST_Ramps).ToElements(); 

foreach (var ramp in ramps) 
{ 
    //what goes here? 
} 

Эти пандусы содержат следующие свойства:

Type Comments 
Ramp Max Slope (1/x) 
Category 
URL 
Design Option 
Type Name 
Ramp Material 
Function 
Manufacturer 
Family Name 
Model 
Keynote 
Type Image 
Text Size 
Shape 
Text Font 
Maximum Incline Length 
Assembly Description 
Assembly Code 
Type Mark 
Category 
Thickness 
Cost 
Description 

Теперь, если они где лестницы я хотел бы использовать ICollection stairs = collector.OfCategory(BuiltInCategory.OST_Stairs).OfClass(typeof(Stairs)).ToElements(); , а затем я могу бросить объекты в Лестница однако делает не кажется классом simmulair к Лестнице, которая позволила бы мне adres Stairs.GetStairsRuns().

Кто-нибудь знает, как получить что-то вроде RampRun или иначе найти начало и конец рампы?

Я также попытался следующим гуманным, но это не сработало

public static void MapRunsToRamps(Document doc) 
{ 
    var rule = ParameterFilterRuleFactory.CreateNotEqualsRule(new ElementId(BuiltInParameter.HOST_ID_PARAM), "null", true); 

    ElementParameterFilter filter = new ElementParameterFilter(rule); 
    FilteredElementCollector collector = new FilteredElementCollector(doc); 
    List<Element> rampsRuns = collector.WherePasses(filter).ToElements().ToList<Element>(); 
    foreach (Element e in rampsRuns) 
    { 
     var hostpara = e.get_Parameter(BuiltInParameter.HOST_ID_PARAM); 
     if (hostpara != null) 
     { 
     var host = doc.GetElement(new ElementId(hostpara.AsInteger())); 
     if (host.Category.Equals(BuiltInCategory.OST_Ramps)) 
     { 
      //breakpoint that is never activated 
     } 
     } 
    } 
} 

Это находит много объектов только доли не имеет с рампой в качестве хоста.

Вот пример рампы и местоположения, которое я пытаюсь найти, отмеченные красными стрелками. ramps marked with red arrows

Этот https://forums.autodesk.com/t5/revit-api/how-do-we-get-the-x-y-z-cordinates-for-stairs-ramps/td-p/2575349 предлагает нам использовать locationcurve, любым способом сделать это?

редактировать: Там же, кажется, эскизы, на основании которых мы могли бы быть в состоянии найти пандусы, вопрос, если у меня есть эскиз сказать

var rampCategoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_StairsSketchRunLines); 
    var rampsRuns = new FilteredElementCollector(doc).WherePasses(rampCategoryfilter); 

тогда я могу действительно получить места, но что У меня нет рампы, которой это тоже принадлежит, любая идея, как ее найти?

+0

И какую версию Revit вы используете? –

+0

Я разрабатываю для 2015-2016 и 2017 гг. – Thijser

+0

Взгляните на это: https://knowledge.autodesk.com/de/support/revit-products/learn-explore/caas/CloudHelp/cloudhelp/2014/DEU/ Revit/files/GUID-D5F9820D-B548-4600-8739-8029AD3B3B8B-htm.html (проверьте метод GetStairLandings) –

ответ

1

Предполагая, что ваш Ramp является FamilyInstance:

var fecRamps = new FilteredElementCollector(doc) 
    .OfClass(typeof(FamilyInstance)) 
    .Where(pElt => 
    { 
     int lCatId = pElt.Category.Id.IntegerValue; 
     return lCatId == (int)BuiltInCategory.OST_Ramps; 
    }) 
    .OfType<FamilyInstance>() 
    .ToList(); 

List<XYZ> lRampLocs = new List<XYZ>(); 
foreach (var pFam in fecRamps) 
{ 
    var fLoc = pFam.Location as LocationCurve; 
    var fRampSide1 = new XYZ(fLoc.Curve.GetEndPoint(0); 
    var fRampSide2 = new XYZ(fLoc.Curve.GetEndPoint(1); 

    lRampLocs.Add(fRampSide1); 
    lRampLocs.Add(fRampSide2); 
} 

Каждый FamilyInstance имеет Location, и вы можете бросить Location как LocationCurve. Из кривой вы можете получить конечные точки через пространство имен Autodesk.Revit.DB.

 Смежные вопросы

  • Нет связанных вопросов^_^