天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 149|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    半小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

    积分
    1393
    QQ
    发表于 2024-3-14 20:53:21 | 显示全部楼层 |阅读模式
    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. }
    复制代码

     

     

     

     

    [每日一码] 让AcDbText的Normal方向正确
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-5 06:02 , Processed in 0.148601 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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