批量旋轉所使用的ISET<ElementId>中的元素是ElementInstance的Id,使用Family或FamilySymbol均不可以
1 public static void SelectionFamily(Autodesk.Revit.DB.Document document,XYZ p1,double rotating, ISet<ElementId> elementIds) 2 { 3 Transaction transaction = new Transaction(document); 4 5 transaction.Start("旋轉"); 6 7 XYZ p2 = new XYZ(p1.X, p1.Y, 100); 8 9 //創建旋轉軸 10 Line line = Line.CreateBound(p1, p2); 11 12 foreach (ElementId id in elementIds) 13 { 14 FamilyInstanceFilter familyInstanceFilter = new FamilyInstanceFilter(document, id); 15 FilteredElementCollector elements = new FilteredElementCollector(document); 16 elements = elements.WherePasses(familyInstanceFilter); 17 elements.Distinct(); 18 foreach (FamilyInstance element in elements) 19 { 20 ElementTransformUtils.RotateElement(document, element.Id, line, rotating); 21 22 } 23 24 } 25 transaction.Commit(); 26 }
困擾我的最大問題就是旋轉角度,測試了好幾個小時終於在無意中發現使用的角度為弧度制;
public static double rotating(UIDocument uiDocument, double[] p1) { MessageBox.Show("選擇方向點"); XYZ p2 = Grid(uiDocument);
// 此處P1獲得的坐標被我換算成了mm,所以此處/304.8在換算成英尺,單位統一后計算
//Atan2是反三角函數,返回的是弧度制的角度
double angleOfLine = Math.Atan2(p2.Y-p1[1]/304.8,p2.X - p1[0]/304.8); return angleOfLine; }