天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 35|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 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. }
    复制代码

     

     

     

     

    如何在两个dwg里面拷贝字体样式表AcGiTextStyle ,AcDbTextStyleTableRecord
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:36 , Processed in 0.155247 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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