Identifying layer property overrides for a viewport

<?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();
 


Comments

One response to “Identifying layer property overrides for a viewport”

  1. Can you provide a visual lisp example after identifying the layer name where there’s a vport override, how to identify the color # set on the vport layer override?

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading