乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 69|回复: 4

以编程方式删除表块记录

[复制链接]

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-7-3 04:29:31 | 显示全部楼层 |阅读模式
您好!
我尝试以编程方式删除现有的块表记录,包括它所拥有的所有引用。
作为起点,我有一个OdDbObjectId块引用变量,如下代码所示:
OdDbBlockReector cePtr MyBlockRefId=m_MyObjectID.safeOpenObject(OdDb::kForWrit);
OdDbObjectId BlockTableId=MyBlockRefId->block TableRecord();
OdDbBlockTableRecordPtr BlockTableRecord=BlockTableId.safeOpenObject(OdDb::kForWrit);
BlockTableRecord->erase();
问题:
1.从数据库的角度来看,上面的代码有多安全?还有另一种更安全的选择吗?
2.我如何以这种方式重新生成工作空间,该块将自动从屏幕上删除(在代码执行后,该块仍然可见,但如果我调用任何重新生成命令(如regen、pan等),则会消失)
任何想法都会受到赞赏!
Mike

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-7-3 11:36:41 | 显示全部楼层
关于第二个问题...也许他们在那里有无证ads_regen();函数可用
,如果它在那里,那么你可以用:
void ads_regen();
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-7-5 04:37:57 | 显示全部楼层
我不知道,我可能会调用BlockTableRecord->GetBlockReferenceId(…);并在擦除记录之前擦除所有引用
sds_regen()将重新生成图形
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-7-5 10:44:59 | 显示全部楼层
如果您这样做(对于第一个问题)-如果您调用撤消-则也会出现重新生成问题。
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-7-7 08:11:32 | 显示全部楼层
你好!
我这样试试:
OdDbDatabase * pDb = odapDocManager()-> curDocument()-> database();
pDb-> disableUndoRecording(false);
pDb-> startUndoRecord();
oddblockreferenceptr pMyBlockRef = m _ my objectid . safe open object(OdDb::kForWrite);
pMyBlockRef-> erase();//首先在erase reactor函数中擦除选中的引用
在此之后:
void db reactor::object erased(const OdDbDatabase * pDb,const OdDbObject * pObject,bool erased)
{
if(!process undo(po object))
{
call callback(SDS _ CBENTDEL,po object);
//......测试块引用是否是我试图擦除的块引用的附加代码
// if(yes) do...{下面的代码}
OdDbObjectIdArray aObjIds
aobjids . push _ back(po object-> objectId());
pDb-> purge(aObjIds);//清除所有引用
oddblocktablerecordptr pBlockTable = oddblockreferenceptr(po object)-> blockTableRecord()。safeOpenObject(OdDb::kForWrite);
pBlockTable-> erase();//擦除块表容器

}
}
如果disableUndoRecording和startundorecording不存在,似乎无法撤消!
我没有对上面的代码进行广泛的测试,但是它似乎是有效的;它还自动解决屏幕刷新。迈克
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 00:55 , Processed in 0.210148 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表