【问题标题】:Revit API - Grids & Levels - GetDatumExtentTypeInView - issue with gridsRevit API - 网格和级别 - GetDatumExtentTypeInView - 网格问题
【发布时间】:2020-05-15 14:54:37
【问题描述】:

我正在尝试获取网格范围类型。它要么是“模型”,要么是“特定视图”

使用我拥有的代码,我可以获取 Levels 范围类型,但不能获取 Grid 范围类型。

到目前为止,我已经找到了这些有用的资源。

https://forum.dynamobim.com/t/switching-between-2d-and-3d-extent-levels-grid/10980/2

https://www.revitapidocs.com/2019/b3498ccf-1180-e0fd-502c-6c767f5b42cc.htm

https://disqus.com/home/discussion/revit-api-docs/setverticalextents_method_60/#edit-3254927585

这是我得到的错误:

Exception thrown: 'Autodesk.Revit.Exceptions.ArgumentException' in RevitAPI.dll
Error StackTrace:    at Autodesk.Revit.DB.DatumPlane.GetDatumExtentTypeInView(DatumEnds datumEnd, View view)
   at ChangeGridExtentsTo2D.Command.Execute(ExternalCommandData commandData, String& message, ElementSet elements)
Error Data: System.Collections.ListDictionaryInternal
Error Source: RevitAPI
Error TargetSite: Autodesk.Revit.DB.DatumExtentType GetDatumExtentTypeInView(Autodesk.Revit.DB.DatumEnds, Autodesk.Revit.DB.View)

到目前为止,这是我的代码:

            FilteredElementCollector colGrids = new FilteredElementCollector(doc)
                .WhereElementIsNotElementType().OfCategory(BuiltInCategory.OST_Grids)
                .OfClass(typeof(Grid));
            Debug.WriteLine("colGrids count: " + colGrids.GetElementCount()); //output is 3 which is correct


            FilteredElementCollector colLevels = new FilteredElementCollector(doc)
                .WhereElementIsNotElementType().OfCategory(BuiltInCategory.OST_Levels)
                .OfClass(typeof(Level));
            Debug.WriteLine("colLevels count: " + colLevels.GetElementCount()); // output is 7 which is correct


            using (Transaction tx = new Transaction(doc))
            {
                try
                {
                    tx.Start("Changing extends to 2d");

                    foreach (DatumPlane xLevels in colLevels)
                    {
                        //x.GetDatumExtentTypeInView(DatumEnds.End0, uidoc.ActiveView);

                        Debug.WriteLine(xLevels.Name + ": " + xLevels.GetDatumExtentTypeInView(DatumEnds.End0, uidoc.ActiveView));
                        Debug.WriteLine(xLevels.Name + ": " + xLevels.GetDatumExtentTypeInView(DatumEnds.End1, uidoc.ActiveView));
                    }

                    foreach (DatumPlane xGrids in colGrids)
                    {

                        Debug.WriteLine(xGrids.Name + ": " + xGrids.GetDatumExtentTypeInView(DatumEnds.End0, uidoc.ActiveView));

                    }
                    tx.Commit();
                }
                catch (Exception e)
                {
                    Debug.WriteLine("Error StackTrace: " + e.StackTrace);
                    Debug.WriteLine("Error Data: " + e.Data);
                    Debug.WriteLine("Error Source: " + e.Source);
                    Debug.WriteLine("Error TargetSite: " + e.TargetSite);

                    tx.RollBack();

                }
            }

PS - 我是 VS IDE 的新手,所以如果有人有任何关于获取更多详细错误的提示,例如:

what line the error occurs on
the variable or function it crashed at
or anything like that

这将是一个巨大的帮助

【问题讨论】:

    标签: c# revit-api autodesk revit


    【解决方案1】:

    我建议你通过一些简单的入门@9​​87654321@。

    在调试器中,您可以逐行单步执行代码,检查所有变量的值等等,从而一举解决上述所有请求。

    【讨论】:

    • 我搞定了。当事情失败时,比如我在 android studio 中的 android 应用程序,它会告诉我它在哪里以及如何失败。也许 VS 在堆栈跟踪中给了我有限的信息,因为所有东西总是包装在一个 try-catch 块中。我对这些没有太多经验。 VS 对我来说仍然是一个陌生的 IDE。正在进行中的工作...肯定需要观看更多视频。
    • 恭喜取得进展。
    猜你喜欢
    • 2018-09-21
    • 2018-11-04
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多