You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Revit API(C#)在视图中按名称隐藏点云扫描

解决Revit视图级隐藏特定点云扫描的问题

要实现当前视图中隐藏指定点云扫描,不能使用全局的PointCloudOverrides,必须操作当前视图的可见性/图形替换设置,核心是通过视图自身的GetPointCloudOverrides()和SetPointCloudOverrides()方法来实现视图级覆盖。

修正后的代码示例

Document doc = commandData.Application.ActiveUIDocument.Document;
View activeView = commandData.Application.ActiveUIDocument.ActiveView;

string targetScanName = "scan_001";
bool shouldEnable = false; // false为隐藏扫描

using (Transaction trans = new Transaction(doc, "隐藏指定点云扫描"))
{
    trans.Start();

    // 过滤当前视图中的所有点云实例
    IEnumerable<PointCloudInstance> pointClouds = new FilteredElementCollector(doc, activeView.Id)
        .OfClass(typeof(PointCloudInstance))
        .Cast<PointCloudInstance>();

    foreach (PointCloudInstance pci in pointClouds)
    {
        // 检查当前点云是否包含目标扫描
        if (pci.GetScans().Contains(targetScanName))
        {
            // 获取当前视图的点云覆盖设置(视图级,非全局)
            PointCloudOverrides viewPCO = activeView.GetPointCloudOverrides();
            
            // 创建扫描的覆盖设置
            PointCloudOverrideSettings overrideSettings = new PointCloudOverrideSettings
            {
                Visible = shouldEnable
            };

            // 为当前点云实例的目标扫描设置视图级覆盖
            viewPCO.SetPointCloudScanOverrideSettings(pci.Id, overrideSettings, targetScanName, doc);
            
            // 将修改后的覆盖设置应用回当前视图
            activeView.SetPointCloudOverrides(viewPCO);
        }
    }

    doc.Regenerate();
    trans.Commit();
}

关键说明

  • 视图级覆盖获取:使用activeView.GetPointCloudOverrides()获取当前视图专属的点云覆盖配置,而非新建全局的PointCloudOverrides。
  • 覆盖设置应用:修改完覆盖配置后,必须通过activeView.SetPointCloudOverrides(viewPCO)将设置保存回视图,这样才会作用于当前视图的可见性/图形替换面板。
  • 扫描匹配:通过pci.GetScans()获取点云包含的所有扫描名称,匹配到目标后再设置覆盖。

内容的提问来源于stack exchange,提问作者Sergey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:52:15