对特定元素的编辑操作,基本都是通过ElementId来锁定元素的。
1、元素移动
ElementTransformUtils.MoveElement 此处无法实现,原因未知
ElementFilter categoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_GenericModel); ElementFilter classfilter = new ElementClassFilter(typeof(FamilyInstance)); ElementFilter logicfilter = new LogicalAndFilter(classfilter, categoryfilter); FilteredElementCollector filteredcollector = new FilteredElementCollector(doc); var filteredelement = filteredcollector.WherePasses(logicfilter); foreach (Element elem in filteredelement) { if (elem != null) { var elemid = elem.Id; var elemlocation = elem.Location as LocationPoint; var elempiont = elemlocation.Point; elemlocation.Move(new XYZ(-elempiont.X, -elempiont.Y, -elempiont.Z)); TaskDialog.Show("Show", elemid.ToString() + elemlocation.Point); //ElementTransformUtils.MoveElement(doc, elemid, new XYZ(0, 0, 0)); break; }
2、元素旋转
应注意旋转角度以弧度计量,Math.PI/180*角度,且逆时针为正。
3、镜像
CanMirrorElemnt(s)查询是否可以镜像,对镜像后的实例,可以在Lookup中看出其是否为镜像来的。
4、组
List<ElementId> elementsToGroup = new List<ElementId>(); var elemIds = uidoc.Selection.GetElementIds(); foreach (ElementId elemid in elemIds) { elementsToGroup.Add(elemid); } Group group = doc.Create.NewGroup(elementsToGroup);
元素在组合中时,不能被单独移动或者旋转。