天气与日历 切换到窄版

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

ARX修改文本对齐方式

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
void changeTextInnerAlign()
{
    //使用以下代码可以更换文本对齐方式,而不改变文字位置:
    ads_name name,ent;
    AcDbEntity *pObj;
    AcDbObjectId ObjId;
    long length=0;
   
    acutPrintf(_T("\n选择需要对齐的文本实体:"));
    if(acedSSGet(NULL,NULL,NULL,NULL,name)!=RTNORM) return;
    acedSSLength(name,&length);
   
    ArxDbgUiPrKeyWordDef prAlignType(_T("修改后的对齐方式[左对齐(L)/水平居中(M)/右对齐(R)]"),
        _T("L M R"), _T("L"));
    if (prAlignType.go() != ArxDbgUiPrBase::kOk)
        return  ;
    CString Justify;
    if (prAlignType.isKeyWordPicked(_T("L")))
        Justify = "左对齐";
    else if (prAlignType.isKeyWordPicked(_T("M")))
        Justify = "水平居中";
    else if (prAlignType.isKeyWordPicked(_T("R")))
        Justify = "右对齐";
    else
    {
        ASSERT(0);
        return ;
    }
   
    int i; for( i=0;i<length;i++)
    {
        acedSSName(name,i,ent);
        acdbGetObjectId(ObjId,ent);
        acdbOpenObject(pObj,ObjId,AcDb::kForWrite,Adesk::kFalse);
      
        AcDbExtents extents1, extents2;
      
      
        if(pObj->isKindOf(AcDbText::desc()))//普通文本
        {
            AcDbText *pText=AcDbText::cast(pObj);
           
            pText->getGeomExtents(extents1);           
            if(Justify==_T("左对齐")) pText->setHorizontalMode(AcDb::kTextLeft);
            else if(Justify==_T("右对齐")) pText->setHorizontalMode(AcDb::kTextRight);
            else if(Justify==_T("水平居中")) pText->setHorizontalMode(AcDb::kTextCenter);
            else pText->setHorizontalMode(AcDb::kTextLeft);
            pText->setVerticalMode(AcDb::kTextBase);           
           
        }
        else if(pObj->isKindOf(AcDbMText::desc()))//多行文本
        {
            AcDbMText *pMText=AcDbMText::cast(pObj);
           
            pMText->getGeomExtents(extents1);      
            if(Justify==_T("左对齐"))
            {
                if(pMText->attachment()==AcDbMText::kTopCenter ||
                    pMText->attachment()==AcDbMText::kTopRight)
                    pMText->setAttachment(AcDbMText::kTopLeft);
                else if(pMText->attachment()==AcDbMText::kMiddleCenter ||
                    pMText->attachment()==AcDbMText::kMiddleRight)
                    pMText->setAttachment(AcDbMText::kMiddleLeft);
                else if(pMText->attachment()==AcDbMText::kBottomCenter ||
                    pMText->attachment()==AcDbMText::kBottomRight)
                    pMText->setAttachment(AcDbMText::kBottomLeft);
            }
            else if(Justify==_T("水平居中"))
            {
                if(pMText->attachment()==AcDbMText::kTopLeft ||
                    pMText->attachment()==AcDbMText::kTopRight)
                    pMText->setAttachment(AcDbMText::kTopCenter);
                else if(pMText->attachment()==AcDbMText::kMiddleLeft ||
                    pMText->attachment()==AcDbMText::kMiddleRight)
                    pMText->setAttachment(AcDbMText::kMiddleCenter);
                else if(pMText->attachment()==AcDbMText::kBottomLeft ||
                    pMText->attachment()==AcDbMText::kBottomRight)
                    pMText->setAttachment(AcDbMText::kBottomCenter);
            }
            else if(Justify==_T("右对齐"))
            {
                if(pMText->attachment()==AcDbMText::kTopLeft ||
                    pMText->attachment()==AcDbMText::kTopCenter)
                    pMText->setAttachment(AcDbMText::kTopRight);
                else if(pMText->attachment()==AcDbMText::kMiddleLeft ||
                    pMText->attachment()==AcDbMText::kMiddleCenter)
                    pMText->setAttachment(AcDbMText::kMiddleRight);
                else if(pMText->attachment()==AcDbMText::kBottomLeft ||
                    pMText->attachment()==AcDbMText::kBottomCenter)
                    pMText->setAttachment(AcDbMText::kBottomRight);
            }           
        }
        pObj->close();
      
        AcDbEntity *pEnt = NULL;
        acdbOpenObject(pEnt, ObjId, AcDb::kForWrite);
        if (pEnt == NULL)
            return;
        pEnt->getGeomExtents(extents2);
        AcGeVector3d vec = extents1.minPoint() - extents2.minPoint();
        pEnt->transformBy(AcGeMatrix3d::translation(vec));
        pEnt->close();
    }   
}

 

 

 

 

ARX修改文本对齐方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 11:39 , Processed in 0.132377 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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