天气与日历 切换到窄版

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

ARX 插入快

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]AcDbObjectId importBlockToCurDWGDatabase(const ACHAR *pBlockName, const ACHAR *pFileName)
{
        Acad::ErrorStatus es=Acad::eOk;
        AcDbObjectId idImported; // ID нашего нового блока
        AcDbDatabase* pWorkDatabase = acdbHostApplicationServices()->workingDatabase();
        AcAxDocLock docLock(pWorkDatabase);
        AcDbDatabase* pBlockDatabase = new AcDbDatabase(false,true);
        es = pBlockDatabase->readDwgFile(pFileName);
        if(es!=Acad::eOk){delete pBlockDatabase;return NULL;}
        
        try
        {
                AcDbBlockTable* pBlockTable;
                es=pBlockDatabase->getSymbolTable(pBlockTable,AcDb::kForRead);
                if(es!=Acad::eOk){delete pBlockDatabase;return NULL;}
         
                AcDbObjectId idInsRecord;      
                es=pBlockTable->getAt(pBlockName,idInsRecord);
                pBlockTable->close();
                if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // нет такого блока
         
                AcDbDatabase* pTempDB;
                es=pBlockDatabase->wblock(pTempDB,idInsRecord);
                if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // не скопировался блок в пустую базу
         
                es=pWorkDatabase->insert(idImported,pBlockName,pTempDB);
                delete pTempDB;
                if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // не вставилась пустая база с блоком в нашу текущую базу
        }catch(...){delete pBlockDatabase;return NULL;}

        delete pBlockDatabase;
        return idImported;
}

void drawSign(CString blockName, CString blockFilePath, double scale)
{
        AcDbObjectId newBlockTableId;
        AcGePoint3d insPnt;

        acdbHostApplicationServices()->enableMessageDisplay(false);
        newBlockTableId = importBlockToCurDWGDatabase(blockName.GetString(),blockFilePath.GetString());
        acdbHostApplicationServices()->enableMessageDisplay(true);
        if (newBlockTableId.isNull())
        {
                acedAlert(_T("Данный блок не найден"));
                return;
        }
        
        acedCommand(RTSTR,_T("_ucsicon"),RTSTR,_T("_off"),0); // значек СК
        acedCommand (RTSTR, _T("_ucs"),RTSTR,_T("_v"),0);
        AcDbDatabase* pWorkDatabase = acdbHostApplicationServices()->workingDatabase();
        AcAxDocLock docLock(pWorkDatabase);

        int osnap = acdbHostApplicationServices()->workingAppSysvars()->osmode();
        acdbHostApplicationServices()->workingAppSysvars()->setOsmode(64 + 512);
        if(acedGetPoint(NULL,_T("\nТочка вставки: "),asDblArray (insPnt))!=RTNORM)
        {
                acdbHostApplicationServices()->workingAppSysvars()->setOsmode(osnap);
                acedCommand(RTSTR,_T("_ucs"),RTSTR,_T("_p"),0);
                acedCommand(RTSTR,_T("_ucsicon"),RTSTR,_T("_on"),0);
                return;
        }

        AcDbBlockReference *blockReference = new AcDbBlockReference(insPnt,newBlockTableId);
        blockReference->setRotation(0.0);
        blockReference->setNormal (AcGeVector3d (0.0, 0.0, 1.0)) ;
        blockReference->setScaleFactors(AcGeScale3d(scale));
        AcGeMatrix3d matUcs;
        acedGetCurrentUCS(matUcs);
        blockReference->transformBy(matUcs);
        postToDb(blockReference); // запись экзкмпляра блока в БД чертежа

        acdbHostApplicationServices()->workingAppSysvars()->setOsmode(osnap);
        acedCommand(RTSTR,_T("_ucs"),RTSTR,_T("_p"),0);
        acedCommand(RTSTR,_T("_ucsicon"),RTSTR,_T("_on"),0);
        acedPostCommandPrompt();
}
[/code]

 

 

 

 

ARX 插入快
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 15:27 , Processed in 0.161029 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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