找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 127|回复: 0

字体,文本样式

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-6 11:46:45 | 显示全部楼层 |阅读模式
  1. // 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
  2. AcDbObjectId FymTextStyle::Add(const ACHAR *name, const ACHAR *fontFileName, const ACHAR *bigfontFile)
  3. {   // 获得字体样式表
  4.         Acad::ErrorStatus es;
  5.     AcDbTextStyleTable *pTextStyle = NULL;
  6.     es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForWrite);
  7.         if (es != ErrorStatus::eOk)
  8.         {
  9.                 acutPrintf(L"\n打开文字样式表失败");
  10.                 return AcDbObjectId::kNull;
  11.         }
  12.         // 创建字体样式表记录
  13.         AcDbTextStyleTableRecord* pTextStyleRcd = new AcDbTextStyleTableRecord();
  14.         // 字体样式表记录添加:名称、字体文件名、比例、
  15.         pTextStyleRcd->setName(name);
  16.         pTextStyleRcd->setBigFontFileName(bigfontFile);
  17.         pTextStyleRcd->setFileName(fontFileName);
  18.         pTextStyleRcd->setXScale(1.0);
  19.         // 字体样式记录添加进字体样式表中
  20.         pTextStyle->add(pTextStyleRcd);
  21.         // 返回字体样式表记录id
  22.         AcDbObjectId styleId = pTextStyleRcd->objectId();
  23.         pTextStyleRcd->close();
  24.         pTextStyle->close();
  25.         return styleId;
  26. }
  27. // 从AutoCAD的文本样式表中获取指定名称的文本样式的ID:字体样式名称
  28. AcDbObjectId FymTextStyle::GetStyleId(const ACHAR* styleName)
  29. {
  30.         AcDbObjectId textStyleId = AcDbObjectId::kNull;
  31.         // 如果字体样式名非空
  32.         if (采用tcslen(styleName)>0)
  33.         {
  34.                 AcDbTextStyleTable* pTextStyle = NULL;
  35.                 // 获得字体样式表指针
  36.                 Acad::ErrorStatus es;
  37.                 es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForRead);
  38.                 // 获得字体样式记录id 并赋值textStyleId
  39.                 if (es != ErrorStatus::eOk) {
  40.                         acutPrintf(L"未能打开文本样式表");
  41.                         return AcDbObjectId::kNull;
  42.                 }
  43.                 AcDbObjectId styleId;
  44.                 if (pTextStyle->has(styleName)) {
  45.                         pTextStyle->getAt(styleName, textStyleId);
  46.                         pTextStyle->close();
  47.                         return textStyleId;// 若字体样式名为空,返回kNull
  48.                 }
  49.                 else {
  50.                         pTextStyle->close();
  51.                         return AcDbObjectId::kNull;
  52.                 }
  53.         }
  54.         else {
  55.                 acutPrintf(L"请输入文本样式的名称");
  56.                 return AcDbObjectId::kNull;
  57.         }
  58. }
  59. //获取AutoCAD中所有文本样式的名称,并存储命名为styleNames,返回对象数组
  60. AcDbObjectIdArray FymTextStyle::GetAll(std::vector<CString>& styleNames)
  61. {
  62.         AcDbObjectIdArray styleIds;
  63.         styleNames.clear();
  64.         AcDbTextStyleTable* pStyleTable = NULL;
  65.         Acad::ErrorStatus es;
  66.         es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pStyleTable, AcDb::kForRead);
  67.         //获取当前工作数据库,调用getTextStyleTable方法来以只读方式获取文本样式表,并将其赋值给pStyleTable指针
  68.         if (es != ErrorStatus::eOk) {
  69.                 acutPrintf(L"未能打开文本样式表");
  70.                 return styleIds;
  71.         }
  72.         AcDbTextStyleTableIterator* pItr = NULL;
  73.         pStyleTable->newIterator(pItr);//创建一个新的文本样式表迭代器,并将其赋值给pItr指针
  74.         for (pItr->start();!pItr->done();pItr->step())
  75.         {// 从文本样式表的起始位置开始迭代,直到完成遍历
  76.                 AcDbTextStyleTableRecord* pRcd;
  77.                 pItr->getRecord(pRcd, AcDb::kForRead);// 获取当前迭代的文本样式表记录,并将其赋值给pRcd指针
  78.                 ACHAR* textStyleName;//存储文本样式的名称
  79.                 pRcd->getName(textStyleName);//获取文本样式的名称,并将其赋值给textStyleName指针
  80.                 if (采用tcslen(textStyleName)>0)//检查textStyleName的长度是否大于0
  81.                 {
  82.                         styleNames.push采用back(textStyleName);
  83.                         //将textStyleName添加到传递给方法的styleNames向量中
  84.                         styleIds.append(pRcd->objectId());//获取并添加文本样式记录的对象ID
  85.                 }
  86.                 acutDelString(textStyleName);//释放textStyleName的内存
  87.                 pRcd->close();//关闭当前迭代的文本样式表记录
  88.         }
  89.         delete pItr;//删除创建的文本样式表迭代器
  90.         pStyleTable->close();//关闭文本样式表
  91. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:14 , Processed in 0.132034 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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