admin 发表于 2024-5-4 19:25:32

ObjectArx字体样式操作封装

#pragma once
#include <vector>
class TextStyle
{
public:
        TextStyle();
        ~TextStyle();

        // 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
        static AcDbObjectId Add(const ACHAR *name,
                                                                  const ACHAR *fontFileName,
                                                                  const ACHAR *bigfontFile);
        // 获取字体样式表记录id:字体样式名称
        static AcDbObjectId GetStyleId(const ACHAR *styleName);
};


#include "stdafx.h"
#include "TextStylel.h"


TextStyle::TextStyle(){}
TextStyle::~TextStyle(){}

// 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
AcDbObjectId TextStyle::Add(const ACHAR *name,
                                                        const ACHAR *fontFileName,
                                                        const ACHAR *bigfontFile)
{        // 获得字体样式表
        AcDbTextStyleTable *pTextStyle = NULL;
        acdbHostApplicationServices()->workingDatabase()->
                                getTextStyleTable(pTextStyle, AcDb::kForWrite);
        // 创建字体样式表记录
        AcDbTextStyleTableRecord *pTextStyleRcd = new AcDbTextStyleTableRecord();
        // 字体样式表记录添加:名称、字体文件名、比例、
        pTextStyleRcd->setName(name);
        pTextStyleRcd->setBigFontFileName(bigfontFile);
        pTextStyleRcd->setFileName(fontFileName);
        pTextStyleRcd->setXScale(1.0);
        // 字体样式记录添加进字体样式表中
        pTextStyle->add(pTextStyleRcd);
        // 返回字体样式表记录id
        AcDbObjectId styleId = pTextStyleRcd->objectId();
        pTextStyleRcd->close();
        pTextStyle->close();
        return styleId;
}

// 获取字体样式表记录id:字体样式名称
AcDbObjectId TextStyle::GetStyleId(const ACHAR *styleName)
{
        AcDbObjectId textStyleId = AcDbObjectId::kNull;
        // 如果字体样式名非空
        if (_tcslen(styleName) > 0)
        {       
                AcDbTextStyleTable *pTextStyle = NULL;
                // 获得字体样式表指针
                acdbHostApplicationServices()->workingDatabase()->
                                        getTextStyleTable(pTextStyle, AcDb::kForRead);
                // 获得字体样式记录id 并赋值textStyleId
                pTextStyle->getAt(styleName, textStyleId);
                pTextStyle->close();
        }
        // 若字体样式名为空,返回kNull
        return textStyleId;
}


#include "StdAfx.h"

void AddCommands();
void CreateTextStyle();



#include "StdAfx.h"
#include "Commands.h"
#include "Editor.h"
#include "TextStylel.h"


void AddCommands()
{        // 新建字体样式
        Editor::AddCommand(L"Add", ACRX_CMD_MODAL, CreateTextStyle);

}
void CreateTextStyle()
{
        CString textStyleName = _T("TESTSTYLE");
        // 获取TESTSTYLE字体样式id
        AcDbObjectId txtstyleId = TextStyle::GetStyleId(textStyleName);
        // 若为空,则创建
        if (txtstyleId.isNull())
        {        // 字体样式文件为CAD的fonts文件夹中的文件
                TextStyle::Add(textStyleName, _T("txt.shx"), _T("hztxt.shx"));
        }
}


admin 发表于 2024-5-4 19:29:18

objectARX获取当前图层所有文字样式

void GetAllTextStyle(std::vector<CString> &textStyle)
{
    textStyle.clear();
    AcDbTextStyleTable *pTextStyleTbl = NULL;
    acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pTextStyleTbl, AcDb::kForRead);
    AcDbTextStyleTableIterator *pIt = NULL;
    pTextStyleTbl->newIterator(pIt);
    for (;!pIt->done();pIt->step())
    {
      AcDbTextStyleTableRecord *pRcd = NULL;
      if (pIt->getRecord(pRcd, AcDb::kForRead) == Acad::eOk)
      {
            TCHAR *szName = NULL;
            pRcd->getName(szName);
            if (_tcslen(szName)>0)
            {
                textStyle.push_back(szName);
            }
            acutDelString(szName);
            pRcd->close();
      }
    }
    delete pIt;
    pTextStyleTbl->close();
}
页: [1]
查看完整版本: ObjectArx字体样式操作封装