找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2375|回复: 5

[每日一码] ARX实例代码--获得XREF的路径而不管是否在图中保存

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-8-5 11:49:53 | 显示全部楼层 |阅读模式

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

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

×

  1. 问题:
  2. 在插入 图中的XREF没有保留路径信息时候,如何获得路径名? AcDbBlockTableRecord::pathName 仅能获得保存的路径,是否有另外的API方法能获得完整的路径名?
复制代码


  1. 解决方案:

  2. 没有一个直接简单的API方法获得,但是要完成这个,可以用AcDbBlockTableRecord::xrefDatabase(bool incUnres = false) 来打开XREF文件的数据库,然后用AcDbDatabase::getFilename(const char*&
  3. pOutput) 获得完整的路径,下面代码演示了如何做,具体看代码的注释。

复制代码


游客,如果您要查看本帖隐藏内容请回复

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

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

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

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

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

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

  25.             if( pRec->isFromExternalReference() )    // Is it a XREF?
  26.             {
  27. // The following lines apply to all conditions, retaining path information or not
  28.                 pName =pRec->xrefDatabase(true)->originalFileName();

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

  31.                 if(pName)
  32.                     es = Acad::eOk;
  33.                 else
  34.                     es = Acad::eInvalidInput;
  35.             }
  36.             else
  37.                 es = Acad::eInvalidInput;
  38.         }
  39.         else
  40.             es = Acad::eInvalidInput;
  41.     }
  42.     else
  43.     {
  44.         pObj->close();
  45.         es = Acad::eInvalidInput;
  46.     }

  47.     pRecObj->close();    // close XREF object
  48.     return es;
  49. }

  50. //Please bear in mind that the above code will retrieve the path name of the copied drawing instead of the original drawing if XLOADCTL is set to 2.


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

已领礼包: 2963个

财富等级: 家财万贯

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

使用道具 举报

发表于 2017-8-24 13:43:29 | 显示全部楼层
我也来学习学习是怎么回事!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-9-16 09:30:28 | 显示全部楼层
正学习遍历xref,很好参考
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2019-9-5 08:33:34 | 显示全部楼层
真的很不错,学习到了  哈哈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-7 03:02 , Processed in 0.342430 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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