使用 C# 在 Revit 中旋转多个元素
Rotate multiple elements in Revit with C#
我正在使用 C# 在 Revit 中编写一个宏,用于一次旋转多个选定的元素。但是我每次尝试 运行 时都会收到此错误:
"System.NullReferenceException: Object Reference Not Set to an instance of an object"。
我不知道为什么会出现此错误,因为我的选择中没有 "null" 引用。有人知道发生了什么事吗?
这是代码片段:
//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();
}
}
您得到的是 NullReferenceException
,因为 PickObjects
的 return 类型是 IList<Reference>
而不是 List<Element>
。
尝试这样的事情:
var elements = uidoc.Selection.PickObjects(ObjectType.Element, "Select Elements")
.Select(o => uidoc.Document.GetElement(o));
还要考虑到角度是以弧度为单位而不是您所写的度数,或者至少我认为您不想将元素旋转 45 弧度;)。
最后,不要忘记 element.Location
并不总是 LocationPoint
,根据所选元素,您可能会得到 LocationPoint
、LocationCurve
或基础 class“位置”。
我正在使用 C# 在 Revit 中编写一个宏,用于一次旋转多个选定的元素。但是我每次尝试 运行 时都会收到此错误: "System.NullReferenceException: Object Reference Not Set to an instance of an object"。 我不知道为什么会出现此错误,因为我的选择中没有 "null" 引用。有人知道发生了什么事吗? 这是代码片段:
//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();
}
}
您得到的是 NullReferenceException
,因为 PickObjects
的 return 类型是 IList<Reference>
而不是 List<Element>
。
尝试这样的事情:
var elements = uidoc.Selection.PickObjects(ObjectType.Element, "Select Elements")
.Select(o => uidoc.Document.GetElement(o));
还要考虑到角度是以弧度为单位而不是您所写的度数,或者至少我认为您不想将元素旋转 45 弧度;)。
最后,不要忘记 element.Location
并不总是 LocationPoint
,根据所选元素,您可能会得到 LocationPoint
、LocationCurve
或基础 class“位置”。