<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
Here is a sample code to identify the layers that have their properties overridden for a viewport and to list the property overrides. The “AcDbLayerTableRecord::hasAnyOverrides” should quickly let us know if there are any overrides for any of the viewports. If it does exist, we can get to the details using “AcDbLayerTableRecord::hasOverrides” and provide the ObjectId of the viewport for which we want to know the overrides.
Acad::ErrorStatus es;
AcDbDatabase *pDb
= acdbHostApplicationServices()->workingDatabase();
ads_point pt;
ads_name ename;
<span>if</span><span> ( RTNORM != </span>
acedEntSel(ACRX_T(<span>"Select a viewport :"</span><span> ), </span>
ename, pt))
<span>return</span><span> ;</span>
AcDbObjectId vpid = AcDbObjectId::kNull;
<span>if</span><span> ( Acad::eOk != acdbGetObjectId(vpid, ename ))</span>
<span>return</span><span> ;</span>
AcDbObjectId layerId = AcDbObjectId::kNull;
AcDbLayerTable* pLayerTable;
pDb->getSymbolTable(pLayerTable, AcDb::kForRead);
AcDbLayerTableIterator *pIter = NULL;
AcDbLayerTableRecord *pLTR = NULL;
pLayerTable->newIterator(pIter);
<span>for</span><span> (;! pIter->done(); pIter->step()) </span>
<span>{</span>
es = pIter->getRecord(pLTR, AcDb::kForRead);
<span>if</span><span> (! pLTR->hasAnyOverrides())</span>
<span>{</span>
pLTR->close();
<span>continue</span><span> ;</span>
<span>}</span>
<span>if</span><span> (! pLTR->hasOverrides(vpid))</span>
<span>{</span>
pLTR->close();
<span>continue</span><span> ;</span>
<span>}</span>
TCHAR *lname;
pLTR->getName(lname);
acutPrintf(L<span>"\n Layer : %s has the following overrides :"</span><span> ,</span>
lname);
<span>bool</span><span> isOverriddenForVP = Adesk::kFalse;</span>
AcCmColor clr = pLTR->color(vpid, isOverriddenForVP);
<span>if</span><span> (isOverriddenForVP)</span>
<span>{</span>
acutPrintf(L<span>"\n Color override"</span><span> );</span>
<span>}</span>
isOverriddenForVP = Adesk::kFalse;
AcDbObjectId ltypeId
= pLTR->linetypeObjectId(
vpid, isOverriddenForVP);
<span>if</span><span> (isOverriddenForVP)</span>
<span>{</span>
acutPrintf(L<span>"\n Linetype override"</span><span> );</span>
<span>}</span>
isOverriddenForVP = Adesk::kFalse;
AcDb::LineWeight lw
= pLTR->lineWeight
(vpid, isOverriddenForVP);
<span>if</span><span> (isOverriddenForVP)</span>
<span>{</span>
acutPrintf(L<span>"\n Lineweight override"</span><span> );</span>
<span>}</span>
isOverriddenForVP = Adesk::kFalse;
ACHAR *psName = pLTR->plotStyleName
(vpid, isOverriddenForVP);
<span>if</span><span> (isOverriddenForVP)</span>
<span>{</span>
acutPrintf(L<span>"\n Plotstyle override"</span><span> );</span>
<span>}</span>
pLTR->close();
<span>}</span>
<span>delete</span><span> pIter;</span>
pLayerTable->close();

Leave a Reply