📄 mitab_tooldef.cpp
字号:
**********************************************************************/
int TABToolDefTable::GetNumPen()
{
return m_numPen;
}
/**********************************************************************
* TABToolDefTable::GetPenDefRef()
*
* Return a reference to the specified Pen tool definition, or NULL if
* specified index is invalid.
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
TABPenDef *TABToolDefTable::GetPenDefRef(int nIndex)
{
if (nIndex >0 && nIndex <= m_numPen)
return m_papsPen[nIndex-1];
return NULL;
}
/**********************************************************************
* TABToolDefTable::AddPenDefRef()
*
* Either create a new PenDefRef or add a reference to an existing one.
*
* Return the pen index that has been attributed to this Pen tool
* definition, or -1 if something went wrong
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
int TABToolDefTable::AddPenDefRef(TABPenDef *poNewPenDef)
{
int i, nNewPenIndex = 0;
TABPenDef *poDef;
if (poNewPenDef == NULL)
return -1;
/*-----------------------------------------------------------------
* Check for "none" case: pattern = 0 (pattern 0 does not exist!)
*----------------------------------------------------------------*/
if (poNewPenDef->nLinePattern < 1)
return 0;
/*-----------------------------------------------------------------
* Start by searching the list of existing pens
*----------------------------------------------------------------*/
for (i=0; nNewPenIndex == 0 && i<m_numPen; i++)
{
poDef = m_papsPen[i];
if (poDef->nPixelWidth == poNewPenDef->nPixelWidth &&
poDef->nLinePattern == poNewPenDef->nLinePattern &&
poDef->nPointWidth == poNewPenDef->nPointWidth &&
poDef->rgbColor == poNewPenDef->rgbColor)
{
nNewPenIndex = i+1; // Fount it!
poDef->nRefCount++;
}
}
/*-----------------------------------------------------------------
* OK, we did not find a match, then create a new entry
*----------------------------------------------------------------*/
if (nNewPenIndex == 0)
{
if (m_numPen >= m_numAllocatedPen)
{
// Realloc array by blocks of 20 items
m_numAllocatedPen += 20;
m_papsPen = (TABPenDef**)CPLRealloc(m_papsPen,
m_numAllocatedPen*sizeof(TABPenDef*));
}
m_papsPen[m_numPen] = (TABPenDef*)CPLCalloc(1, sizeof(TABPenDef));
*m_papsPen[m_numPen] = *poNewPenDef;
m_papsPen[m_numPen]->nRefCount = 1;
nNewPenIndex = ++m_numPen;
}
return nNewPenIndex;
}
/**********************************************************************
* TABToolDefTable::GetNumBrushes()
*
* Return the number of valid Brush indexes for this .MAP file
**********************************************************************/
int TABToolDefTable::GetNumBrushes()
{
return m_numBrushes;
}
/**********************************************************************
* TABToolDefTable::GetBrushDefRef()
*
* Return a reference to the specified Brush tool definition, or NULL if
* specified index is invalid.
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
TABBrushDef *TABToolDefTable::GetBrushDefRef(int nIndex)
{
if (nIndex >0 && nIndex <= m_numBrushes)
return m_papsBrush[nIndex-1];
return NULL;
}
/**********************************************************************
* TABToolDefTable::AddBrushDefRef()
*
* Either create a new BrushDefRef or add a reference to an existing one.
*
* Return the Brush index that has been attributed to this Brush tool
* definition, or -1 if something went wrong
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
int TABToolDefTable::AddBrushDefRef(TABBrushDef *poNewBrushDef)
{
int i, nNewBrushIndex = 0;
TABBrushDef *poDef;
if (poNewBrushDef == NULL)
return -1;
/*-----------------------------------------------------------------
* Check for "none" case: pattern = 0 (pattern 0 does not exist!)
*----------------------------------------------------------------*/
if (poNewBrushDef->nFillPattern < 1)
return 0;
/*-----------------------------------------------------------------
* Start by searching the list of existing Brushs
*----------------------------------------------------------------*/
for (i=0; nNewBrushIndex == 0 && i<m_numBrushes; i++)
{
poDef = m_papsBrush[i];
if (poDef->nFillPattern == poNewBrushDef->nFillPattern &&
poDef->bTransparentFill == poNewBrushDef->bTransparentFill &&
poDef->rgbFGColor == poNewBrushDef->rgbFGColor &&
poDef->rgbBGColor == poNewBrushDef->rgbBGColor)
{
nNewBrushIndex = i+1; // Fount it!
poDef->nRefCount++;
}
}
/*-----------------------------------------------------------------
* OK, we did not find a match, then create a new entry
*----------------------------------------------------------------*/
if (nNewBrushIndex == 0)
{
if (m_numBrushes >= m_numAllocatedBrushes)
{
// Realloc array by blocks of 20 items
m_numAllocatedBrushes += 20;
m_papsBrush = (TABBrushDef**)CPLRealloc(m_papsBrush,
m_numAllocatedBrushes*sizeof(TABBrushDef*));
}
m_papsBrush[m_numBrushes]=(TABBrushDef*)CPLCalloc(1,
sizeof(TABBrushDef));
*m_papsBrush[m_numBrushes] = *poNewBrushDef;
m_papsBrush[m_numBrushes]->nRefCount = 1;
nNewBrushIndex = ++m_numBrushes;
}
return nNewBrushIndex;
}
/**********************************************************************
* TABToolDefTable::GetNumFonts()
*
* Return the number of valid Font indexes for this .MAP file
**********************************************************************/
int TABToolDefTable::GetNumFonts()
{
return m_numFonts;
}
/**********************************************************************
* TABToolDefTable::GetFontDefRef()
*
* Return a reference to the specified Font tool definition, or NULL if
* specified index is invalid.
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
TABFontDef *TABToolDefTable::GetFontDefRef(int nIndex)
{
if (nIndex >0 && nIndex <= m_numFonts)
return m_papsFont[nIndex-1];
return NULL;
}
/**********************************************************************
* TABToolDefTable::AddFontDefRef()
*
* Either create a new FontDefRef or add a reference to an existing one.
*
* Return the Font index that has been attributed to this Font tool
* definition, or -1 if something went wrong
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
int TABToolDefTable::AddFontDefRef(TABFontDef *poNewFontDef)
{
int i, nNewFontIndex = 0;
TABFontDef *poDef;
if (poNewFontDef == NULL)
return -1;
/*-----------------------------------------------------------------
* Start by searching the list of existing Fonts
*----------------------------------------------------------------*/
for (i=0; nNewFontIndex == 0 && i<m_numFonts; i++)
{
poDef = m_papsFont[i];
if (EQUAL(poDef->szFontName, poNewFontDef->szFontName))
{
nNewFontIndex = i+1; // Fount it!
poDef->nRefCount++;
}
}
/*-----------------------------------------------------------------
* OK, we did not find a match, then create a new entry
*----------------------------------------------------------------*/
if (nNewFontIndex == 0)
{
if (m_numFonts >= m_numAllocatedFonts)
{
// Realloc array by blocks of 20 items
m_numAllocatedFonts += 20;
m_papsFont = (TABFontDef**)CPLRealloc(m_papsFont,
m_numAllocatedFonts*sizeof(TABFontDef*));
}
m_papsFont[m_numFonts]=(TABFontDef*)CPLCalloc(1,
sizeof(TABFontDef));
*m_papsFont[m_numFonts] = *poNewFontDef;
m_papsFont[m_numFonts]->nRefCount = 1;
nNewFontIndex = ++m_numFonts;
}
return nNewFontIndex;
}
/**********************************************************************
* TABToolDefTable::GetNumSymbols()
*
* Return the number of valid Symbol indexes for this .MAP file
**********************************************************************/
int TABToolDefTable::GetNumSymbols()
{
return m_numSymbols;
}
/**********************************************************************
* TABToolDefTable::GetSymbolDefRef()
*
* Return a reference to the specified Symbol tool definition, or NULL if
* specified index is invalid.
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
TABSymbolDef *TABToolDefTable::GetSymbolDefRef(int nIndex)
{
if (nIndex >0 && nIndex <= m_numSymbols)
return m_papsSymbol[nIndex-1];
return NULL;
}
/**********************************************************************
* TABToolDefTable::AddSymbolDefRef()
*
* Either create a new SymbolDefRef or add a reference to an existing one.
*
* Return the Symbol index that has been attributed to this Symbol tool
* definition, or -1 if something went wrong
*
* Note that nIndex is a 1-based index. A value of 0 indicates "none"
* in MapInfo.
**********************************************************************/
int TABToolDefTable::AddSymbolDefRef(TABSymbolDef *poNewSymbolDef)
{
int i, nNewSymbolIndex = 0;
TABSymbolDef *poDef;
if (poNewSymbolDef == NULL)
return -1;
/*-----------------------------------------------------------------
* Start by searching the list of existing Symbols
*----------------------------------------------------------------*/
for (i=0; nNewSymbolIndex == 0 && i<m_numSymbols; i++)
{
poDef = m_papsSymbol[i];
if (poDef->nSymbolNo == poNewSymbolDef->nSymbolNo &&
poDef->nPointSize == poNewSymbolDef->nPointSize &&
poDef->_nUnknownValue_ == poNewSymbolDef->_nUnknownValue_ &&
poDef->rgbColor == poNewSymbolDef->rgbColor )
{
nNewSymbolIndex = i+1; // Fount it!
poDef->nRefCount++;
}
}
/*-----------------------------------------------------------------
* OK, we did not find a match, then create a new entry
*----------------------------------------------------------------*/
if (nNewSymbolIndex == 0)
{
if (m_numSymbols >= m_numAllocatedSymbols)
{
// Realloc array by blocks of 20 items
m_numAllocatedSymbols += 20;
m_papsSymbol = (TABSymbolDef**)CPLRealloc(m_papsSymbol,
m_numAllocatedSymbols*sizeof(TABSymbolDef*));
}
m_papsSymbol[m_numSymbols]=(TABSymbolDef*)CPLCalloc(1,
sizeof(TABSymbolDef));
*m_papsSymbol[m_numSymbols] = *poNewSymbolDef;
m_papsSymbol[m_numSymbols]->nRefCount = 1;
nNewSymbolIndex = ++m_numSymbols;
}
return nNewSymbolIndex;
}
/**********************************************************************
* TABToolDefTable::GetMinVersionNumber()
*
* Returns the minimum file version number that can accept all the
* tool objects currently defined.
*
* Default is 300, and currently 450 can be returned if file contains
* pen widths defined in points.
**********************************************************************/
int TABToolDefTable::GetMinVersionNumber()
{
int i, nVersion = 300;
/*-----------------------------------------------------------------
* Scan Pen Defs
*----------------------------------------------------------------*/
for(i=0; i< m_numPen; i++)
{
if (m_papsPen[i]->nPointWidth > 0 )
{
nVersion = MAX(nVersion, 450); // Raise version to 450
}
}
return nVersion;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -