Revit二次开发小白学习笔记4——事务及事务组

Revit二次开发小白学习笔记4——事务及事务组

1.概念解说

1.1 事务的分类

  • Transaction:增删改的操作要开启事务,提交事务才能写入文档
  • SubTransaction
  • TransactionGroup:用于包含多个事务,可一次撤销事务组

1.2 事务主要方法

  • 1、Start启动事务
  • 2、Commit结束事务并提交所有的修改到文档中
  • 3、RollBack结束事务并撤销对文档的所有的修改
  • 4、GetStatue返回当前事务的状态
    Started:事务已启动
    RolltedBack:事务成功撤销
    Committed:事务成功提交
    Uninitialized:事务已经初始化
    Pending:事务试图被提交或撤销。但由于出错,处理还未结束,还在等待用户响应。
  • 5、Assimilate:将多个事务合并(TransactionGroup使用)

事务实例

//新建事务(事务对应文档,事务名称)
using (Transaction transaction = new Transaction(document, "新建事务"))
{
    transaction.Start();//开始事务
    TaskDialog.Show("事务状态",transaction.GetStatus().ToString());//显示事务状态
    #region 事务操作函数
    Reference reference = uIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
    FamilyInstance elem = document.GetElement(reference) as FamilyInstance;
    //得到底部高度参数
    Parameter parameter = elem.get_Parameter(BuiltInParameter.INSTANCE_SILL_HEIGHT_PARAM);
    //对于自己定义的参数,BuiltInParameter无对应类型,显示无效,我们需要使用lookup获取参数
    elem.LookupParameter("pl");//根据参数名称直接获取
    //revit使用的是英尺,需要转换成需要的单位
    parameter.Set(ToFoot(100));//使用Set还是SetValueString,取决于修改值得数据类型(StorageType)
    #endregion
    transaction.Commit();//提交事务
    TaskDialog.Show("事务状态", transaction.GetStatus().ToString());
    transaction.Start();
    transaction.RollBack();//撤销操作
    TaskDialog.Show("事务状态", transaction.GetStatus().ToString()); 
    transaction.Commit();
}

使用的单位为mm,Revit使用的也为mm,但代码写入的是英尺,需要将毫米先转化为对应的英尺数值

#region 将传入的mm转化为英尺
/// <summary>
/// 毫米转英尺
/// </summary>
/// <param name="val">毫米</param>
/// <returns>英尺</returns>
public static double ToMM(double val)
{
    return UnitUtils.ConvertToInternalUnits(val, DisplayUnitType.DUT_MILLIMETERS);
}
#endregion

3.事务组

用于包含多个事务,可一次撤销事务组

using (TransactionGroup transactionGroup = new TransactionGroup(document, "事务组"))
{
    transactionGroup.Start();
    //多个事务或事务循环
    int i = 0;
    while (i < 3)
    {
        using (Transaction transaction = new Transaction(document, "新建事务"))
        {
            transaction.Start();
            Reference reference = uIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
            FamilyInstance elem = document.GetElement(reference) as FamilyInstance;
            //得到底部高度参数
            Parameter parameter = elem.get_Parameter(BuiltInParameter.INSTANCE_SILL_HEIGHT_PARAM);
            //我们输入的100是100英尺,绘图单位是mm,需要转换
            parameter.Set(ToMM(10));//使用Set还是SetValueString,取决于修改值得数据类型(StorageType)
            transaction.Commit();
            i++;
        }
    }
    transactionGroup.Assimilate();
}
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ping_Kingzero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值