字体,文本样式
// 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)AcDbObjectId FymTextStyle::Add(const ACHAR *name, const ACHAR *fontFileName, const ACHAR *bigfontFile)
{ // 获得字体样式表
Acad::ErrorStatus es;
AcDbTextStyleTable *pTextStyle = NULL;
es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForWrite);
if (es != ErrorStatus::eOk)
{
acutPrintf(L"\n打开文字样式表失败");
return AcDbObjectId::kNull;
}
// 创建字体样式表记录
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;
}
// 从AutoCAD的文本样式表中获取指定名称的文本样式的ID:字体样式名称
AcDbObjectId FymTextStyle::GetStyleId(const ACHAR* styleName)
{
AcDbObjectId textStyleId = AcDbObjectId::kNull;
// 如果字体样式名非空
if (采用tcslen(styleName)>0)
{
AcDbTextStyleTable* pTextStyle = NULL;
// 获得字体样式表指针
Acad::ErrorStatus es;
es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForRead);
// 获得字体样式记录id 并赋值textStyleId
if (es != ErrorStatus::eOk) {
acutPrintf(L"未能打开文本样式表");
return AcDbObjectId::kNull;
}
AcDbObjectId styleId;
if (pTextStyle->has(styleName)) {
pTextStyle->getAt(styleName, textStyleId);
pTextStyle->close();
return textStyleId;// 若字体样式名为空,返回kNull
}
else {
pTextStyle->close();
return AcDbObjectId::kNull;
}
}
else {
acutPrintf(L"请输入文本样式的名称");
return AcDbObjectId::kNull;
}
}
//获取AutoCAD中所有文本样式的名称,并存储命名为styleNames,返回对象数组
AcDbObjectIdArray FymTextStyle::GetAll(std::vector<CString>& styleNames)
{
AcDbObjectIdArray styleIds;
styleNames.clear();
AcDbTextStyleTable* pStyleTable = NULL;
Acad::ErrorStatus es;
es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pStyleTable, AcDb::kForRead);
//获取当前工作数据库,调用getTextStyleTable方法来以只读方式获取文本样式表,并将其赋值给pStyleTable指针
if (es != ErrorStatus::eOk) {
acutPrintf(L"未能打开文本样式表");
return styleIds;
}
AcDbTextStyleTableIterator* pItr = NULL;
pStyleTable->newIterator(pItr);//创建一个新的文本样式表迭代器,并将其赋值给pItr指针
for (pItr->start();!pItr->done();pItr->step())
{// 从文本样式表的起始位置开始迭代,直到完成遍历
AcDbTextStyleTableRecord* pRcd;
pItr->getRecord(pRcd, AcDb::kForRead);// 获取当前迭代的文本样式表记录,并将其赋值给pRcd指针
ACHAR* textStyleName;//存储文本样式的名称
pRcd->getName(textStyleName);//获取文本样式的名称,并将其赋值给textStyleName指针
if (采用tcslen(textStyleName)>0)//检查textStyleName的长度是否大于0
{
styleNames.push采用back(textStyleName);
//将textStyleName添加到传递给方法的styleNames向量中
styleIds.append(pRcd->objectId());//获取并添加文本样式记录的对象ID
}
acutDelString(textStyleName);//释放textStyleName的内存
pRcd->close();//关闭当前迭代的文本样式表记录
}
delete pItr;//删除创建的文本样式表迭代器
pStyleTable->close();//关闭文本样式表
}
页:
[1]