18/11/2013
Создание и доступ к информации фильтра слоёв
Ниже примеры с использованием ObjectARX и .NET создания и манипулирования фильтрами слоёв. Простейший способ для того, чтобы узнать выражение фильтра слоёв – это создать его средствами AutoCAD и использовать этот код для поиска фильтра слоёв. Это можно затем использовать в коде для создания нового фильтра слоёв.ObjectARX :
Код - C++: [Выделить]
- Acad::ErrorStatus es = Acad::eOk;
- AcDbDatabase *pDb =
- acdbHostApplicationServices()->workingDatabase();
- AcLyLayerFilterManager *pLayerFilterManager =
- aclyGetLayerFilterManager(pDb);
- AcLyLayerFilter *pRoot = NULL;
- AcLyLayerFilter *pCurrent = NULL;
- es = pLayerFilterManager->getFilters(pRoot, pCurrent);
- if(es != Acad::eOk)
- return;
- if(pRoot != NULL)
- {
- AcArray<AcLyLayerFilter *> filters;
- filters = pRoot->getNestedFilters();
- // Печатаем информацию о корневом фильтре
- acutPrintf
- (
- ACRX_T("\n(Корневой) Имя : %s Выражение : %s"),
- pRoot->name(),
- pRoot->filterExpression()
- );
- // Печатаем информацию о всех фильтрах
- for(int i=0; i < filters.length();i++)
- {
- acutPrintf
- (
- ACRX_T("\nИмя : %s Выражение : %s"),
- filters.at(i)->name(),
- filters.at(i)->filterExpression()
- );
- }
- // Выводим информацию о текущем фильтре
- if(pCurrent != NULL)
- {
- acutPrintf
- (
- ACRX_T("\n(Текущий) Имя : %s Выражение : %s"),
- pCurrent->name(),
- pCurrent->filterExpression()
- );
- }
- // Создаём и добавляем новый фильтр слоев
- AcLyLayerFilter *pMyLyFilter = new AcLyLayerFilter();
- pMyLyFilter->setName(ACRX_T("MyLyFilter"));
- pMyLyFilter->setFilterExpression(ACRX_T("NAME == \"*Test*\""));
- es = pRoot->addNested(pMyLyFilter);
- es = pLayerFilterManager->setFilters(pRoot, pMyLyFilter);
- delete pRoot;
- }
AutoCAD .Net API :
Код - C#: [Выделить]
- using Autodesk.AutoCAD.LayerManager;
- [CommandMethod("CreateLayerFilter")]
- public void CreateLayerFilter()
- {
- Document doc
- = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- LayerFilterTree filterTree = db.LayerFilters;
- LayerFilterCollection filters
- = filterTree.Root.NestedFilters;
- // Выводим информацию о корневом фильтре
- ed.WriteMessage
- (
- String.Format("\n(Корневой) Имя : {0} Выражение : {1}",
- db.LayerFilters.Root.Name,
- db.LayerFilters.Root.FilterExpression)
- );
- // Выводим информацию о всех фильтрах
- foreach(LayerFilter f in filters)
- {
- ed.WriteMessage
- (
- String.Format("\nИмя : {0} Выражение : {1}",
- f.Name,
- f.FilterExpression)
- );
- }
- // Выводим информацию о текущем фильтре
- if(db.LayerFilters.Current != null)
- {
- ed.WriteMessage
- (
- String.Format("\n(Текущий) Имя : {0} Выражение : {1}",
- db.LayerFilters.Current.Name,
- db.LayerFilters.Current.FilterExpression)
- );
- }
- // Создаём новый фильтр слоёв
- LayerFilter layerFilter = new LayerFilter();
- layerFilter.Name = "MyLyFilter";
- layerFilter.FilterExpression = "NAME == \"*Test*\"";
- filters.Add(layerFilter);
- // Устанавливаем изменённые фильтры для базы данных
- db.LayerFilters = filterTree;
- }
Источник: http://adndevblog.typepad.com/autocad/2012/05/creating-and-accessing-layer-filter-information.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=329
Опубликовано 18.11.2013Отредактировано 18.11.2013 в 04:15:34