revit编辑元素

对元素编辑的几种方法:

  1. ElementTransformUtils的移动(Move)、旋转(Rotate)和镜像。
  2. 文档类Document的 Delete()删除
  3. 阵列类型的创建
  4. 族编辑的一些基本类和方法
  5. 获取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;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值