如何在 revit 中找到坡道的开始/结束,也许是草图?

Posted

技术标签:

【中文标题】如何在 revit 中找到坡道的开始/结束,也许是草图?【英文标题】:How to find start/end of ramp in revit, perhaps with sketches? 【发布时间】:2016-06-12 11:47:27 【问题描述】:

我有一堆坡道,我想知道它们的起点和终点(如果有多个起点/终点,我想知道它们是如何连接的)。 我目前将这些作为

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 的东西,或者以其他方式找到坡道的起点和终点吗?

我也尝试了以下解决方案,但也没有用

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 
         
      
   

这会找到大量的对象,但没有一个以坡道作为宿主。

这是一个坡道示例,我试图找到的位置标有红色箭头。

这个https://forums.autodesk.com/t5/revit-api/how-do-we-get-the-x-y-z-cordinates-for-stairs-ramps/td-p/2575349 建议我们可以使用位置曲线,有什么办法吗?

编辑: 似乎确实有草图,我们可以根据这些草图找到坡道,问题是我是否有草图说

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

那么我确实可以得到位置,但我没有的是这也属于的坡道,知道如何找到吗?

【问题讨论】:

您使用的是哪个 Revit 版本? 我正在为 2015-2016 和 2017 年开发 看看这个:knowledge.autodesk.com/de/support/revit-products/learn-explore/…(检查 GetStairLandings 方法) 我非常了解楼梯组件,如果我可以像使用楼梯一样对坡道做同样的事情(get run ext.),我的问题就会得到解决,但我不能像使用坡道那样轻松地将坡道转换为坡道类我可以施放楼梯。 您是否使用 RevitLookup 探索过您的坡道?它是基于点、基于曲线还是基于草图?你不能从纯坡道几何中提取所需的信息吗? 【参考方案1】:

假设您的 RampFamilyInstance

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

【讨论】:

【参考方案2】:

在 Dynamo 中,如果您获得任何对象的坐标值,则第一个坐标是开始 second 坐标(或最后一个坐标)是元素的终点(线、墙、坡道等...)如果您获得的值一个列表中的坡道构成了一种算法,该算法采用偶数行中的元素,另一种采用奇数行中的元素,您得到了起点和终点(如果坡道没有其他属性)

坐标值列表在所有平台上必须是相同的样式

【讨论】:

以上是关于如何在 revit 中找到坡道的开始/结束,也许是草图?的主要内容,如果未能解决你的问题,请参考以下文章

BIM入门实战Revit 图元分类有哪三种?Revit图元分类图文详解

BIM入门实战Revit 图元分类有哪三种?Revit图元分类图文详解

从开始日期和结束日期开始,我如何找到当前“活动”的记录?

Revit如何利用官方卸载工具正确卸载干净?

Revit:在哪里可以找到 Navisworks 导出加载项

navisworks实际开始实际结束怎么改为不适用?