天气与日历 切换到窄版

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

ObjectARX学习笔记(二十五)---如何在两个dwg里面拷贝字体样式表AcGiTextStyle ,AcD...

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

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    //两个dwg拷贝字体信息
    bool CopyTextStyleIdInfo(AcDbDatabase *pFromDataSrc/*in*/,AcDbDatabase *pToDataDes/*in*/)
    {
            if (pFromDataSrc == NULL || pToDataDes == NULL)
                    return false;

            AcDbTextStyleTable *pStyleTable = NULL;
            Acad::ErrorStatus es = Acad::eOk;
            es = pFromDataSrc->getSymbolTable(pStyleTable,AcDb::kForRead);
            if (es != Acad::eOk)
                    return false;

            AcDbTextStyleTableIterator *pIterator = NULL;
            es = pStyleTable->newIterator(pIterator);
            if (es != Acad::eOk)
            {
                    pStyleTable->close();
                    pStyleTable = NULL;
                    return false;
            }

            for (pIterator->start();!pIterator->done();pIterator->step())
            {
                    AcDbObjectId styleId = AcDbObjectId::kNull;
                    if ((es = pIterator->getRecordId(styleId)) == Acad::eOk)
                    {
                            AcGiTextStyle *pTextStyle=new AcGiTextStyle(pToDataDes);
                            if((es =fromAcDbTextStyle(*pTextStyle,styleId)) == Acad::eOk )
                            {
                                    AcDbTextStyleTableRecord* pNewRec = new AcDbTextStyleTableRecord;

                                    setSymbolName(pNewRec,pTextStyle->styleName());
                                    pNewRec->setFileName(pTextStyle->fileName());
                                    /*待完善*/
                                    ACHAR * pTypeface = NULL;
                                    Adesk::Boolean bold;
                                    Adesk::Boolean italic;
                                    int charset;
                                    int pitchAndFamily;
                                    es = pTextStyle->font(pTypeface,bold,italic,charset,pitchAndFamily);
                                    if (es == Acad::eOk)
                                            pNewRec->setFont(pTypeface,bold,italic,charset,pitchAndFamily);

                                    pNewRec->setBigFontFileName(_T(""));// must explicitly set to ""
                                    pNewRec->setTextSize(pTextStyle->textSize());
                                    pNewRec->setObliquingAngle(pTextStyle->obliquingAngle());
                                    pNewRec->setXScale(pTextStyle->xScale());
                                    addToSymbolTableAndClose(pNewRec,pToDataDes);
                            }
                            if (pTextStyle != NULL)
                            {
                                    delete pTextStyle;
                                    pTextStyle = NULL;
                            }
                    }               
            }

            if (pIterator != NULL)
            {
                    delete pIterator;
                    pIterator = NULL;
                    pStyleTable->close();
                    pStyleTable = NULL;
            }
            return true;
    }

    //添加文字样式块表记录
    BOOL addToSymbolTableAndClose(AcDbSymbolTableRecord* systemTextRec/*in*/,AcDbDatabase *pDataBase/*in*/)
    {
            if (pDataBase == NULL || systemTextRec == NULL)
                return FALSE;

            AcDbTextStyleTable* symTextTbl = NULL;
             Acad::ErrorStatus es = Acad::eOk;
            es = pDataBase->getTextStyleTable(symTextTbl, AcDb::kForWrite);
            if (es != Acad::eOk)
            {
                    if (systemTextRec != NULL)
                    {
                            delete systemTextRec;
                            systemTextRec = NULL;
                    }
                    return FALSE;
            }
            AcDbSymbolTable *pSysRec = AcDbTextStyleTable::cast(symTextTbl);
             //覆盖字体样式
             es = pSysRec->add(systemTextRec);
             if (es != Acad::eOk )
             {
                     symTextTbl->close();
                     systemTextRec->close();
                     return FALSE;
             }
             else
             {
                    systemTextRec->close();
                symTextTbl->close();
             }
            return TRUE;
    }

    BOOL setSymbolName(AcDbSymbolTableRecord* newRec, LPCTSTR newName)
    {
            Acad::ErrorStatus es;
            es = newRec->setName(newName);
            if (es != Acad::eOk) {
                    newRec->close();
            }
            return(es);
    }

    //返回实体所在图层颜色
    Adesk::UInt16 getColorIndexByLayer(Adesk::UInt16 icolorIndex,CString lyname,AcDbDatabase *pDb)
    {
            if (pDb == NULL)
               return 7;

            Adesk::UInt16 iclorIndexResult = 0;
            Acad::ErrorStatus  bEs = Acad::eOk;
            if (icolorIndex == 256) //随层
            {
                    AcDbLayerTable *pDbLy;
                    bEs = pDb->getLayerTable(pDbLy,AcDb::kForRead);
                    if (bEs == Acad::eOk)
                    {
                            Adesk::Boolean es=pDbLy->has(lyname);
                            if (es)
                            {
                                    AcDbLayerTableRecord *pLayerTblRcd;
                                    bEs = pDbLy->getAt(lyname,(AcDbLayerTableRecord*&)pLayerTblRcd, AcDb::kForRead);
                                    if (bEs == Acad::eOk)
                                    {
                                            AcCmColor color = pLayerTblRcd->color();
                                            iclorIndexResult = color.colorIndex();
                                            pLayerTblRcd->close();
                                    }
                            }
                            pDbLy->close();
                    }
            }
            else if(icolorIndex == 0) //随块
            {
                    ;//待完善
            }
            else
            {
                    iclorIndexResult = icolorIndex;
            }
            return iclorIndexResult;
    }

     

     

     

     

    ObjectARX学习笔记(二十五)---如何在两个dwg里面拷贝字体样式表AcGiTextStyle ,AcD...
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-7-1 05:12 , Processed in 0.091495 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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