找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 44|回复: 0

ObjectARX 判断实体是否是在位编辑块对象简单例子

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-8-2 07:17:37 | 显示全部楼层 |阅读模式
判断使用 acdbIsInLongTransaction 应该就可以,该函数接口 objectarx2008 新增。低版本arx可以参考后面函数例子实现。
  1. ads_name ent;
  2.     ads_point pt;
  3.     if(RTNORM != acedEntSel(_T("\n选择对象: "),ent,pt)){
  4.       return;
  5.     }
  6.     AcDbObjectId  objId;
  7.     acdbGetObjectId(objId,ent);
  8.     //直接判断
  9.     //if(acdbIsInLongTransaction(objId))
  10.     //判断并移除工作集
  11.     if(isWorksetAndRemove(objId))
  12.     {
  13.       acutPrintf(_T("\n在长事务中"));
  14.     }
  15.     else
  16.     {
  17.       acutPrintf(_T("\n不在长事务中"));
  18.     }
复制代码

判断并移除对象函数,通过currentLongTransactionFor,可以实现获取长事务对象id,可以处理对象增加到工作集,移除等操作。
简单示例
  1. //从工作集中移除
  2.   static bool isWorksetAndRemove(AcDbObjectId objId){
  3.     AcDbObjectId longtransId = acapLongTransactionManagerPtr()->currentLongTransactionFor(curDoc());
  4.     if (AcDbObjectId::kNull != longtransId)
  5.     {
  6.       AcDbObjectPointer<AcDbLongTransaction> pLongTrans(longtransId,AcDb::kForRead);
  7.       if(Acad::eOk != pLongTrans.openStatus()) return false;
  8.       //判断是否在工作集
  9.       if(pLongTrans->workSetHas(objId))
  10.       {
  11.         //升级打开
  12.         pLongTrans->upgradeOpen();
  13.         if(pLongTrans->isWriteEnabled())
  14.         {
  15.           //移除工作集
  16.           pLongTrans->removeFromWorkSet(objId);
  17.         }
  18.         return true;
  19.       }      
  20.     }
  21.     return false;
  22.   }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 21:48 , Processed in 0.201697 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表