- 积分
- 38543
- 明经币
- 个
- 注册时间
- 2009-1-8
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 edata 于 2024-8-1 22:22 编辑
判断使用 acdbIsInLongTransaction 应该就可以,该函数接口 objectarx2008 新增。低版本arx可以参考后面函数例子实现。
- ads_name ent;
- ads_point pt;
- if(RTNORM != acedEntSel(_T("\n选择对象: "),ent,pt)){
- return;
- }
- AcDbObjectId objId;
- acdbGetObjectId(objId,ent);
- //直接判断
- //if(acdbIsInLongTransaction(objId))
- //判断并移除工作集
- if(isWorksetAndRemove(objId))
- {
- acutPrintf(_T("\n在长事务中"));
- }
- else
- {
- acutPrintf(_T("\n不在长事务中"));
- }
复制代码 判断并移除对象函数,通过currentLongTransactionFor,可以实现获取长事务对象id,可以处理对象增加到工作集,移除等操作。
简单示例
- //从工作集中移除
- static bool isWorksetAndRemove(AcDbObjectId objId){
- AcDbObjectId longtransId = acapLongTransactionManagerPtr()->currentLongTransactionFor(curDoc());
- if (AcDbObjectId::kNull != longtransId)
- {
- AcDbObjectPointer<AcDbLongTransaction> pLongTrans(longtransId,AcDb::kForRead);
- if(Acad::eOk != pLongTrans.openStatus()) return false;
- //判断是否在工作集
- if(pLongTrans->workSetHas(objId))
- {
- //升级打开
- pLongTrans->upgradeOpen();
- if(pLongTrans->isWriteEnabled())
- {
- //移除工作集
- pLongTrans->removeFromWorkSet(objId);
- }
- return true;
- }
- }
- return false;
- }
复制代码
|
评分
-
查看全部评分
|