- UID
- 41642
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-4-9
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2003-5-29 10:25:30
|
显示全部楼层
我先用下面的程序将当前图形中的某个实体定义为一个图块,并保存在图库文件中
//用交互方式选择目标
ads_name ss,ent;//定义选择集
ads_ssget(NULL,NULL,NULL,NULL,ss);
AcDbObjectId id;
AcDbObjectIdArray ArrayID;//定义存储对象的ID号的数组
long length;
if(RTNORM != acedSSLength(ss,&length) || 0 == length)
{
acutPrintf("\n没有选中任何目标!");
acedSSFree(ss);
return;
}
//将所选对象的ID号依次存入数组中
for(long i = 0 ; i < length ; i++)
{
if(RTNORM != acedSSName(ss,i,ent)) continue;
if(Acad::eOk != acdbGetObjectId(id,ent)) continue;
ArrayID.append(id);
}
ads_ssfree(ss);//释放选择集
//定义块表记录指针pBTableRec
AcDbBlockTableRecord *pBTableRec = new AcDbBlockTableRecord();
//设置块表记录名(块名)
char newblockName[20];
if(acedGetString(NULL,"请输入块名:",newblockName) != RTNORM)
return;
pBTableRec->setName(newblockName);
//定义块的插入基点
AcGePoint3d basepoint(0,0,0);
if(acedGetPoint(NULL,"\n请输入插入基点:",asDblArray(basepoint)) != RTNORM)
return;
pBTableRec->setOrigin(basepoint);
AcDbDatabase *extDb = new AcDbDatabase(Adesk::kFalse);//定义一个空数据库
extDb->readDwgFile(m_strFileName);//读入图库文件
//以写方式得到块表指针
AcDbBlockTable *pBTable = NULL;
extDb->getBlockTable(pBTable,AcDb::kForWrite);
//将新块表记录加入块表中
pBTable->add(pBTableRec);
pBTable->close();
pBTableRec->close();
//将图块定义保存于图块文件中
extDb->saveAs(m_strFileName);
delete extDb;
//将刚加入的块名添加到列表框中
m_ctrlBlockList.InsertString(-1,newblockName);
我还有一段程序用来从图库文件中读出块表中的所有块名记录的块名,放入列表框中
我的目的是要从列表框中选取某个块名,然后点删除按钮,就将这个块表记录从图库文件中删除,但是erase()函数没有作用,当我运行删除图块的函数后,再次从该图库文件中检索,发现我要删除的图块依然出现在列表框中,我也没有引用该块的定义。 |
|