找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 396|回复: 3

[每日一码] 让AcDbText的Normal方向正确

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2020-5-20 08:44:08 | 显示全部楼层 |阅读模式

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

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

×
  1. void FlipText()
  2. {
  3.         ads_point    pt;
  4.         ads_name     ent;
  5.         AcDbObjectId objId;

  6.         if (acedEntSel(_T("\nSelect text"), ent, pt) != RTNORM)
  7.                 return;

  8.         if (acdbGetObjectId(objId, ent) != Acad::eOk)
  9.                 return;

  10.         // Get the current viewdir
  11.         struct resbuf var;
  12.         acedGetVar(_T("VIEWDIR"), &var);
  13.         AcGeVector3d viewdir;
  14.         acdbUcs2Wcs(var.resval.rpoint, asDblArray(viewdir), true);

  15.         Acad::ErrorStatus es;
  16.         AcDbText *text;
  17.         if ((es = acdbOpenObject(text, objId, AcDb::kForRead)) == Acad::eOk)
  18.         {
  19.                 AcGeVector3d normal(text->normal());
  20.                 double dp = normal.dotProduct(viewdir);
  21.                 if (dp < 0.0) // if <0 we look at the text from the wrong side. Flip it.
  22.                 {
  23.                         es = text->upgradeOpen();
  24.                         if (!es)
  25.                         {
  26.                                 // Flip the normal but keep the insertion/aligment point
  27.                                 AcDb::TextHorzMode h = text->horizontalMode();
  28.                                 AcDb::TextVertMode v = text->verticalMode();
  29.                                 bool bUsePos=((h==AcDb::kTextLeft)&&(v==AcDb::kTextBase));

  30.                                 AcGePoint3d pt(bUsePos? text->position() : text->alignmentPoint());
  31.                                 text->setNormal(-normal); // flip the normal

  32.                                 if (bUsePos)
  33.                                         es = text->setPosition(pt);                 
  34.                                 else
  35.                                         es = text->setAlignmentPoint(pt);
  36.                         }
  37.                 }
  38.                 text->close();
  39.         }
  40. }

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

已领礼包: 166个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2020-5-20 21:35:46 | 显示全部楼层
今天总算看见arx的帖子上两位数了。希望大师们能多分享。。谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 22:01 , Processed in 0.167484 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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