天气与日历 切换到窄版

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

‎使用 ObjectARX 删除图层过滤器‎

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
‎使用 ObjectARX 删除图层过滤器‎

‎我有一个客户,他在图层上使用许多 dwgs 和许多过滤器。如何使用程序删除过滤器?‎

‎图层筛选器作为 AcDbXRecord 条目存在于图层表的扩展字典中包含的两个字典(名称为"ACAD_LAYERFILTERS"和"ACLYDICTIONARY")中。要删除图层过滤器,您需要循环访问"ACAD_LAYERFILTERS"和"ACLYDICTIONARY"字典并删除所有 AcDbXRecords。‎

[code]static void ASDKLayerFilterDelete_DeleteLayerFilters(void)

{

  // Set constructor parameter to kFalse so that the

  // database will be constructed empty.  This way only

  // what is read in will be in the database.

  AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);



  // The AcDbDatabase::readDwgFile() function

  // automatically appends a DWG extension if it is not

  // specified in the filename parameter.

  pDb->readDwgFile(_T("c:\\drawing1.dwg"));

  // ensure the whole dwg is read

  pDb->closeInput(true);



  // Get the Layer Table

  AcDbLayerTablePointer pLyrTbl(pDb->layerTableId(), AcDb::kForRead);

  if (pLyrTbl.openStatus() == Acad::eOk)

  {

    // Get Extention dictionary

    AcDbObjectId pExtDicId = pLyrTbl->extensionDictionary();



    if(pExtDicId.isValid())

    {        

      AcDbDictionaryPointer pDict(pExtDicId,AcDb::kForRead);

      if(Acad::eOk == pDict.openStatus())

      {

        // Get Layer Filter Dictionary from extension dictionary

        AcDbObjectId pObjId;

        pDict->getAt(_T("ACAD_LAYERFILTERS"),pObjId);



        if(pObjId.isValid())

        {

          AcDbDictionaryPointer pFiltDict(pObjId,AcDb::kForRead);



          if(Acad::eOk == pFiltDict.openStatus())

          {

            // Get objects in layer filter dictionary

            AcDbObjectId filtObjId;

            AcDbDictionaryIterator *pItr = pFiltDict->newIterator();

            if (NULL != pItr)

            {

              for(;!pItr->done();pItr->next())

              {

                AcDbObjectPointer<AcDbXrecord> pLyrFltr(pItr->objectId(),AcDb::kForWrite);

                if(Acad::eOk == pLyrFltr.openStatus())

                {

                  pLyrFltr->erase();

                }

              }

              delete pItr;

            }

          }

        }   



        pDict->getAt(_T("ACLYDICTIONARY"),pObjId);





        if(pObjId.isValid())

        {

          AcDbDictionaryPointer pFiltDict(pObjId,AcDb::kForRead);

          if(Acad::eOk == pFiltDict.openStatus())

          {

            // Get objects in layer filter dictionary

            AcDbObjectId filtObjId;



            AcDbDictionaryIterator *pItr = pFiltDict->newIterator();

            if(NULL != pItr)

            {

              for(;!pItr->done();pItr->next())

              {

                AcDbObjectPointer<AcDbXrecord> pLyrFltr(pItr->objectId(),AcDb::kForWrite);

                if(Acad::eOk == pLyrFltr.openStatus())

                {

                  pLyrFltr->erase();

                }      

              }

              delete pItr;

            }

          }   

        }

      }

    }  

  }



  Acad::ErrorStatus es = pDb->saveAs(_T("c:\\drawing1.dwg"));

  delete pDb;

}[/code]

 

 

 

 

‎使用 ObjectARX 删除图层过滤器‎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 13:23 , Processed in 0.138604 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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