Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Revit API中按族过滤_C#_Revit Api_Revit - Fatal编程技术网

C# 在Revit API中按族过滤

C# 在Revit API中按族过滤,c#,revit-api,revit,C#,Revit Api,Revit,一段时间以来,我一直在寻找一种方法,通过他们的家庭过滤元素。例如,我希望所有属于族接线盒的图元-载入。我对Revit API有点陌生,我确实知道类别过滤器,甚至是族实例过滤器。但我不明白如何获得接线盒的族符号-例如,Load族。有什么好办法吗?还是我最好过滤家族中的特定类型?如果是,我将如何执行此操作?欢迎使用Revit编程 开始学习和编程Revit API(包括安装和使用SDK)的最有效方法是阅读入门资料,特别是DevTV和我的第一个Revit插件视频教程提供的分步说明: 回答您的问题:使用

一段时间以来,我一直在寻找一种方法,通过他们的家庭过滤元素。例如,我希望所有属于族接线盒的图元-载入。我对Revit API有点陌生,我确实知道类别过滤器,甚至是族实例过滤器。但我不明白如何获得接线盒的族符号-例如,Load族。有什么好办法吗?还是我最好过滤家族中的特定类型?如果是,我将如何执行此操作?

欢迎使用Revit编程

开始学习和编程Revit API(包括安装和使用SDK)的最有效方法是阅读入门资料,特别是DevTV和我的第一个Revit插件视频教程提供的分步说明:

回答您的问题:使用过滤的图元收集器从Revit数据库检索图元:

您可以对它们应用许多过滤器。在您的情况下,可以直接筛选
FamilySymbol
实例

有两种方法可以将搜索进一步限制为仅检索您感兴趣的对象,即
“接线盒-加载”

  • 高效:使用参数过滤器
  • 简单:使用.NET后处理或LINQ

主题组中的提供了大量详细信息。

欢迎使用Revit编程

开始学习和编程Revit API(包括安装和使用SDK)的最有效方法是阅读入门资料,特别是DevTV和我的第一个Revit插件视频教程提供的分步说明:

回答您的问题:使用过滤的图元收集器从Revit数据库检索图元:

您可以对它们应用许多过滤器。在您的情况下,可以直接筛选
FamilySymbol
实例

有两种方法可以将搜索进一步限制为仅检索您感兴趣的对象,即
“接线盒-加载”

  • 高效:使用参数过滤器
  • 简单:使用.NET后处理或LINQ
更多详细信息,请参见主题组中的。

Jacob

杰里米的答案是正确的。下面是一个代码示例,可用于获取特定姓氏的所有族实例:

Jeremy提到的有效方法是使用参数过滤器:

var famType = new FilteredElementCollector(m_doc)
    .OfClass(typeof(Family)) // This is called a class filter
    .FirstOrDefault(x => x.Name == "YourFamilyName");

if (famType != null)
{
    const BuiltInParameter testParam = BuiltInParameter.ELEM_FAMILY_PARAM;
    var pvp = new ParameterValueProvider(new ElementId((int)testParam));
    var fnrv = new FilterNumericEquals();
    var ruleValId = famType.Id;
    var paramFr = new FilterElementIdRule(pvp, fnrv, ruleValId);
    var epf = new ElementParameterFilter(paramFr);

    var results = new FilteredElementCollector(m_doc)
        .OfClass(typeof(FamilyInstance))
        .WherePasses(epf)
        .ToElements();
}
效率较低的方法是:

var result = new FilteredElementCollector(m_doc)
    .OfClass(typeof(FamilyInstance))
    .Cast<FamilyInstance>()
    .Where(x => x.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == "YourFamilyName");
雅各布

杰里米的答案是正确的。下面是一个代码示例,可用于获取特定姓氏的所有族实例:

Jeremy提到的有效方法是使用参数过滤器:

var famType = new FilteredElementCollector(m_doc)
    .OfClass(typeof(Family)) // This is called a class filter
    .FirstOrDefault(x => x.Name == "YourFamilyName");

if (famType != null)
{
    const BuiltInParameter testParam = BuiltInParameter.ELEM_FAMILY_PARAM;
    var pvp = new ParameterValueProvider(new ElementId((int)testParam));
    var fnrv = new FilterNumericEquals();
    var ruleValId = famType.Id;
    var paramFr = new FilterElementIdRule(pvp, fnrv, ruleValId);
    var epf = new ElementParameterFilter(paramFr);

    var results = new FilteredElementCollector(m_doc)
        .OfClass(typeof(FamilyInstance))
        .WherePasses(epf)
        .ToElements();
}
效率较低的方法是:

var result = new FilteredElementCollector(m_doc)
    .OfClass(typeof(FamilyInstance))
    .Cast<FamilyInstance>()
    .Where(x => x.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == "YourFamilyName");

非常感谢您的回复。我目前正在阅读您和Autodesk关于Revit API的教程。我以前确实有编程经验,但Revit API是一个全新的世界。在制作外接程序时,我将继续阅读您的教程。再次感谢你!非常感谢您的回复。我目前正在阅读您和Autodesk关于Revit API的教程。我以前确实有编程经验,但Revit API是一个全新的世界。在制作外接程序时,我将继续阅读您的教程。再次感谢你!谢谢你提供了详尽的例子。你能更具体地解释一下它们各自的作用吗?否则,我可以使用API数据库查找所有使用的方法。此外,where(…)方法是否与ToElements()方法相同,或者在将结果用作筛选器之前,我是否仍需要这样做?下面的链接将更详细地解释这一点:感谢您提供了完整的示例。你能更具体地解释一下它们各自的作用吗?否则,我可以使用API数据库查找所有使用的方法。此外,where(…)方法是否与ToElements()方法相同,或者在将结果用作筛选器之前,我是否仍需要这样做?下面的链接对此进行了更详细的解释: