找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何在两个dwg里面拷贝字体样式表AcGiTextStyle ,AcDbTextStyleTableRecord

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-25 13:26:13 | 显示全部楼层 |阅读模式
  1. //两个dwg拷贝字体信息
  2. bool CopyTextStyleIdInfo(AcDbDatabase *pFromDataSrc/*in*/,AcDbDatabase *pToDataDes/*in*/)
  3. {
  4.         if (pFromDataSrc == NULL || pToDataDes == NULL)
  5.                 return false;
  6.         AcDbTextStyleTable *pStyleTable = NULL;
  7.         Acad::ErrorStatus es = Acad::eOk;
  8.         es = pFromDataSrc->getSymbolTable(pStyleTable,AcDb::kForRead);
  9.         if (es != Acad::eOk)
  10.                 return false;
  11.         AcDbTextStyleTableIterator *pIterator = NULL;
  12.         es = pStyleTable->newIterator(pIterator);
  13.         if (es != Acad::eOk)
  14.         {
  15.                 pStyleTable->close();
  16.                 pStyleTable = NULL;
  17.                 return false;
  18.         }
  19.         for (pIterator->start();!pIterator->done();pIterator->step())
  20.         {
  21.                 AcDbObjectId styleId = AcDbObjectId::kNull;
  22.                 if ((es = pIterator->getRecordId(styleId)) == Acad::eOk)
  23.                 {
  24.                         AcGiTextStyle *pTextStyle=new AcGiTextStyle(pToDataDes);
  25.                         if((es =fromAcDbTextStyle(*pTextStyle,styleId)) == Acad::eOk )
  26.                         {
  27.                                 AcDbTextStyleTableRecord* pNewRec = new AcDbTextStyleTableRecord;
  28.                                 setSymbolName(pNewRec,pTextStyle->styleName());
  29.                                 pNewRec->setFileName(pTextStyle->fileName());
  30.                                 /*待完善*/
  31.                                 ACHAR * pTypeface = NULL;
  32.                                 Adesk::Boolean bold;
  33.                                 Adesk::Boolean italic;
  34.                                 int charset;
  35.                                 int pitchAndFamily;
  36.                                 es = pTextStyle->font(pTypeface,bold,italic,charset,pitchAndFamily);
  37.                                 if (es == Acad::eOk)
  38.                                         pNewRec->setFont(pTypeface,bold,italic,charset,pitchAndFamily);
  39.                                 pNewRec->setBigFontFileName(_T(""));// must explicitly set to ""
  40.                                 pNewRec->setTextSize(pTextStyle->textSize());
  41.                                 pNewRec->setObliquingAngle(pTextStyle->obliquingAngle());
  42.                                 pNewRec->setXScale(pTextStyle->xScale());
  43.                                 addToSymbolTableAndClose(pNewRec,pToDataDes);
  44.                         }
  45.                         if (pTextStyle != NULL)
  46.                         {
  47.                                 delete pTextStyle;
  48.                                 pTextStyle = NULL;
  49.                         }
  50.                 }               
  51.         }
  52.         if (pIterator != NULL)
  53.         {
  54.                 delete pIterator;
  55.                 pIterator = NULL;
  56.                 pStyleTable->close();
  57.                 pStyleTable = NULL;
  58.         }
  59.         return true;
  60. }
  61. //添加文字样式块表记录
  62. BOOL addToSymbolTableAndClose(AcDbSymbolTableRecord* systemTextRec/*in*/,AcDbDatabase *pDataBase/*in*/)
  63. {
  64.         if (pDataBase == NULL || systemTextRec == NULL)
  65.             return FALSE;
  66.         AcDbTextStyleTable* symTextTbl = NULL;
  67.          Acad::ErrorStatus es = Acad::eOk;
  68.         es = pDataBase->getTextStyleTable(symTextTbl, AcDb::kForWrite);
  69.         if (es != Acad::eOk)
  70.         {
  71.                 if (systemTextRec != NULL)
  72.                 {
  73.                         delete systemTextRec;
  74.                         systemTextRec = NULL;
  75.                 }
  76.                 return FALSE;
  77.         }
  78.         AcDbSymbolTable *pSysRec = AcDbTextStyleTable::cast(symTextTbl);
  79.          //覆盖字体样式
  80.          es = pSysRec->add(systemTextRec);
  81.          if (es != Acad::eOk )
  82.          {
  83.                  symTextTbl->close();
  84.                  systemTextRec->close();
  85.                  return FALSE;
  86.          }
  87.          else
  88.          {
  89.                 systemTextRec->close();
  90.             symTextTbl->close();
  91.          }
  92.         return TRUE;
  93. }
  94. BOOL setSymbolName(AcDbSymbolTableRecord* newRec, LPCTSTR newName)
  95. {
  96.         Acad::ErrorStatus es;
  97.         es = newRec->setName(newName);
  98.         if (es != Acad::eOk) {
  99.                 newRec->close();
  100.         }
  101.         return(es);
  102. }
  103. //返回实体所在图层颜色
  104. Adesk::UInt16 getColorIndexByLayer(Adesk::UInt16 icolorIndex,CString lyname,AcDbDatabase *pDb)
  105. {
  106.         if (pDb == NULL)
  107.            return 7;
  108.         Adesk::UInt16 iclorIndexResult = 0;
  109.         Acad::ErrorStatus  bEs = Acad::eOk;
  110.         if (icolorIndex == 256) //随层
  111.         {
  112.                 AcDbLayerTable *pDbLy;
  113.                 bEs = pDb->getLayerTable(pDbLy,AcDb::kForRead);
  114.                 if (bEs == Acad::eOk)
  115.                 {
  116.                         Adesk::Boolean es=pDbLy->has(lyname);
  117.                         if (es)
  118.                         {
  119.                                 AcDbLayerTableRecord *pLayerTblRcd;
  120.                                 bEs = pDbLy->getAt(lyname,(AcDbLayerTableRecord*&)pLayerTblRcd, AcDb::kForRead);
  121.                                 if (bEs == Acad::eOk)
  122.                                 {
  123.                                         AcCmColor color = pLayerTblRcd->color();
  124.                                         iclorIndexResult = color.colorIndex();
  125.                                         pLayerTblRcd->close();
  126.                                 }
  127.                         }
  128.                         pDbLy->close();
  129.                 }
  130.         }
  131.         else if(icolorIndex == 0) //随块
  132.         {
  133.                 ;//待完善
  134.         }
  135.         else
  136.         {
  137.                 iclorIndexResult = icolorIndex;
  138.         }
  139.         return iclorIndexResult;
  140. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 22:02 , Processed in 0.108357 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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