使用C#旋转Revit中的多个元素

问题描述 投票:0回答:1

我正在用C#在Revit中编写宏,以一次旋转多个选定元素。但是每次尝试运行该错误时,都会遇到此错误:“ System.NullReferenceException:对象引用未设置为对象的实例”。我不知道为什么会收到此错误,因为我的选择中没有“空”引用。有人知道发生了什么吗?这是代码片段:

        //Get document
        UIDocument uidoc = this.Application.ActiveUIDocument;
        Document doc = uidoc.Document;

        //Elements selection
        double angle = 45.0;
        var elements = uidoc.Selection.PickObjects(ObjectType.Element,"Select Elements") as List<Element>;
        foreach (Element element in elements)
        {
            LocationPoint lp = element.Location as LocationPoint;
            XYZ ppt = new XYZ(lp.Point.X,lp.Point.Y,0);
            Line axis = Line.CreateBound(ppt, new XYZ(ppt.X,ppt.Y,ppt.Z+10.0));

            using(Transaction rotate = new Transaction(doc,"rotate elements"))
            {
                rotate.Start();
                ElementTransformUtils.RotateElement(doc,element.Id,axis,angle);
                rotate.Commit();
            }
        }
c# revit-api revit
1个回答
1
投票

您将得到一个NullReferenceException,因为PickObjects的返回类型是IList<Reference>,而不是List<Element>

尝试这样的事情:

var elements = uidoc.Selection.PickObjects(ObjectType.Element, "Select Elements")
.Select(o => uidoc.Document.GetElement(o));

还考虑到角度是用弧度而不是您编写的度数来度量的,或者至少我认为您不希望将元素旋转45 rad;)。

最后,不要忘记element.Location并不总是LocationPoint,根据选择的元素,您可能会获得LocationPointLocationCurve或基类“ Location”。

© www.soinside.com 2019 - 2024. All rights reserved.