找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1095|回复: 4

[ARX程序]:请问如何得到当前文件所外部引用的文件列表呢

[复制链接]
发表于 2002-10-17 18:08:00 | 显示全部楼层 |阅读模式

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

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

×
用ARX函数可以吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-10-17 23:01:37 | 显示全部楼层

Re: [ARX程序]:请问如何得到当前文件所外部引用的文件列表呢

最初由 EMeiMonkey 发布
用ARX函数可以吗?


问得好,值得思考,加6分

arx可以得到外部引用的文件名列表

步骤:
1. 遍历所有的AcDbBlockTableRecord;
2. AcDbBlockTableRecord::xrefDatabase 可判断并得到外部引用的AcDbDatabase;
3. AcDbDatabase::getFilename 可获取文件名;
4. 整理,去掉重复的文件名。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-17 23:33:23 | 显示全部楼层
给你贴个函数,获得一个XREF的路径名,遍历块表的就不提供了,你按照RAVE的方法遍历块表判断是否是XREF,然后用这个函数就能获得路径名了。


  1. [FONT=courier new]
  2. Acad::ErrorStatus getXrefPath( AcDbObjectId pId, char *&pName )
  3. {
  4.     AcDbObject *pObj,*pRecObj;
  5.     AcDbBlockReference *pBlkRef;
  6.     AcDbObjectId pBTRId;
  7.     AcDbBlockTableRecord* pRec;
  8.     Acad::ErrorStatus es;

  9.     //    open entiry
  10.     es = acdbOpenObject(pObj, pId, AcDb::kForRead);
  11.     assert(es == Acad::eOk);

  12.     if(pObj->isKindOf(AcDbBlockReference::desc()))    // Is it a block
  13. reference?
  14.     {
  15.         pBlkRef = AcDbBlockReference::cast(pObj);
  16.         assert( pBlkRef );

  17.         // get ID of the block table record that pObj referenced.
  18.         pBTRId = pBlkRef->blockTableRecord();
  19.         pObj->close();

  20.         // open the block table record that pObj referenced.
  21.         es = acdbOpenObject(pRecObj, pBTRId, AcDb::kForRead);
  22.         assert(es == Acad::eOk);

  23.         if(pRecObj->isKindOf(AcDbBlockTableRecord::desc())) // Is it a
  24. block table record?
  25.         {
  26.             pRec = AcDbBlockTableRecord::cast(pRecObj);
  27.             assert( pRec );

  28.             if( pRec->isFromExternalReference() )    // Is it a XREF?
  29.             {
  30. // The following lines apply to all conditions, retaining path information or
  31. not
  32.                 AcDbDatabase *pXrefDb;
  33.                 pXrefDb = pRec->xrefDatabase(true);    //
  34. notice it is true, not false.
  35.                 assert( pXrefDb );
  36.                 pXrefDb->getFilename(pName);

  37. //    The following line just apply to XREF retaining the path information
  38. when inserted
  39. //                pRec->pathName(pName);    // get path name if
  40. retained when insert

  41.                 if(pName)
  42.                     es = Acad::eOk;
  43.                 else
  44.                     es = Acad::eInvalidInput;
  45.             }
  46.             else
  47.                 es = Acad::eInvalidInput;
  48.         }
  49.         else
  50.             es = Acad::eInvalidInput;
  51.     }
  52.     else
  53.     {
  54.         pObj->close();
  55.         es = Acad::eInvalidInput;
  56.     }

  57.     pRecObj->close();    // close XREF object
  58.     return es;
  59. }
  60. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-18 09:25:21 | 显示全部楼层
谢谢二位斑竹!回头我试一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-25 13:10:32 | 显示全部楼层
XDSoft::你的getXrefPath函数真管用。有没有对应的通过自动化接口来得到这些信息的呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:03 , Processed in 0.248754 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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