⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogrfeaturestyle.cpp

📁 用于读取TAB、MIF、SHP文件的类
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            CSLDestroy( papszToken );            CSLDestroy( papszToken2 );            return FALSE;        }        break;      case OGRSTCSymbol:        if (!EQUAL(papszToken[0],"SYMBOL"))        {            CPLError(CE_Failure, CPLE_AppDefined,                      "Error in the Type of StyleTool %s should be a SYMBOL Type\n",                     papszToken[0]);            CSLDestroy( papszToken );            CSLDestroy( papszToken2 );            return FALSE;        }        break;      case OGRSTCLabel:        if (!EQUAL(papszToken[0],"LABEL"))        {            CPLError(CE_Failure, CPLE_AppDefined,                      "Error in the Type of StyleTool %s should be a LABEL Type\n",                     papszToken[0]);            CSLDestroy( papszToken );            CSLDestroy( papszToken2 );            return FALSE;        }        break;      case OGRSTCVector:        if (!EQUAL(papszToken[0],"VECTOR"))        {            CPLError(CE_Failure, CPLE_AppDefined,                      "Error in the Type of StyleTool %s should be a VECTOR Type\n",                     papszToken[0]);            CSLDestroy( papszToken );            CSLDestroy( papszToken2 );            return FALSE;        }        break;      default:        CPLError(CE_Failure, CPLE_AppDefined,                  "Error in the Type of StyleTool, Type undetermined\n");        CSLDestroy( papszToken );        CSLDestroy( papszToken2 );        return FALSE;        break;    }        ////////////////////////////////////////////////////////////////////////    // Here we will loop on each element in the StyleString. If it's     // a valid element, we will add it in the StyleTool with     // SetParamStr().    //    // It's important to note that the SetInternalUnit...() is use to update     // the unit of the StyleTool param (m_eUnit).     // See OGRStyleTool::SetParamStr().    // There's a StyleTool unit (m_eUnit), which is the output unit, and each     // parameter of the style have its own unit value (the input unit). Here we    // set m_eUnit to the input unit and in SetParamStr(), we will use this    // value to set the input unit. Then after the loop we will reset m_eUnit     // to it's original value. (Yes it's a side effect / black magic)    //    // The pasStyle variable is a global variable passed in argument to the    // function. See at the top of this file the four OGRStyleParamId     // variable. They are used to register the valid parameter of each     // StyleTool.    ////////////////////////////////////////////////////////////////////////    // Save Scale and output Units because the parsing code will alter     // the values    eLastUnit = m_eUnit;    double  dSavedScale = m_dfScale;    int     i, nElements = CSLCount(papszToken2);    for ( i = 0; i < nElements; i++ )    {        char    **papszStylePair =            CSLTokenizeString2( papszToken2[i], ":", CSLT_HONOURSTRINGS );        int     j, nTokens = CSLCount(papszStylePair);        if ( nTokens < 1 || nTokens > 2 )        {            CPLError( CE_Warning, CPLE_AppDefined,                      "Error in the StyleTool String %s", m_pszStyleString );            CPLError( CE_Warning, CPLE_AppDefined,                      "Malformed element #%d (\"%s\") skipped",                      i, papszToken2[i] );            CSLDestroy(papszStylePair);            continue;        }                for ( j = 0; j < nCount; j++ )        {            if ( EQUAL(pasStyle[j].pszToken, papszStylePair[0]) )            {                if (nTokens == 2 && pasStyle[j].bGeoref == TRUE)                    SetInternalInputUnitFromParam(papszStylePair[1]);                // Set either the actual value of style parameter or "1"                // for boolean parameters which do not have values.                // "1" means that boolean parameter is present in the style                // string.                OGRStyleTool::SetParamStr( pasStyle[j], pasValue[j],                                    (nTokens == 2) ? papszStylePair[1] : "1" );                break;            }        }        CSLDestroy( papszStylePair );    }    m_eUnit = eLastUnit;    m_dfScale = dSavedScale;    CSLDestroy(papszToken2);    CSLDestroy(papszToken);    return TRUE;}/************************************************************************//*                   SetInternalInputUnitFromParam()                    *//************************************************************************/void OGRStyleTool::SetInternalInputUnitFromParam(char *pszString){    char *pszUnit;    if (pszString == NULL)      return;    pszUnit = strstr(pszString,"g");    if (pszUnit)    {        SetUnit(OGRSTUGround);        pszUnit[0]= '\0';        return;    }    pszUnit = strstr(pszString,"px");    if (pszUnit)    {        SetUnit(OGRSTUPixel);        pszUnit[0]= '\0';        return;    }    pszUnit = strstr(pszString,"pt");    if (pszUnit)    {        SetUnit(OGRSTUPoints);        pszUnit[0]= '\0';        return;    }    pszUnit = strstr(pszString,"mm");    if (pszUnit)    {        SetUnit(OGRSTUMM);        pszUnit[0]= '\0';        return;    }    pszUnit = strstr(pszString,"cm");    if (pszUnit)    {        SetUnit(OGRSTUCM);        pszUnit[0]= '\0';        return;    }    pszUnit = strstr(pszString,"in");    if (pszUnit)    {        SetUnit(OGRSTUInches);        pszUnit[0]= '\0';        return;    }        SetUnit(OGRSTUMM);}/************************************************************************//*                          ComputeWithUnit()                           *//************************************************************************/double OGRStyleTool::ComputeWithUnit(double dfValue, OGRSTUnitId eInputUnit){    OGRSTUnitId eOutputUnit = GetUnit();    double dfNewValue = dfValue;        // dfValue in  Meter;    if (eOutputUnit == eInputUnit)      return dfValue;    switch (eInputUnit)    {      case OGRSTUGround:        dfNewValue = dfValue / m_dfScale;        break;      case OGRSTUPixel:        dfNewValue = dfValue / (72.0 * 39.37);        break;      case OGRSTUPoints:        dfNewValue =dfValue / (72.0 * 39.37);        break;      case OGRSTUMM:        dfNewValue = 0.001 * dfValue;        break;      case OGRSTUCM:        dfNewValue = 0.01 * dfValue;        break;      case OGRSTUInches:        dfNewValue = dfValue / 39.37;        break;      default:        break;    //imp    }    switch (eOutputUnit)    {      case OGRSTUGround:        dfNewValue *= m_dfScale;        break;      case OGRSTUPixel:        dfNewValue *= (72.0 * 39.37);        break;      case OGRSTUPoints:        dfNewValue *= (72.0 * 39.37);        break;      case OGRSTUMM:        dfNewValue *= 1000.0;        break;      case OGRSTUCM:        dfNewValue *= 100.0;        break;      case OGRSTUInches:        dfNewValue *= 39.37;        break;      default:        break;  // imp    }    return dfNewValue;}/************************************************************************//*                          ComputeWithUnit()                           *//************************************************************************/int   OGRStyleTool::ComputeWithUnit(int nValue, OGRSTUnitId eUnit){    return (int) ComputeWithUnit((double )nValue, eUnit);}/************************************************************************//*                            GetParamStr()                             *//************************************************************************/const char *OGRStyleTool::GetParamStr(OGRStyleParamId &sStyleParam ,                                      OGRStyleValue &sStyleValue,                                      GBool &bValueIsNull){    if (!Parse())    {        bValueIsNull = TRUE;        return NULL;    }    bValueIsNull = !sStyleValue.bValid;        if (bValueIsNull == TRUE)      return NULL;    switch (sStyleParam.eType)    {              // if sStyleParam.bGeoref == TRUE , need to convert to output value;      case OGRSTypeString:        return sStyleValue.pszValue;      case OGRSTypeDouble:        if (sStyleParam.bGeoref)          return CPLSPrintf("%f",ComputeWithUnit(sStyleValue.dfValue,                                                 sStyleValue.eUnit));        else          return CPLSPrintf("%f",sStyleValue.dfValue);                                  case OGRSTypeInteger:        if (sStyleParam.bGeoref)          return CPLSPrintf("%d",ComputeWithUnit(sStyleValue.nValue,                                                 sStyleValue.eUnit));        else          return CPLSPrintf("%d",sStyleValue.nValue);      case OGRSTypeBoolean:        return CPLSPrintf("%d",sStyleValue.nValue);      default:        bValueIsNull = TRUE;        return NULL;    }}/****************************************************************************//*    int OGRStyleTool::GetParamNum(OGRStyleParamId sStyleParam ,           *//*                               OGRStyleValue sStyleValue,                 *//*                               GBool &bValueIsNull)                       *//*                                                                          *//****************************************************************************/int OGRStyleTool::GetParamNum(OGRStyleParamId &sStyleParam ,                                 OGRStyleValue &sStyleValue,                                 GBool &bValueIsNull){    return (int)GetParamDbl(sStyleParam,sStyleValue,bValueIsNull);}/****************************************************************************//*       double OGRStyleTool::GetParamDbl(OGRStyleParamId sStyleParam ,     *//*                               OGRStyleValue sStyleValue,                 *//*                               GBool &bValueIsNull)                       *//*                                                                          *//****************************************************************************/double OGRStyleTool::GetParamDbl(OGRStyleParamId &sStyleParam ,                                 OGRStyleValue &sStyleValue,                                 GBool &bValueIsNull){    if (!Parse())    {        bValueIsNull = TRUE;        return 0;    }    bValueIsNull = !sStyleValue.bValid;        if (bValueIsNull == TRUE)      return 0;    switch (sStyleParam.eType)    {              // if sStyleParam.bGeoref == TRUE , need to convert to output value;      case OGRSTypeString:        if (sStyleParam.bGeoref)          return ComputeWithUnit(atof(sStyleValue.pszValue),                                 sStyleValue.eUnit);        else          return atof(sStyleValue.pszValue);      case OGRSTypeDouble:        if (sStyleParam.bGeoref)          return ComputeWithUnit(sStyleValue.dfValue,                                      sStyleValue.eUnit);        else          return sStyleValue.dfValue;      case OGRSTypeInteger:        if (sStyleParam.bGeoref)          return (double)ComputeWithUnit(sStyleValue.nValue,                                         sStyleValue.eUnit);        else              return (double)sStyleValue.nValue;      case OGRSTypeBoolean:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -