天气与日历 切换到窄版

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

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

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

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

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

     

     

     

     

    [每日一码] 更换文本对齐方式,而不改变文字位置
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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