亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ntf_generic.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************** * $Id: ntf_generic.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  NTF Translator * Purpose:  Handle NTF products that aren't recognised generically. * Author:   Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************/#include <stdarg.h>#include "ntf.h"#include "cpl_string.h"CPL_CVSID("$Id: ntf_generic.cpp 10646 2007-01-18 02:38:10Z warmerdam $");#define MAX_LINK        5000/************************************************************************//* ==================================================================== *//*                          NTFGenericClass                             *//*                                                                      *//*      The NTFGenericClass class exists to hold aggregated             *//*      information for each type of record encountered in a set of     *//*      NTF files, primarily the list of attributes actually            *//*      encountered.                                                    *//* ==================================================================== *//************************************************************************//************************************************************************//*                           NTFGenericClass                            *//************************************************************************/NTFGenericClass::NTFGenericClass(){    nFeatureCount = 0;    b3D = FALSE;    nAttrCount = 0;    papszAttrNames = NULL;    papszAttrFormats = NULL;    panAttrMaxWidth = NULL;    pabAttrMultiple = NULL;}/************************************************************************//*                           ~NTFGenericClass                           *//************************************************************************/NTFGenericClass::~NTFGenericClass(){    CSLDestroy( papszAttrNames );    CSLDestroy( papszAttrFormats );    CPLFree( panAttrMaxWidth );    CPLFree( pabAttrMultiple );}/************************************************************************//*                            CheckAddAttr()                            *//*                                                                      *//*      Check if an attribute already exists.  If not add it with       *//*      it's format.  Note we don't check for format conflicts at       *//*      this time.                                                      *//************************************************************************/void NTFGenericClass::CheckAddAttr( const char * pszName,                                    const char * pszFormat,                                    int nWidth ){    int         iAttrOffset;    if( EQUAL(pszName,"TX") )        pszName = "TEXT";    if( EQUAL(pszName,"FC") )        pszName = "FEAT_CODE";    iAttrOffset = CSLFindString( papszAttrNames, pszName );        if( iAttrOffset == -1 )    {        nAttrCount++;        papszAttrNames = CSLAddString( papszAttrNames, pszName );        papszAttrFormats = CSLAddString( papszAttrFormats, pszFormat );        panAttrMaxWidth = (int *)            CPLRealloc( panAttrMaxWidth, sizeof(int) * nAttrCount );        panAttrMaxWidth[nAttrCount-1] = nWidth;        pabAttrMultiple = (int *)            CPLRealloc( pabAttrMultiple, sizeof(int) * nAttrCount );        pabAttrMultiple[nAttrCount-1] = FALSE;    }    else    {        if( panAttrMaxWidth[iAttrOffset] < nWidth )            panAttrMaxWidth[iAttrOffset] = nWidth;    }}/************************************************************************//*                            SetMultiple()                             *//*                                                                      *//*      Mark this attribute as appearing multiple times on some         *//*      features.                                                       *//************************************************************************/void NTFGenericClass::SetMultiple( const char *pszName ){    int         iAttrOffset;    if( EQUAL(pszName,"TX") )        pszName = "TEXT";    if( EQUAL(pszName,"FC") )        pszName = "FEAT_CODE";    iAttrOffset = CSLFindString( papszAttrNames, pszName );    if( iAttrOffset == -1 )        return;    pabAttrMultiple[iAttrOffset] = TRUE;}/************************************************************************//*                           WorkupGeneric()                            *//*                                                                      *//*      Scan a whole file, in order to build up a list of attributes    *//*      for the generic types.                                          *//************************************************************************/void OGRNTFDataSource::WorkupGeneric( NTFFileReader * poReader ){    NTFRecord   **papoGroup = NULL;    if( poReader->GetNTFLevel() > 2 )    {        poReader->IndexFile();        if( CPLGetLastErrorType() == CE_Failure )            return;    }    else        poReader->Reset();/* ==================================================================== *//*      Read all record groups in the file.                             *//* ==================================================================== */    while( TRUE )    {/* -------------------------------------------------------------------- *//*      Read a record group                                             *//* -------------------------------------------------------------------- */        if( poReader->GetNTFLevel() > 2 )            papoGroup = poReader->GetNextIndexedRecordGroup(papoGroup);        else            papoGroup = poReader->ReadRecordGroup();        if( papoGroup == NULL || papoGroup[0]->GetType() == 99 )            break;        /* -------------------------------------------------------------------- *//*      Get the class corresponding to the anchor record.               *//* -------------------------------------------------------------------- */        NTFGenericClass *poClass = GetGClass( papoGroup[0]->GetType() );        char           **papszFullAttList = NULL;        poClass->nFeatureCount++;        /* -------------------------------------------------------------------- *//*      Loop over constituent records collecting attributes.            *//* -------------------------------------------------------------------- */        for( int iRec = 0; papoGroup[iRec] != NULL; iRec++ )        {            NTFRecord   *poRecord = papoGroup[iRec];            switch( poRecord->GetType() )            {              case NRT_ATTREC:              {                  char  **papszTypes, **papszValues;                  poReader->ProcessAttRec( poRecord, NULL,                                           &papszTypes, &papszValues );                  for( int iAtt = 0; papszTypes[iAtt] != NULL; iAtt++ )                  {                      NTFAttDesc        *poAttDesc;                      poAttDesc = poReader->GetAttDesc( papszTypes[iAtt] );                      if( poAttDesc != NULL )                      {                          poClass->CheckAddAttr( poAttDesc->val_type,                                                 poAttDesc->finter,                                                 strlen(papszValues[iAtt]) );                      }                      if( CSLFindString( papszFullAttList,                                          papszTypes[iAtt] ) == -1 )                          papszFullAttList =                               CSLAddString( papszFullAttList,                                             papszTypes[iAtt] );                      else                          poClass->SetMultiple( poAttDesc->val_type );                  }                  CSLDestroy( papszTypes );                  CSLDestroy( papszValues );              }              break;              case NRT_TEXTREP:              case NRT_NAMEPOSTN:                poClass->CheckAddAttr( "FONT", "I4", 4 );                poClass->CheckAddAttr( "TEXT_HT", "R3,1", 3 );                poClass->CheckAddAttr( "TEXT_HT_GROUND", "R9,3", 9 );                poClass->CheckAddAttr( "TEXT_HT", "R3,1", 3 );                poClass->CheckAddAttr( "DIG_POSTN", "I1", 1 );                poClass->CheckAddAttr( "ORIENT", "R4,1", 4 );                break;              case NRT_NAMEREC:                poClass->CheckAddAttr( "TEXT", "A*",                                       atoi(poRecord->GetField(13,14)) );                break;              case NRT_GEOMETRY:              case NRT_GEOMETRY3D:                  if( atoi(poRecord->GetField(3,8)) != 0 )                      poClass->CheckAddAttr( "GEOM_ID", "I6", 6 );                  if( poRecord->GetType() == NRT_GEOMETRY3D )                      poClass->b3D = TRUE;                  break;              case NRT_POINTREC:              case NRT_LINEREC:                if( poReader->GetNTFLevel() < 3 )                {                    NTFAttDesc  *poAttDesc;                                          poAttDesc = poReader->GetAttDesc(poRecord->GetField(9,10));                    if( poAttDesc != NULL )                        poClass->CheckAddAttr( poAttDesc->val_type,                                               poAttDesc->finter, 6 );                    if( !EQUAL(poRecord->GetField(17,20),"    ") )                        poClass->CheckAddAttr( "FEAT_CODE", "A4", 4 );                }                break;                              default:                break;            }        }        CSLDestroy( papszFullAttList );    }    if( GetOption("CACHING") != NULL        && EQUAL(GetOption("CACHING"),"OFF") )        poReader->DestroyIndex();    poReader->Reset();}/************************************************************************//*                        AddGenericAttributes()                        *//************************************************************************/static void AddGenericAttributes( NTFFileReader * poReader,                                  NTFRecord **papoGroup,                                  OGRFeature * poFeature ){    char        **papszTypes, **papszValues;    if( !poReader->ProcessAttRecGroup( papoGroup, &papszTypes, &papszValues ) )        return;    for( int iAtt = 0; papszTypes != NULL && papszTypes[iAtt] != NULL; iAtt++ )    {        int             iField;                if( EQUAL(papszTypes[iAtt],"TX") )            iField = poFeature->GetFieldIndex("TEXT");        else if( EQUAL(papszTypes[iAtt],"FC") )            iField = poFeature->GetFieldIndex("FEAT_CODE");        else            iField = poFeature->GetFieldIndex(papszTypes[iAtt]);        if( iField == -1 )            continue;        poReader->ApplyAttributeValue( poFeature, iField, papszTypes[iAtt],                                       papszTypes, papszValues );/* -------------------------------------------------------------------- *//*      Do we have a corresponding list field we should be              *//*      accumulating this into?                                         *//* -------------------------------------------------------------------- */        char  szListName[128];        int   iListField;        sprintf( szListName, "%s_LIST",                  poFeature->GetFieldDefnRef(iField)->GetNameRef() );        iListField = poFeature->GetFieldIndex( szListName );/* -------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产**网站演员| 91视频免费播放| 国产精品一区二区久激情瑜伽 | 日本一区免费视频| 亚洲精品国产视频| 国产一区二区视频在线播放| 色网综合在线观看| 国产亚洲综合色| 亚洲电影视频在线| 99vv1com这只有精品| 久久综合资源网| 日韩av网站免费在线| 色哟哟在线观看一区二区三区| 久久久五月婷婷| 免费成人性网站| 欧美日韩综合不卡| 一区二区三区不卡在线观看| 福利一区二区在线| 久久久激情视频| 国内外成人在线视频| 91精品欧美福利在线观看| 亚洲综合色网站| 91在线码无精品| 亚洲国产精品久久久久秋霞影院| 国产精品影视在线| 26uuu国产电影一区二区| 男人的j进女人的j一区| 欧美日韩一区二区在线观看视频 | 在线播放日韩导航| 亚洲午夜久久久| 欧美视频一区二区三区四区| 亚洲精品第1页| 91影院在线观看| 中文字幕一区二区三| 成人精品电影在线观看| 国产欧美精品国产国产专区| 国产伦精品一区二区三区免费| 欧美成人精品高清在线播放| 免费av成人在线| 日韩欧美激情在线| 精品制服美女丁香| 国产欧美一区视频| 成人免费视频一区二区| 欧美激情一区二区三区蜜桃视频| 国内精品久久久久影院薰衣草 | 欧美亚洲国产一卡| 亚洲福利视频三区| 7777精品久久久大香线蕉| 日韩二区三区在线观看| 欧美一区二区在线看| 麻豆国产精品777777在线| 久久网站最新地址| av成人老司机| 五月天激情小说综合| 91精品国产综合久久久久 | 亚洲444eee在线观看| 欧美久久久久中文字幕| 蜜臀久久久久久久| 日韩女优电影在线观看| 国产999精品久久| 日韩毛片一二三区| 欧美精品亚洲二区| 国产黄色精品网站| 一区二区三区中文免费| 日韩一区二区在线观看| 99国产精品国产精品毛片| 亚洲午夜免费福利视频| 久久嫩草精品久久久精品| 91在线一区二区三区| 日本午夜一本久久久综合| 久久久高清一区二区三区| 欧美亚一区二区| 国产自产视频一区二区三区| 一区二区三区在线看| xnxx国产精品| 欧美自拍丝袜亚洲| 国产精品一区二区三区乱码| 亚洲444eee在线观看| 欧美国产乱子伦| 欧美又粗又大又爽| 国产成人免费高清| 免费在线观看不卡| 亚洲一区二区三区在线看| 国产亚洲一区字幕| 91精品国产福利| 色婷婷亚洲综合| 国产精品一品视频| 水野朝阳av一区二区三区| 视频一区二区三区入口| 国产精品视频免费看| 制服丝袜亚洲精品中文字幕| 97精品久久久午夜一区二区三区 | 一区二区三区免费看视频| 久久美女艺术照精彩视频福利播放 | 欧美视频一二三区| 成人美女视频在线观看18| 美女视频网站黄色亚洲| 亚洲成人免费视频| 一区二区三区成人在线视频| 国产精品麻豆欧美日韩ww| 亚洲精品一区二区三区在线观看 | 高清不卡在线观看| 久久99精品久久久久久| 香蕉av福利精品导航| 亚洲精品大片www| 日韩毛片视频在线看| 中文字幕中文字幕一区二区| 久久久久久久久久美女| 日韩精品一区在线| 欧美军同video69gay| 欧美日韩精品综合在线| 在线观看av一区二区| 色综合久久天天综合网| 91久久精品网| 欧美中文字幕一区二区三区 | 一二三四区精品视频| 亚洲精品国产品国语在线app| 亚洲人成网站在线| 一区二区三区中文在线观看| 亚洲一区二区在线免费观看视频 | 精品亚洲porn| 国产又黄又大久久| 国产精品资源网| 国产ts人妖一区二区| 国产mv日韩mv欧美| 91丨九色丨国产丨porny| 一本一本久久a久久精品综合麻豆| 91欧美一区二区| 欧美天堂亚洲电影院在线播放| 欧美视频一区二区三区四区| 欧美一区二区网站| 精品99999| 国产精品久久久久久久久免费樱桃| 成人免费视频在线观看| 亚洲夂夂婷婷色拍ww47| 日本午夜一本久久久综合| 精品一区中文字幕| 成人动漫在线一区| 欧洲在线/亚洲| 日韩精品一区二区三区在线播放| 337p日本欧洲亚洲大胆精品| 国产精品久久久久久久久久免费看| 亚洲三级免费电影| 丝袜亚洲另类欧美| 国内精品视频一区二区三区八戒| 成人免费电影视频| 欧美亚洲综合另类| 日韩免费一区二区| 亚洲欧洲精品成人久久奇米网| 亚洲国产精品久久艾草纯爱| 精品亚洲国产成人av制服丝袜| av综合在线播放| 日韩一级片网站| 国产精品网站导航| 日韩专区一卡二卡| 成人高清免费在线播放| 欧美精品vⅰdeose4hd| 国产欧美视频在线观看| 亚洲一区二区三区影院| 国产剧情一区在线| 欧美午夜精品久久久久久孕妇| 精品精品国产高清a毛片牛牛| 亚洲人吸女人奶水| 精品一区二区三区免费视频| 色哟哟精品一区| 国产日韩欧美电影| 日韩黄色一级片| 99久久精品免费看| 精品久久久久香蕉网| 综合网在线视频| 国产中文一区二区三区| 欧美在线影院一区二区| 久久久久国产免费免费| 美女高潮久久久| 色综合av在线| 国产精品久久久久影院色老大| 青青草原综合久久大伊人精品优势| av亚洲精华国产精华| 久久婷婷综合激情| 另类成人小视频在线| 欧美性猛片xxxx免费看久爱| 国产精品卡一卡二| 国产成人综合在线| 精品成人免费观看| 日本美女视频一区二区| 欧美在线免费观看亚洲| 亚洲天堂2016| 成人h动漫精品一区二| 国产亚洲视频系列| 精品亚洲国内自在自线福利| 欧美一区二区三区白人| 日本女人一区二区三区| 欧美精品aⅴ在线视频| 亚洲黄色在线视频| 欧洲国产伦久久久久久久| 亚洲黄色性网站| 欧美最猛性xxxxx直播| 亚洲国产精品久久久久婷婷884| 91成人国产精品| 一区二区三区欧美在线观看|