Reloading linetype from file

<?xml encoding=”UTF-8″>By Virupaksha Aithal

The “AcDbDatabase::loadLineTypeFile” can load linetypes from a linetype file. If the linetype with the same name already exists in the database, then the loadLineTypeFile method can return an error code. A way to force the reloading of linetype is to load the linetype in another database and clone the linetype back to the host database to replace it. Here is a code snippet to do that :

 Acad::ErrorStatus es;
 
 AcDbDatabase *pDb = 
     acdbHostApplicationServices()->workingDatabase();
 TCHAR szLtFile[MAX_PATH];
 <span>if</span><span>  ( RTNORM != </span>
     acedFindFile(_T("TrimCADLinetypes.LIN"), szLtFile) ) 
 <span>{</span>
 	acutPrintf(ACRX_T("\nLinetype file <span>not</span><span>  found !"));</span>
 	<span>return</span><span> ;</span>
 <span>}</span>
 
 AcDbLinetypeTable *pLtTable = NULL;
 es = pDb->getLinetypeTable(pLtTable,AcDb::kForRead);
 ACHAR *szLtype = ACRX_T("FLATDOTS");
 bool isLinetypeLoaded = pLtTable->has(szLtype);
 es = pLtTable->close();
 
 <span>if</span><span> (isLinetypeLoaded)</span>
 <span>{</span>
 	// Already loaded, <span>try</span><span>  reloading the linetype</span>
 	AcDbDatabase *pTempDatabase 
                     = <span>new</span><span>  AcDbDatabase(true, <span>false</span><span> );</span></span>
 	es = pTempDatabase->loadLineTypeFile
                                  (szLtype, szLtFile);
 	<span>if</span><span> (Acad::eOk == es)</span>
 	<span>{</span>
 		AcDbLinetypeTable *pTempLtTable;
 		AcDbLinetypeTableRecord *pTempLtRec=NULL;
 
 		es = pTempDatabase->getLinetypeTable(
 		                pTempLtTable,AcDb::kForRead);
 		AcDbObjectId ltRecId = AcDbObjectId::kNull;
 		es = pTempLtTable->getAt(szLtype, ltRecId);
 		pTempLtTable->close();
 
 		AcDbObjectIdArray objIdArray;
 		objIdArray.append(ltRecId);
 
 		AcDbIdMapping idMap;
 		es = pDb->wblockCloneObjects(
 		            objIdArray, 
 		            pDb->linetypeTableId(), 
                     idMap, 
                     AcDb::kDrcReplace);
 		<span>if</span><span> (Acad::eOk == es)</span>
 		<span>{</span>
 			acutPrintf(
 			    ACRX_T("\nLinetype reloaded !"));
 		<span>}</span>
 		<span>else</span><span> </span>
 		<span>{</span>
 			acutPrintf(
             ACRX_T("\nSorry, could <span>not</span><span>  reload Linetype !"));</span>
 		<span>}</span>
 	<span>}</span>
 	<span>else</span><span> </span>
 	<span>{</span>
 		acutPrintf(
         ACRX_T("\nError loading linetype <span>from</span><span>  file !"));</span>
 	<span>}</span>
 	delete pTempDatabase;
 <span>}</span>
 <span>else</span><span>  </span>
 <span>{</span>// <span>Not</span><span>  loaded, <span>try</span><span>  loading the linetype</span></span>
 	<span>if</span><span>  ( Acad::eOk == </span>
 	    pDb->loadLineTypeFile(szLtype, szLtFile)) 
 	<span>{</span>
 		acutPrintf(
 		    ACRX_T("\nLinetype loaded <span>from</span><span>  file !"));</span>
 	<span>}</span>
 	<span>else</span><span> </span>
 	<span>{</span>
 		acutPrintf(
 		    ACRX_T("\nError loading linetype <span>from</span><span>  file !"));</span>
 	<span>}</span>
 <span>}</span>
 


Comments

Leave a Reply

Discover more from Autodesk Developer Blog

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

Continue reading