15/06/2015
Как определить какие свойства слоя переопределены в ВЭкране?
Ниже пример кода, который позволяет определить какие слои имеют переопределения и какие свойства слоя переопределены в ВЭкране. Метод AcDbLayerTableRecord::hasAnyOverrides позволяет нам быстро узнать есть ли какие-то переопределения у слоя для ВЭкранов. Если есть, то мы можем узнать подробности при помощи метода AcDbLayerTableRecord::hasOverrides с указанием ObjectId ВЭкрана, для которого мы хотим узнать переопределения.
Код - C++: [Выделить]
- void LayerPropsForViewportInfo()
- {
- Acad::ErrorStatus es;
- AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
- ads_point pt;
- ads_name ename;
- if (RTNORM != acedEntSel(ACRX_T("\nВыберите видовой экран:" ), ename, pt))
- return ;
- AcDbObjectId vpid = AcDbObjectId::kNull;
- if (Acad::eOk != acdbGetObjectId(vpid, ename ))
- return ;
- AcDbObjectId layerId = AcDbObjectId::kNull;
- AcDbLayerTable* pLayerTable;
- pDb->getSymbolTable(pLayerTable, AcDb::kForRead);
- AcDbLayerTableIterator *pIter = NULL;
- AcDbLayerTableRecord *pLTR = NULL;
- pLayerTable->newIterator(pIter);
- for (; !pIter->done(); pIter->step())
- {
- es = pIter->getRecord(pLTR, AcDb::kForRead);
- if (! pLTR->hasAnyOverrides())
- {
- pLTR->close();
- continue ;
- }
- if (!pLTR->hasOverrides(vpid))
- {
- pLTR->close();
- continue ;
- }
- TCHAR *lname; pLTR->getName(lname);
- acutPrintf(L"\nСлой: %s имеет следующие переопределения:", lname);
- bool isOverriddenForVP = Adesk::kFalse;
- AcCmColor clr = pLTR->color(vpid, isOverriddenForVP);
- if (isOverriddenForVP)
- {
- acutPrintf(L"\n Переопределён цвет" );
- }
- isOverriddenForVP = Adesk::kFalse;
- AcDbObjectId ltypeId = pLTR->linetypeObjectId(vpid, isOverriddenForVP);
- if (isOverriddenForVP)
- {
- acutPrintf(L"\n Переопределён тип линии" );
- }
- isOverriddenForVP = Adesk::kFalse;
- AcDb::LineWeight lw = pLTR->lineWeight(vpid, isOverriddenForVP);
- if (isOverriddenForVP)
- {
- acutPrintf(L"\n Переопределён вес линии" );
- }
- isOverriddenForVP = Adesk::kFalse;
- ACHAR *psName = pLTR->plotStyleName(vpid, isOverriddenForVP);
- if (isOverriddenForVP)
- {
- acutPrintf(L"\n Переопределён стиль печати" );
- }
- pLTR->close();
- }
- delete pIter;
- pLayerTable->close();
- }
Автор перевода: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=2792
Опубликовано 15.06.2015