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"));
}
}
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]