找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1484|回复: 5

[ARX函数]:求助!!! 各位大虾帮忙啦!

[复制链接]
发表于 2002-6-28 23:31:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我做一个ObjectARX的程序,实体之间进行切割,
用了AcDb3dSolid的布尔运算,substract。

由于处理的dwg文件中,有较多的AcDb3dSolid,
发现在循环批处理切割的时候,内存消耗一直上涨,
接近系统极限,甚至瘫痪,在2K下要直接杀Acad进程。
不知道这是什么原因?

还有,用ARX程序实现实体(AcDb3dSolid)的尺寸标注有什么好方法?
比如上面说到实体切割后产生的斜面长度,角度等,如何用程序实现标注?

望高手们不吝赐教,也解小可燃眉之急,多谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-6-28 23:56:12 | 显示全部楼层

Re: [ARX函数]:[ARX函数]:求助!!! 各位大虾帮忙啦!

最初由 laoga 发布
[B]我做一个ObjectARX的程序,实体之间进行切割,
用了AcDb3dSolid的布尔运算,substract。

由于处理的dwg文件中,有较多的AcDb3dSolid,
发现在循环批处理切割的时候,内存消耗一直上涨,
接近系统极限,甚至瘫?.. [/B]


内存耗尽原因是ACIS和AUTOCAD交互过程中引起的。ACIS要创建一个“Bulletin Boards”在应用中,然而他们仅仅是在AUTOCAD命令开始和结束的时候蔡删除。

有两种方法能解决这个问题:


A- 使用 ads_command()

B- 利用 AcDbArc::getGeomExtents() 的副作用

2.  在你的循环处理里面调用下面的函数。

注意:方法1和2适合R13和R14

1.定义一个新的命令:
acedRegCmds->addCommand (
        "TEST", "doNoting", "doNothing", ACRX_CMD_MODAL, doNothing
);
命令的原型可以是下面这样写:
void doNothing(){
}


2. 在你的循环处理里面调用上面的命令:

ads_command(RTSTR,"doNothing",RTNONE);


3.  定义一个新的函数:
AcDbArc *p =new AcDbArc (AcGePoint3d (), 2, 0.0, 1.0);
AcDbExtents extents;
p->getGeomExtents (extents);
delete p;

注意: 下面方法仅仅适合2000+

在dbacis.h 里面,定义了'void acdbAcisDeleteModelerBulletins(void);'可以释放ACIS的Bulletin Boards

下面是完整的代码:


  1. [FONT=courier new]
  2. void doNothing(){
  3. }

  4. void CleanUp(){
  5.         AcDbArc *p =new AcDbArc (AcGePoint3d (), 2, 0.0, 1.0);
  6.         AcDbExtents extents;
  7.         p->getGeomExtents (extents);
  8.         delete p;
  9. }
  10. void test(){
  11.         AcDb3dSolid* pS;
  12.         pS = new AcDb3dSolid;
  13.         pS->createSphere(10);
  14.         AcGeMatrix3d xform;
  15.         AcGeVector3d vec(10.0,0.0,0.0);
  16.         xform.setToIdentity();
  17.         xform.setTranslation(vec);
  18.         AcDbExtents ext;
  19.         for (int i=0;i<5000;i++)  // 5000 做测试用的一个大的数        {
  20.                 pS->transformBy(xform);
  21.                 // 当你需要释放内存的时候,调用
  22.                 // ads_command() 或者CleanUp()
  23.                 CleanUp();
  24.                 // 或者在R2000下,调用acdbAcisDeleteModelerBulletins();
  25.         }
  26.         delete pS;
  27. }

  28. extern "C" AcRx::AppRetCode
  29. acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
  30. {
  31.    switch (msg) {
  32.    case AcRx::kInitAppMsg:
  33.         acrxDynamicLinker->unlockApplication(pkt);
  34.         acedRegCmds->addCommand ("TEST", "test", "test", ACRX_CMD_MODAL,test);
  35.         acedRegCmds->addCommand ("TEST", "doNoting", "doNothing",
  36. ACRX_CMD_MODAL, doNothing);
  37.         break;
  38.    case AcRx::kUnloadAppMsg:
  39.         acedRegCmds->removeGroup ("TEST");
  40.    }
  41.    return AcRx::kRetOK;
  42. }
  43. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-6-29 08:59:10 | 显示全部楼层
太牛了,多谢大虾!!!
这个奇怪的函数acdbAcisDeleteModelerBulletins()居然一用就灵,
内存消耗再也不往上涨了,好爽好爽!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-6-29 09:26:45 | 显示全部楼层
最初由 laoga 发布
[B]太牛了,多谢大虾!!!
这个奇怪的函数acdbAcisDeleteModelerBulletins()居然一用就灵,
内存消耗再也不往上涨了,好爽好爽! [/B]


在写什么? 能跟大家接受下吗?

可以把代码贴出来吗?

欢迎常来!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-6-29 11:06:02 | 显示全部楼层
非常愿意和这里的高手们进行交流,我会觉得很荣幸。
我做的程序主要是将一个空间框架建筑的线框,根据材料尺寸进行实体化(目前主要是box),
然后,根据将生成的各个实体相互切割,就是将重合的部分进行切除,
然后将切割后的实体进行渲染显示,并且将切割后的各个部分的尺寸进行求解显示。
现在我的问题就是如何对比较不规则(就是切割后的形体,可能会有斜面等)的实体,
进行尺寸标注,
比如在整个框架里面,点击一个实体,立即对这个实体的各个部分的尺寸进行标注。
不知道这个问题如果解决比较好? 好像一般的参考书上很少提到用ARX实现标注。

关于程序代码,贴出来当然可以,不过由于现在代码比较乱,
等我完成后,整理一下,注释完全后,再贴上来与大家交流吧,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-27 12:51:47 | 显示全部楼层
按所提示方法做了,还是无效
搜索了论坛,发现还没有好的解决办法
郁闷啊……不知道怎么办
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 07:31 , Processed in 0.347737 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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