天气与日历 切换到窄版

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

ObjectARX如何修改多行文字的格式

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]https://blog.csdn.net/mary288267/article/details/128804910
[/code]

我们知道了CAD设置多行文字格式的方式,那么在程序中设置多行文字格式就很简单了。比如说,我们需要让CAD多行文字统一显示为某个颜色,那么我们就应该去掉多行文字内容中所有诸如“\Cxxxx;”之类的格式代码,然后再设置多行文字对象的颜色。
这里额外说一句,千万不要简单的直接设置AcDbMText实体颜色,刚刚我们说过了,对里面单独设置的文字格式,这样设置不起作用。
以下Demo代码可以统一修改一个多行文字实体所有字符的颜色。


//删掉多行文本中表征颜色的格式代码
void RemoveMTextColorField(AcDbMText* pMText)
{
        if (!pMText)
                return;

        TCHAR* psz = pMText->contents();
        CString sMText = psz;
        delete psz;

        if (sMText.GetLength() < 5)
                return;

        for (int iBegin = 0; iBegin < sMText.GetLength() - 1; iBegin++)
        {
                //CAD多行文字每个文字都可以拥有格式代码,需要删掉表征颜色的格式代码
                if (_T('\\') == sMText[iBegin])
                {
                        if (_T('c') == tolower(sMText[iBegin + 1])) //这是表征颜色的格式代码
                        {
                                int iEnd;
                                for (iEnd = iBegin + 2; iEnd < sMText.GetLength(); iEnd++)
                                        if (_T(';') == sMText[iEnd])
                                                break;

                                if (iEnd < sMText.GetLength())
                                {
                                        sMText.Delete(iBegin, iEnd + 1 - iBegin);
                                        iBegin--;
                                }
                                else
                                        break;
                        }
                        else                //排除多行文字字符'\'或者其他以\开头的格式代码
                                iBegin++;
                }
        }
       
        pMText->setContents(sMText);
}

void CmdChangeMTextColor(void)
{
        Acad::ErrorStatus es;
        ads_name ename;
        ads_point pt;
        if (acedEntSel(_T("\nSelect a MText: "), ename, pt) != RTNORM) return;
        AcDbObjectId id = AcDbObjectId::kNull;
        acdbGetObjectId(id, ename);
        if (id == AcDbObjectId::kNull) return;
        AcDbObjectPointer<AcDbMText> pObj(id, AcDb::kForWrite);
        if ((es = pObj.openStatus()) != Acad::eOk)
        {
                if (es == Acad::eNotThatKindOfClass)
                {
                        acutPrintf(_T("\nSelect a MText."));
                }
                else {
                        acutPrintf(_T("\nError when opening the entity."));
                }
                return;
        }

        int iInput;
        if (RTNORM == acedGetInt(_T("\n请输入颜色索引号:"), &iInput))
        {
                AcDbMText *pMText = AcDbMText::cast(pObj.object());
                RemoveMTextColorField(pMText);
                pMText->setColorIndex(iInput);
        }
}

 

 

 

 

ObjectARX如何修改多行文字的格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 12:29 , Processed in 0.134178 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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