找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 165|回复: 1

ObjectArx字体样式操作封装

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-5-4 19:25:32 | 显示全部楼层 |阅读模式
  1. #pragma once
  2. #include <vector>
  3. class TextStyle
  4. {
  5. public:
  6.         TextStyle();
  7.         ~TextStyle();
  8.         // 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
  9.         static AcDbObjectId Add(const ACHAR *name,
  10.                                                                   const ACHAR *fontFileName,
  11.                                                                   const ACHAR *bigfontFile);
  12.         // 获取字体样式表记录id:字体样式名称
  13.         static AcDbObjectId GetStyleId(const ACHAR *styleName);
  14. };
  15. #include "stdafx.h"
  16. #include "TextStylel.h"
  17. TextStyle::TextStyle(){}
  18. TextStyle::~TextStyle(){}
  19. // 创建字体样式:字体样式名、字体文件名、大字体文件名(亚洲国家用)
  20. AcDbObjectId TextStyle::Add(const ACHAR *name,
  21.                                                         const ACHAR *fontFileName,
  22.                                                         const ACHAR *bigfontFile)
  23. {        // 获得字体样式表
  24.         AcDbTextStyleTable *pTextStyle = NULL;
  25.         acdbHostApplicationServices()->workingDatabase()->
  26.                                 getTextStyleTable(pTextStyle, AcDb::kForWrite);
  27.         // 创建字体样式表记录
  28.         AcDbTextStyleTableRecord *pTextStyleRcd = new AcDbTextStyleTableRecord();
  29.         // 字体样式表记录添加:名称、字体文件名、比例、
  30.         pTextStyleRcd->setName(name);
  31.         pTextStyleRcd->setBigFontFileName(bigfontFile);
  32.         pTextStyleRcd->setFileName(fontFileName);
  33.         pTextStyleRcd->setXScale(1.0);
  34.         // 字体样式记录添加进字体样式表中
  35.         pTextStyle->add(pTextStyleRcd);
  36.         // 返回字体样式表记录id
  37.         AcDbObjectId styleId = pTextStyleRcd->objectId();
  38.         pTextStyleRcd->close();
  39.         pTextStyle->close();
  40.         return styleId;
  41. }
  42. // 获取字体样式表记录id:字体样式名称
  43. AcDbObjectId TextStyle::GetStyleId(const ACHAR *styleName)
  44. {
  45.         AcDbObjectId textStyleId = AcDbObjectId::kNull;
  46.         // 如果字体样式名非空
  47.         if (采用tcslen(styleName) > 0)
  48.         {       
  49.                 AcDbTextStyleTable *pTextStyle = NULL;
  50.                 // 获得字体样式表指针
  51.                 acdbHostApplicationServices()->workingDatabase()->
  52.                                         getTextStyleTable(pTextStyle, AcDb::kForRead);
  53.                 // 获得字体样式记录id 并赋值textStyleId
  54.                 pTextStyle->getAt(styleName, textStyleId);
  55.                 pTextStyle->close();
  56.         }
  57.         // 若字体样式名为空,返回kNull
  58.         return textStyleId;
  59. }
  60. #include "StdAfx.h"
  61. void AddCommands();
  62. void CreateTextStyle();
  63. #include "StdAfx.h"
  64. #include "Commands.h"
  65. #include "Editor.h"
  66. #include "TextStylel.h"
  67. void AddCommands()
  68. {        // 新建字体样式
  69.         Editor::AddCommand(L"Add", ACRX采用CMD采用MODAL, CreateTextStyle);
  70. }
  71. void CreateTextStyle()
  72. {
  73.         CString textStyleName = 采用T("TESTSTYLE");
  74.         // 获取TESTSTYLE字体样式id
  75.         AcDbObjectId txtstyleId = TextStyle::GetStyleId(textStyleName);
  76.         // 若为空,则创建
  77.         if (txtstyleId.isNull())
  78.         {        // 字体样式文件为CAD的fonts文件夹中的文件
  79.                 TextStyle::Add(textStyleName, 采用T("txt.shx"), 采用T("hztxt.shx"));
  80.         }
  81. }
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
 楼主| 发表于 2024-5-4 19:29:18 | 显示全部楼层
  1. objectARX获取当前图层所有文字样式
  2. void GetAllTextStyle(std::vector<CString> &textStyle)
  3. {
  4.     textStyle.clear();
  5.     AcDbTextStyleTable *pTextStyleTbl = NULL;
  6.     acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pTextStyleTbl, AcDb::kForRead);
  7.     AcDbTextStyleTableIterator *pIt = NULL;
  8.     pTextStyleTbl->newIterator(pIt);
  9.     for (;!pIt->done();pIt->step())
  10.     {
  11.         AcDbTextStyleTableRecord *pRcd = NULL;
  12.         if (pIt->getRecord(pRcd, AcDb::kForRead) == Acad::eOk)
  13.         {
  14.             TCHAR *szName = NULL;
  15.             pRcd->getName(szName);
  16.             if (采用tcslen(szName)>0)
  17.             {
  18.                 textStyle.push采用back(szName);
  19.             }
  20.             acutDelString(szName);
  21.             pRcd->close();
  22.         }
  23.     }
  24.     delete pIt;
  25.     pTextStyleTbl->close();
  26. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 06:06 , Processed in 0.135883 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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