|
- // 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
- 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();//关闭文本样式表
- }
复制代码 |
|