<?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>

Leave a Reply