找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3133|回复: 5

[每日一码] 更换文本对齐方式,而不改变文字位置

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-9-18 15:41:39 | 显示全部楼层 |阅读模式

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

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

×
  1. void changeTextInnerAlign()
  2. {
  3.     //使用以下代码可以更换文本对齐方式,而不改变文字位置:
  4.     ads_name name,ent;
  5.     AcDbEntity *pObj;
  6.     AcDbObjectId ObjId;
  7.     long length=0;
  8.    
  9.     acutPrintf(_T("\n选择需要对齐的文本实体:"));
  10.     if(acedSSGet(NULL,NULL,NULL,NULL,name)!=RTNORM) return;
  11.     acedSSLength(name,&length);
  12.    
  13.     ArxDbgUiPrKeyWordDef prAlignType(_T("修改后的对齐方式[左对齐(L)/水平居中(M)/右对齐(R)]"),
  14.         _T("L M R"), _T("L"));
  15.     if (prAlignType.go() != ArxDbgUiPrBase::kOk)
  16.         return  ;
  17.     CString Justify;
  18.     if (prAlignType.isKeyWordPicked(_T("L")))
  19.         Justify = "左对齐";
  20.     else if (prAlignType.isKeyWordPicked(_T("M")))
  21.         Justify = "水平居中";
  22.     else if (prAlignType.isKeyWordPicked(_T("R")))
  23.         Justify = "右对齐";
  24.     else
  25.     {
  26.         ASSERT(0);
  27.         return ;
  28.     }
  29.    
  30.     int i; for( i=0;i<length;i++)
  31.     {
  32.         acedSSName(name,i,ent);
  33.         acdbGetObjectId(ObjId,ent);
  34.         acdbOpenObject(pObj,ObjId,AcDb::kForWrite,Adesk::kFalse);
  35.       
  36.         AcDbExtents extents1, extents2;
  37.       
  38.       
  39.         if(pObj->isKindOf(AcDbText::desc()))//普通文本
  40.         {
  41.             AcDbText *pText=AcDbText::cast(pObj);
  42.            
  43.             pText->getGeomExtents(extents1);           
  44.             if(Justify==_T("左对齐")) pText->setHorizontalMode(AcDb::kTextLeft);
  45.             else if(Justify==_T("右对齐")) pText->setHorizontalMode(AcDb::kTextRight);
  46.             else if(Justify==_T("水平居中")) pText->setHorizontalMode(AcDb::kTextCenter);
  47.             else pText->setHorizontalMode(AcDb::kTextLeft);
  48.             pText->setVerticalMode(AcDb::kTextBase);           
  49.            
  50.         }
  51.         else if(pObj->isKindOf(AcDbMText::desc()))//多行文本
  52.         {
  53.             AcDbMText *pMText=AcDbMText::cast(pObj);
  54.            
  55.             pMText->getGeomExtents(extents1);      
  56.             if(Justify==_T("左对齐"))
  57.             {
  58.                 if(pMText->attachment()==AcDbMText::kTopCenter ||
  59.                     pMText->attachment()==AcDbMText::kTopRight)
  60.                     pMText->setAttachment(AcDbMText::kTopLeft);
  61.                 else if(pMText->attachment()==AcDbMText::kMiddleCenter ||
  62.                     pMText->attachment()==AcDbMText::kMiddleRight)
  63.                     pMText->setAttachment(AcDbMText::kMiddleLeft);
  64.                 else if(pMText->attachment()==AcDbMText::kBottomCenter ||
  65.                     pMText->attachment()==AcDbMText::kBottomRight)
  66.                     pMText->setAttachment(AcDbMText::kBottomLeft);
  67.             }
  68.             else if(Justify==_T("水平居中"))
  69.             {
  70.                 if(pMText->attachment()==AcDbMText::kTopLeft ||
  71.                     pMText->attachment()==AcDbMText::kTopRight)
  72.                     pMText->setAttachment(AcDbMText::kTopCenter);
  73.                 else if(pMText->attachment()==AcDbMText::kMiddleLeft ||
  74.                     pMText->attachment()==AcDbMText::kMiddleRight)
  75.                     pMText->setAttachment(AcDbMText::kMiddleCenter);
  76.                 else if(pMText->attachment()==AcDbMText::kBottomLeft ||
  77.                     pMText->attachment()==AcDbMText::kBottomRight)
  78.                     pMText->setAttachment(AcDbMText::kBottomCenter);
  79.             }
  80.             else if(Justify==_T("右对齐"))
  81.             {
  82.                 if(pMText->attachment()==AcDbMText::kTopLeft ||
  83.                     pMText->attachment()==AcDbMText::kTopCenter)
  84.                     pMText->setAttachment(AcDbMText::kTopRight);
  85.                 else if(pMText->attachment()==AcDbMText::kMiddleLeft ||
  86.                     pMText->attachment()==AcDbMText::kMiddleCenter)
  87.                     pMText->setAttachment(AcDbMText::kMiddleRight);
  88.                 else if(pMText->attachment()==AcDbMText::kBottomLeft ||
  89.                     pMText->attachment()==AcDbMText::kBottomCenter)
  90.                     pMText->setAttachment(AcDbMText::kBottomRight);
  91.             }           
  92.         }
  93.         pObj->close();
  94.       
  95.         AcDbEntity *pEnt = NULL;
  96.         acdbOpenObject(pEnt, ObjId, AcDb::kForWrite);
  97.         if (pEnt == NULL)
  98.             return;
  99.         pEnt->getGeomExtents(extents2);
  100.         AcGeVector3d vec = extents1.minPoint() - extents2.minPoint();
  101.         pEnt->transformBy(AcGeMatrix3d::translation(vec));
  102.         pEnt->close();
  103.     }   
  104. }

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

已领礼包: 112个

财富等级: 日进斗金

发表于 2016-9-18 21:04:59 | 显示全部楼层
ArxDbgUiPrKeyWordDef
ArxDbgUiPrBase
需要添加相应的头文件吗?提示未定义标识符
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 137个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 10个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 15:54 , Processed in 0.301121 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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