找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 612|回复: 1

[求助]:如果一个实体的线型是BYLAYER,如何能得到真的名字?

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2002-10-10 17:25:59 | 显示全部楼层 |阅读模式

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

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

×
如何知道一个实体的线型是否是BYLAYER?如果线型是BYLAYER,如何能得到真的名字?,哪位朋友有现成的代码?急用,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-10 17:53:47 | 显示全部楼层

Re: [求助]:如果一个实体的线型是BYLAYER,如何能得到真的名字?

最初由 LoveArx 发布
[B]如何知道一个实体的线型是否是BYLAYER?如果线型是BYLAYER,如何能得到真的名字?,哪位朋友有现成的代码?急用,谢谢! [/B]


如果实体线型是BYLAYER,那么你就需要打开实体所属层的记录,得到层表记录的线型名。

只要判断实体的线型ID和数据库的BYLAYER ID相等,就能知道实体线型是否是BYLAYER。

给你贴断代码,你可以把下面代码定义一个命令,拾取实体后,如果实体线型是BYLAYER,会打印出层名和真正的线型名。

  1. [FONT=courier new]
  2. AcDbEntity *
  3. selectEntity( const char *prompt, AcDbObjectId& id, AcGePoint3d& pick,
  4. AcDb::OpenMode openMode )
  5. {
  6.    AcDbEntity *ent = NULL;
  7.    ads_name ename;

  8.    if ( RTNORM == ads_entsel(prompt, ename, (ads_real*)&pick )){
  9.         if ( Acad::eOk == acdbGetObjectId( id, ename )){
  10.             if ( Acad::eOk == acdbOpenAcDbEntity( ent, id, openMode ))
  11.                 return ent;
  12.         }
  13.    }
  14.    return ent;
  15. }

  16. // This is command 'GETLT'
  17. void asdktestergetlt()
  18. {
  19.         AcDbObjectId objId;
  20.         AcGePoint3d pick;
  21.         AcDbEntity *pEnt = selectEntity( "\nSelect entity: ", objId, pick,
  22. AcDb::kForRead );
  23.         if ( NULL == pEnt )
  24.                 return;

  25.         if ( pEnt->linetypeId() == pEnt->database()->byLayerLinetype() )
  26.         {
  27.                 AcDbObject *pObj;
  28.                 if ( Acad::eOk == acdbOpenAcDbObject( pObj, pEnt->layerId(),
  29. AcDb::kForRead ))
  30.                 {
  31.                         AcDbLayerTableRecord *pLayer =
  32. AcDbLayerTableRecord::cast( pObj );
  33.                         if ( NULL != pLayer )
  34.                         {
  35.                                 AcDbObject *pObj2;
  36.                                 if ( Acad::eOk == acdbOpenAcDbObject( pObj2,
  37. pLayer->linetypeObjectId(), AcDb::kForRead ))
  38.                                 {
  39.                                         AcDbLinetypeTableRecord *pLinetype =
  40. AcDbLinetypeTableRecord::cast( pObj2 );
  41.                                         if ( NULL != pLinetype )
  42.                                         {
  43.                                                 char *layerName, *linetypeName;
  44.                                                 pLayer->getName( layerName );
  45.                                                 pLinetype->getName( linetypeName
  46. );
  47.                                                 acutPrintf( "\nEntity lives on
  48. layer %s which uses linetype %s.", layerName, linetypeName );
  49.                                                 delete [] layerName;
  50.                                                 delete [] linetypeName;
  51.                                         }
  52.                                         pObj2->close();
  53.                                 }
  54.                         }
  55.                         pObj->close();
  56.                 }
  57.         }
  58.         pEnt->close();
  59. }
  60. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 20:07 , Processed in 0.246465 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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