明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2441|回复: 4

怎样得到由AcDbSpline对象组成的块中的点的信息?

[复制链接]
发表于 2002-9-11 23:38 | 显示全部楼层 |阅读模式
现有一个由几个AcDbSpline类的对象组成的block,想求各个Spline的控制顶点集合,以构造这个block所表示的形状的凸包。

如果用AcDbEntity::explode()将block炸开,返回的AcDbVoidPtrArray中有很多指针且无法判断其类型(由4个AcDbSpline类的对象组成的block,explode()返回的AcDbVoidPtrArray中有十几个指针)。

考虑过是不是可以用GS marker和subentity的方法解决。但Arx reference上说:“Currently, the only entities that support subentities are bodies, regions, solids, and mlines.”那么,块(block)就不支持subentity了。

究竟该怎样做呢?请各位大虾不吝赐教。谢谢!
发表于 2002-9-12 09:08 | 显示全部楼层

在图形数据库中有该块的块表记录,具体是这样

无论这个由几个AcDbSpline类的对象组成的block是用户make的还是程序生成的,都应该有个块名,根据这个块名,可以浏览组成该块的各个实体。给你一个例子程序,你改改应该能用。
void MyBlockIterator()
{
  char name[32];
  ads_getstring(0,"\n请输入块名:",name);
  if (name[0]=='\0') return;
  AcDbBlockTable *pBlkTbl;
  acdbCurDwg()->getBlockTable(pBlkTbl,AcDb::kForRead);//当前数据库块表
  AcDbBlockTableRecord *pBlkTblRcd;
  pBlkTbl->getAt(name,pBlkTblRcd,AcDb::kForRead);//以name命名的块的块表记录
  AcDbBlockTableRecordIterator *pBlkIter;
  pBlkTblRcd->newIterator(pBlkIter);//块表浏览器
  for(pBlkIter->start();!pBlkIter->done();pBlkIter->step())//浏览块表的方法
  {
     AcDbEntity *pEnt;
     if (strcmp(pEnt->desc(),"AcDbSpline")){
      ......//在这添加你自己的代码
     }
     pEnt->close();
   }
   delete pBlkIter;//不要忘记了释放内存
   pBlkTbl->close();
   pBlkTblRcd->close();
}
 楼主| 发表于 2002-9-12 19:11 | 显示全部楼层

出手好快呀!多谢!

原来是钻了牛角尖,倒把基本的思路和方法给忘了,呵呵。

程序加上一句pBlkIter->getEntity(pEnt, AcDb::kForRead);改一句if (pEnt->isKindOf(AcDbSpline::desc()))
 楼主| 发表于 2002-9-13 00:19 | 显示全部楼层

再问:怎样将这样的块插入到当前的文件中,成为可见的实体呢?

是不是要用到deep clone?
发表于 2002-9-13 07:47 | 显示全部楼层

不需要deep clone

你可新建一个AcDbBlockRefrence对象,其构造函数为:
AcDbBlockReference(const AcGePoint3d& position,AcDbObjectId BlkTblRcdId);
其中,参数position是新块的插入点,BlkTblRcdId是原有块在块表记录中的块表ID号,可用pBlkTblRcd->objectId();函数获取。
最后,谢谢你对前面的源程序的修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-10 00:01 , Processed in 0.144826 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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