设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 209|回复: 3

ARX 插入快

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-27 13:31 | 显示全部楼层 |阅读模式
    1. AcDbObjectId importBlockToCurDWGDatabase(const ACHAR *pBlockName, const ACHAR *pFileName)
    2. {
    3.         Acad::ErrorStatus es=Acad::eOk;
    4.         AcDbObjectId idImported; // ID нашего нового блока
    5.         AcDbDatabase* pWorkDatabase = acdbHostApplicationServices()->workingDatabase();
    6.         AcAxDocLock docLock(pWorkDatabase);
    7.         AcDbDatabase* pBlockDatabase = new AcDbDatabase(false,true);
    8.         es = pBlockDatabase->readDwgFile(pFileName);
    9.         if(es!=Acad::eOk){delete pBlockDatabase;return NULL;}
    10.         
    11.         try
    12.         {
    13.                 AcDbBlockTable* pBlockTable;
    14.                 es=pBlockDatabase->getSymbolTable(pBlockTable,AcDb::kForRead);
    15.                 if(es!=Acad::eOk){delete pBlockDatabase;return NULL;}
    16.          
    17.                 AcDbObjectId idInsRecord;      
    18.                 es=pBlockTable->getAt(pBlockName,idInsRecord);
    19.                 pBlockTable->close();
    20.                 if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // нет такого блока
    21.          
    22.                 AcDbDatabase* pTempDB;
    23.                 es=pBlockDatabase->wblock(pTempDB,idInsRecord);
    24.                 if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // не скопировался блок в пустую базу
    25.          
    26.                 es=pWorkDatabase->insert(idImported,pBlockName,pTempDB);
    27.                 delete pTempDB;
    28.                 if(es!=Acad::eOk){delete pBlockDatabase;return NULL;} // не вставилась пустая база с блоком в нашу текущую базу
    29.         }catch(...){delete pBlockDatabase;return NULL;}

    30.         delete pBlockDatabase;
    31.         return idImported;
    32. }

    33. void drawSign(CString blockName, CString blockFilePath, double scale)
    34. {
    35.         AcDbObjectId newBlockTableId;
    36.         AcGePoint3d insPnt;

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

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

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

    67.         acdbHostApplicationServices()->workingAppSysvars()->setOsmode(osnap);
    68.         acedCommand(RTSTR,_T("_ucs"),RTSTR,_T("_p"),0);
    69.         acedCommand(RTSTR,_T("_ucsicon"),RTSTR,_T("_on"),0);
    70.         acedPostCommandPrompt();
    71. }
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:31 | 显示全部楼层
    1. int importBlockToSheetDWG(const ACHAR *pBlockName, const ACHAR *pBlockFile, const ACHAR *pSheetDWGFile)
    2. //pBlockName - имя блока, pBlockFile - файл из которого будем его брать, pSheetDWGFile - файл в который этот блок нужно скопировать
    3. {
    4.         Acad::ErrorStatus es=Acad::eOk;
    5.         AcDbDatabase* pWorkDatabase = acdbHostApplicationServices()->workingDatabase();
    6.         AcDbDatabase* pSheetDatabase = new AcDbDatabase(false,true);
    7.         AcAxDocLock docLock(pSheetDatabase);
    8.         es = pSheetDatabase->readDwgFile(pSheetDWGFile);
    9.         if(es!=Acad::eOk){delete pSheetDatabase;return 0;}

    10.         AcDbBlockTable* pBlockTable;
    11.         es=pSheetDatabase->getSymbolTable(pBlockTable,AcDb::kForRead);
    12.         if(es!=Acad::eOk){delete pSheetDatabase;return NULL;}
    13.   
    14.         AcDbObjectId idInsRecord;      
    15.         es=pBlockTable->getAt(pBlockName,idInsRecord);
    16.         pBlockTable->close();
    17.         if(es==Acad::eOk){delete pSheetDatabase;return 2;} // такой блок уже есть. перезаписывать не нужно

    18.         acdbHostApplicationServices()->setWorkingDatabase(pSheetDatabase);
    19.         acdbHostApplicationServices()->enableMessageDisplay(false);
    20.         AcDbObjectId iId = importBlockToCurDWGDatabase(pBlockName, pBlockFile);
    21.         acdbHostApplicationServices()->enableMessageDisplay(true);
    22.         acdbHostApplicationServices()->setWorkingDatabase(pWorkDatabase);
    23.         if (!iId.isNull())
    24.         { // сохраняем в формате 2010 акада
    25.                 pSheetDatabase->saveAs(pSheetDWGFile,true,AcDb::kDHL_1024);
    26.         }
    27.         delete pSheetDatabase;
    28.         if (!iId.isNull()) return 1;
    29.         else return 0;
    30. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:31 | 显示全部楼层
    1. // вставить после строки if(es!=Acad::eOk){delete pBlockDatabase;return NULL;}
    2. //->////////////////////////////////////////////////////////////////////////////////////////////////
    3. // заплатка ////////////////////////////////////////////////////////////////////////////////////////
    4. // в pWorkDatabase найти этот блок, убить sortents, найти все штриховки и кинуть их на задний план
    5. AcDbBlockTableRecordPointer pBadBlockRecord(pBlockName,pWorkDatabase,AcDb::kForRead);
    6. if ((es = pBadBlockRecord.openStatus()) != Acad::eOk) return NULL;
    7. //-> а теперь ищем все штриховки
    8. AcDbObjectIdArray hatchArray; hatchArray.removeAll();
    9. AcDbBlockTableRecordIterator *iter = NULL;   
    10. if ((es = pBadBlockRecord->newIterator(iter)) != Acad::eOk) return NULL;
    11. AcDbObjectId eId;
    12. for (;!iter->done(); iter->step())
    13. {
    14.         if (iter->getEntityId(eId) == Acad::eOk)
    15.         {
    16.                 AcDbObjectPointer<AcDbHatch> pHatch(eId,AcDb::kForRead);
    17.                 if ((es = pHatch.openStatus ()) == Acad::eOk)
    18.                         hatchArray.append(eId);
    19.         }
    20. }
    21. delete iter;
    22. //<-
    23. bool needReCreate = false;
    24. if (!hatchArray.isEmpty())
    25. {
    26.         AcDbSortentsTable *pSortTable;
    27.         es = pBadBlockRecord->getSortentsTable(pSortTable,AcDb::kForRead);
    28.         if (es == Acad::eOk)
    29.         {
    30.                 for (int i = 0; i < hatchArray.length(); i++)
    31.                 {
    32.                         AcDbHandle handle;
    33.                         Adesk::Boolean resHasHatch;
    34.                         resHasHatch = pSortTable->sortAs(hatchArray.at(i),handle);
    35.                         if (resHasHatch == Adesk::kFalse)
    36.                         {
    37.                                 needReCreate = true;
    38.                                 break;
    39.                         }
    40.                 }
    41.                 pSortTable->close();
    42.         }
    43. }

    44. if (needReCreate)
    45. {
    46.         //-> словарь удалим через extensionDictionary. так проще, чем через getSortentsTable
    47.         AcDbObjectId extDictId = pBadBlockRecord->extensionDictionary();
    48.         if (extDictId.isNull()){return NULL;}
    49.         AcDbDictionaryPointer pObjectDictionary(extDictId,AcDb::kForWrite);
    50.         if (pObjectDictionary.openStatus() != Acad::eOk) {return NULL;}
    51.         AcDbDictionaryIterator* pDictIter;
    52.         pDictIter= pObjectDictionary->newIterator();
    53.         for (; !pDictIter->done(); pDictIter->next())
    54.         {
    55.                 AcDbObjectId idXrec;
    56.                 CString tmpStr = pDictIter->name();
    57.                 if (tmpStr.CompareNoCase(_T("ACAD_SORTENTS")) == 0)
    58.                 {
    59.                         if ((es = pObjectDictionary->remove(tmpStr)) != Acad::eOk)
    60.                         {
    61.                                 continue;
    62.                         }
    63.                         break;
    64.                 }
    65.         }
    66.         pObjectDictionary->close();
    67.         delete pDictIter;
    68.         //<-
    69.         if (!hatchArray.isEmpty())
    70.         {
    71.                 AcDbSortentsTable *pSortTable;
    72.                 pBadBlockRecord->getSortentsTable(pSortTable,AcDb::kForWrite,true);
    73.                 pSortTable->moveToBottom(hatchArray);
    74.                 pSortTable->close();
    75.         }
    76. }
    77. //<-////////////////////////////////////////////////////////////////////////////////////////////////
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:32 | 显示全部楼层
    1. if (!hatchArray.isEmpty())
    2. {
    3.         AcDbSortentsTable *pSortTable;
    4.         es = pBadBlockRecord->getSortentsTable(pSortTable,AcDb::kForRead);
    5.         if (es == Acad::eOk)
    6.         {
    7.                 AcDbObjectIdArray idsDrawOrder;idsDrawOrder.removeAll();
    8.                 pSortTable->getFullDrawOrder(idsDrawOrder);

    9.                 for (int i = 0; i < hatchArray.length(); i++)
    10.                 {
    11.                         
    12.                         if (!idsDrawOrder.contains(hatchArray.at(i)))
    13.                         {
    14.                                 needReCreate = true;
    15.                                 break;
    16.                         }
    17.                 }
    18.                 pSortTable->close();
    19.         }
    20. }
    复制代码
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛