对元素编辑的几种方法:
- ElementTransformUtils的移动(Move)、旋转(Rotate)和镜像。
- 文档类Document的 Delete()删除
- 阵列类型的创建
- 族编辑的一些基本类和方法
- 获取Parameter参数进行修改
移动元素
ElementTransformUtils类的方法
- 使用给定的向量移动一个元素
MoveElement (Document,ElementId,XYZ); - 使用给定的向量移动多个元素
MoveElements(Document, ICollection,XYZ);
Location类的方法 - 移动一个元素bool Move(XYZ);
注意: - 基于标高的元素不能向上或者向下移动,即不能改变Z轴坐标值,但可以移动元素到同一标高内的任意位置。
- 当移动一个元素时候,其它元素可能会跟着移动。如移动墙,墙上的窗户会跟着动。
- 如果元素被钉住,即Pinned属性是true时,则表示这个元素不能被移动。
认识向量和方向的概念
- 向量是XYZ,向量是包含距离的,向量就是︰方向距离即XYZ.BasY100mm即为向上100毫米
- 方向也是XYZ,方向没有距离,XYZ.BasY就是方向
- 线是点组成的,Line的也有方向,方向是点1到点2,即0点到1点
- XYZ BasisX 、XYZBasisY 、 XYZ BasisZ 、XYZ Zero表示向右方向、平面向上方向、三维向上方向、0点
- Negate()表示反方向如XYZ.BasisX.Negate()==-X
- 点+方向距离=新的点如XYZ(XYZ.BasisX)*100MM= XYZ2
- (点+点2)/2=两个点的中心点,即(XYZ+XYZ2)/2=XYZ3
- 点-点2=点到点2的向量,即XYZ-XYZ2=XYZ向量.也可用Subtract方法
移动柱子
工具类UnitConvers=>毫米转英尺不会点"我"
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using pro.util;
namespace pro
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uIDocument = uiApp.ActiveUIDocument;
Document document = uIDocument.Document;
XYZ translation = XYZ.BasisX * UnitConvers.ToFoot(1000);
using (Transaction transaction = new Transaction(document, "move"))
{
transaction.Start();
ElementTransformUtils.MoveElement(document, new ElementId(337927), translation);
transaction.Commit();
}
return Result.Succeeded;
}
}
}
向左移动(取反)
XYZ translation = XYZ.BasisX.Negate() * UnitConvers.ToFoot(1000);
Location类的方法
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using pro.util;
using System.Collections.Generic;
using System.Linq;
namespace pro
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uIDocument = uiApp.ActiveUIDocument;
Document document = uIDocument.Document;
//得到向量 方向*距离
XYZ translation = XYZ.BasisX * UnitConvers.ToFoot(1000);
using (Transaction transaction = new Transaction(document, "move"))
{
transaction.Start();
//移动多个元素
IList<Reference> references = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
List<ElementId> ids = new List<ElementId>();
foreach (Reference reference in references)
{
//Loaction是familyInstance里面的 id是得不到的,需要转一下
FamilyInstance familyInstance = document.GetElement(reference.ElementId) as FamilyInstance;
bool result = familyInstance.Location.Move(translation);
}
transaction.Commit();
}
return Result.Succeeded;
}
}
}