乐筑天下

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

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

[复制链接]

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2002-9-11 23:38:00 | 显示全部楼层 |阅读模式
现有一个由几个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了。
究竟该怎样做呢?请各位大虾不吝赐教。谢谢!
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-9-12 09:08:00 | 显示全部楼层
无论这个由几个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();
}
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2002-9-12 19:11:00 | 显示全部楼层
原来是钻了牛角尖,倒把基本的思路和方法给忘了,呵呵。
程序加上一句pBlkIter->getEntity(pEnt, AcDb::kForRead);改一句if (pEnt->isKindOf(AcDbSpline::desc()))
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2002-9-13 00:19:00 | 显示全部楼层
是不是要用到deep clone?
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-9-13 07:47:00 | 显示全部楼层
你可新建一个AcDbBlockRefrence对象,其构造函数为:
AcDbBlockReference(const AcGePoint3d& position,AcDbObjectId BlkTblRcdId);
其中,参数position是新块的插入点,BlkTblRcdId是原有块在块表记录中的块表ID号,可用pBlkTblRcd->objectId();函数获取。
最后,谢谢你对前面的源程序的修改。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 07:03 , Processed in 0.177277 second(s), 62 queries .

© 2020-2024 乐筑天下

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