如何find斜坡的开始/结束,也许用草图?

我有一堆斜坡,我想知道的开始和结束点(以及在多个开始/终点的情况下,我想知道他们如何连接)。 我目前得到这些

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(); 然后我可以将这些物体投射到楼梯上,但是似乎没有类似于楼梯的类,这将允许我使用Stairs.GetStairsRuns().

任何人都知道如何得到类似RampRun的东西,或者find一个斜坡的开始和结束?

我也尝试了以下溶剂,但也没有工作

 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 } } } } 

这发现很多对象只是没有一个斜坡作为主机。

这里是一个斜坡的例子,我试图find用红色箭头标记的位置。 用红色箭头标记的斜坡

这https://forums.autodesk.com/t5/revit-api/how-do-we-get-the-xyz-cordinates-for-stairs-ramps/td-p/2575349build议我们可以使用一个位置曲线,任何方式来做到这一点?

编辑:似乎是草图,我们可以find斜坡的基础上,问题是如果我有一个素描与

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

那么我确实可以得到的位置,但我没有的是这个属于的匝道,任何想法如何find?

假设你的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命名空间获取端点。