【问题标题】:Filter elements in Revit and set parameter在 Revit 中过滤元素并设置参数
【发布时间】:2020-08-18 07:07:29
【问题描述】:



大家好,

大约两三个月前,我开始学习 Dynamo for Revit ......终于 :)

经过大量学习和测试,我得到了一些自己的脚本。然后我学习了 Python,因为我无法仅使用 Dynamo-Nodes 创建下一个脚本。

然后我想“让我们看看作为插件完成某件事是多么困难”。 我看了一些视频,读了很多东西。 最后我安装了 Revit-AddIn-Wizard 并制作了我的第一个小型 Test-PlugIn。 太好了……

现在我有一些我不明白的问题......所以我想我会在这里碰碰运气......因为通过阅读这个网站,我得到了很多信息和帮助。

我的目标是/是以下:(我告诉你我现在拥有什么)
一个带有几个按钮、组合框和一个 DataGridView 的表单。
我可以加载一个 Excel 文件,单击“显示”以在 DataGridView 中显示它。
每行的标题将自动放入 3 个组合框中。
在第一个组合框中选择第一个搜索参数,在第二个组合框中选择另一个搜索参数,在第三个组合框中选择要设置的参数。
我有一个复选框,用于从类型参数切换到实例参数以进行搜索和设置操作。
还有一个按钮显示另一个带有类别列表的小表单(我不会搜索所有,只搜索几乎所有模型类别)。

PlugIn

我花了很多时间“看视频,上网阅读,测试,测试和测试”。 感谢这个网站和其他一些网站......我设法让整个插件几乎 100% 正常工作。

但是现在我有一些奇怪的问题,我完全不知道如何解决它们或者是否有可能。我真的希望有人可以帮助我。

首先......我只是告诉你我的问题,也许有人可以说“这真的是一个问题!”或者有可能完成它。然后我会发布一些代码。

所以……我该怎么办?!
1. 我有一个过滤所有元素的 FilteredElementCollector。
2. 根据我的“类型/实例复选框”,我执行 .WhereElementIsElementType 或 .WhereElementIsNotElementType。
3. 然后它传递一个 MultiCategoryFilter 以将大列表降到只有模型类别。
4. 接下来,集合根据所有设置通过十种不同“方法”中的一种。在那里,我根据搜索列表组合框过滤此集合。当组合框显示“Familie”或“Typ”时,它会过滤“.BuiltInParameter.SymbolFamilyName”或“.Name”,否则只使用“.LookupParameter”。

之后,我有一个集合,其中仅包含所选类别的元素,其中包含 Excellist 中的值。

5. 根据我的搜索和设置设置(例如搜索类型和设置实例),我必须从收集的类型中获取实例,或者反过来。
6. 然后我将它传递给另一个方法,在该方法中我最终设置了参数。

所以... Excelheader 进入组合框,具体取决于您在其中选择的内容,它会创建包含所选行值的列表。
希望大家理解。

现在...我的问题在哪里?
当我搜索类型系列名称或实例参数并设置类型参数时,它适用于所有类别而没有任何错误。

1. 当我尝试设置实例参数时(不管我的搜索设置是什么),它适用于所有“正常”系列,但不适用于系统系列(例如墙壁、地板、管道等)。没有错误,只是没有任何反应 为什么?我似乎无法为系统系列设置实例参数。

2. Roofs、Stairs、CurtainPanels 和 GenericModel 在我搜索类型参数时出现问题 错误类似于“对象引用未设置为对象实例”。只有这 4 个类别,我想设置什么并不重要......但是当我搜索 family-/typeNAME 或 Instance-Parameter 时,我可以设置类型或实例并且它可以工作(sysfam 的实例除外)。

3.当我尝试搜索并设置一个实例参数时,它适用于所有类别,除非一面墙不包含搜索值......这真的就足够了,一堵墙没有搜索参数值,一切都会被取消。

我还有其他一些小问题...但我希望有人可以帮助我解决这些问题...我将非常感谢

问候,祝你有美好的一天或晚上:)
菲利普

【问题讨论】:

    标签: c# revit-api revit


    【解决方案1】:

    感谢您的回答杰里米,

    正如我所说,作为第一个开始,如果您不说“这些类别确实存在一些问题!”对我来说是可以的。

    我想我已经设法创建了 3 个小例子来说明我的问题。
    对于每个问题,我制作了一个 zip 文件,其中包含完整的 visual-studio 文件夹、一个小示例项目和一个 readme.txt,其中包含(我希望)足够的信息来详细了解所有内容。

    Problem1

    Problem3

    您只需编译它们或将 .addin 和 .ddl 文件复制到 Revit AddIn 文件夹中。然后你会得到新的丝带。

    简短的问题总结 = 我在搜索参数值并将值设置为另一个参数时遇到问题。

    编辑:我刚刚解决了 2. 搜索姓氏和设置 system-families-parameter 时的问题。
    我用过:

    ElementClassFilter ecf = new ElementClassFilter(typeof(FamilyInstance));    
    FilteredElementColletor colle2 = new FilteredElementCollector(doc);
    colle2.WherePasses(ecf);
    

    我只是删除了 ClassFilter 并像在其他需要实例的情况下一样现在执行此操作。

    FilteredElementCollector colle2 = new FilteredElementCollector(doc);
    colle2.WhereElementIsNotElementType();
    

    1.和3.问题依然存在:/

    如果有人可以提供任何帮助,我将不胜感激:)

    【讨论】:

      【解决方案2】:

      Tl;博士。

      您描述的三个问题听起来像您自己的问题。我没有听说过其他人提出三个单独的问题并提供三个单独的最小代码 sn-ps 来描述它们是如何产生的。进入那些。我建议您创建三个独立的minimal reproducible cases 来演示所有三个问题。很有可能,当您简化和最小化代码时,问题就会消失。如果没有,它可能只是处于一个很小且易于管理的状态,以供其他人帮助您查看它。鉴于上述冗长的描述,世界上没有人可以帮助您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-29
        • 2011-09-26
        • 2021-07-20
        • 2019-07-25
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多