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

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

?? mitab_utils.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/********************************************************************** * $Id: mitab_utils.cpp,v 1.20 2005/08/07 21:02:14 fwarmerdam Exp $ * * Name:     mitab_utils.cpp * Project:  MapInfo TAB Read/Write library * Language: C++ * Purpose:  Misc. util. functions for the library * Author:   Daniel Morissette, dmorissette@dmsolutions.ca * ********************************************************************** * Copyright (c) 1999-2001, Daniel Morissette * * 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. ********************************************************************** * * $Log: mitab_utils.cpp,v $ * Revision 1.20  2005/08/07 21:02:14  fwarmerdam * avoid warnings about testing for characters > 255. * * Revision 1.19  2004/06/30 20:29:04  dmorissette * Fixed refs to old address danmo@videotron.ca * * Revision 1.18  2002/08/28 14:19:22  warmerda * fix TABGetBasename() for mixture of path divider types like 'mi/abc\def.tab' * * Revision 1.17  2001/06/27 19:52:54  warmerda * avoid multi byte support if _WIN32 and unix defined for cygwin support * * Revision 1.16  2001/01/23 21:23:42  daniel * Added projection bounds lookup table, called from TABFile::SetProjInfo() * * Revision 1.15  2001/01/19 06:06:18  daniel * Don't filter chars in TABCleanFieldName() if we're on a DBCS system * * Revision 1.14  2000/09/28 16:39:44  warmerda * avoid warnings for unused, and unitialized variables * * Revision 1.13  2000/09/20 18:35:51  daniel * Fixed TABAdjustFilenameExtension() to also handle basename and path * using TABAdjustCaseSensitiveFilename() * * Revision 1.12  2000/04/18 04:19:22  daniel * Now accept extended chars with accents in TABCleanFieldName() * * Revision 1.11  2000/02/28 17:08:56  daniel * Avoid using isalnum() in TABCleanFieldName * * Revision 1.10  2000/02/18 20:46:35  daniel * Added TABCleanFieldName() * * Revision 1.9  2000/01/15 22:30:45  daniel * Switch to MIT/X-Consortium OpenSource license * * Revision 1.8  2000/01/14 23:46:59  daniel * Added TABEscapeString()/TABUnEscapeString() * * Revision 1.7  1999/12/16 06:10:24  daniel * TABGetBasename(): make sure last '/' of path is removed * * Revision 1.6  1999/12/14 02:08:37  daniel * Added TABGetBasename() + TAB_CSLLoad() * * Revision 1.5  1999/11/08 04:30:59  stephane * Modify TABGenerateArc() * * Revision 1.4  1999/09/29 17:59:21  daniel * Definition for PI was gone on Windows * * Revision 1.3  1999/09/16 02:39:17  daniel * Completed read support for most feature types * * Revision 1.2  1999/07/12 05:44:59  daniel * Added include math.h for VC++ * * Revision 1.1  1999/07/12 04:18:25  daniel * Initial checkin * **********************************************************************/#include "mitab.h"#include "mitab_utils.h"#include "cpl_conv.h"#include <math.h>       /* sin()/cos() */#include <ctype.h>      /* toupper()/tolower() */#if defined(_WIN32) && !defined(unix) && !defined(WIN32CE)#  include <mbctype.h>  /* Multibyte chars stuff */#endif/********************************************************************** *                       TABGenerateArc() * * Generate the coordinates for an arc and ADD the coordinates to the  * geometry object.  If the geometry already contains some points then * these won't be lost. * * poLine can be a OGRLineString or one of its derived classes, such as  *        OGRLinearRing * numPoints is the number of points to generate. * Angles are specified in radians, valid values are in the range [0..2*PI] * * Arcs are always generated counterclockwise, even if StartAngle > EndAngle * * Returns 0 on success, -1 on error. **********************************************************************/int TABGenerateArc(OGRLineString *poLine, int numPoints,                    double dCenterX, double dCenterY,                   double dXRadius, double dYRadius,                   double dStartAngle, double dEndAngle){    double dX, dY, dAngleStep, dAngle=0.0;    int i;    // Adjust angles to go counterclockwise    if (dEndAngle < dStartAngle)        dEndAngle += 2.0*PI;    dAngleStep = (dEndAngle-dStartAngle)/(numPoints-1.0);    for(i=0; i<numPoints; i++)    {        dAngle = (dStartAngle + (double)i*dAngleStep);        dX = dCenterX + dXRadius*cos(dAngle);        dY = dCenterY + dYRadius*sin(dAngle);        poLine->addPoint(dX, dY);    }    // Complete the arc with the last EndAngle, to make sure that     // the arc is correcly close.    dX = dCenterX + dXRadius*cos(dAngle);    dY = dCenterY + dYRadius*sin(dAngle);    poLine->addPoint(dX,dY);    return 0;}/********************************************************************** *                       TABCloseRing() * * Check if a ring is closed, and add a point to close it if necessary. * * Returns 0 on success, -1 on error. **********************************************************************/int TABCloseRing(OGRLineString *poRing){    if ( poRing->getNumPoints() > 0 && !poRing->get_IsClosed() )    {        poRing->addPoint(poRing->getX(0), poRing->getY(0));    }    return 0;}/********************************************************************** *                     TABAdjustCaseSensitiveFilename() * * Scan a filename and its path, adjust uppercase/lowercases if * necessary. * * Returns TRUE if file found, or FALSE if it could not be located with * a case-insensitive search. * * This function works on the original buffer and returns a reference to it. * It does nothing on Windows systems where filenames are not case sensitive. **********************************************************************/GBool TABAdjustCaseSensitiveFilename(char *pszFname){#ifdef _WIN32    /*-----------------------------------------------------------------     * Nothing to do on Windows     *----------------------------------------------------------------*/    return TRUE;#else    /*-----------------------------------------------------------------     * Unix case.     *----------------------------------------------------------------*/    VSIStatBuf  sStatBuf;    char        *pszTmpPath = NULL;    int         nTotalLen, iTmpPtr;    GBool       bValidPath;    /*-----------------------------------------------------------------     * First check if the filename is OK as is.     *----------------------------------------------------------------*/    if (VSIStat(pszFname, &sStatBuf) == 0)    {        return TRUE;    }    /*-----------------------------------------------------------------     * OK, file either does not exist or has the wrong cases... we'll     * go backwards until we find a portion of the path that is valid.     *----------------------------------------------------------------*/    pszTmpPath = CPLStrdup(pszFname);    nTotalLen = strlen(pszTmpPath);    iTmpPtr = nTotalLen;    bValidPath = FALSE;    while(iTmpPtr > 0 && !bValidPath)    {        /*-------------------------------------------------------------         * Move back to the previous '/' separator         *------------------------------------------------------------*/        pszTmpPath[--iTmpPtr] = '\0';        while( iTmpPtr > 0 && pszTmpPath[iTmpPtr-1] != '/' )        {            pszTmpPath[--iTmpPtr] = '\0';        }        if (iTmpPtr > 0 && VSIStat(pszTmpPath, &sStatBuf) == 0)            bValidPath = TRUE;    }    CPLAssert(iTmpPtr >= 0);    /*-----------------------------------------------------------------     * Assume that CWD is valid... so an empty path is a valid path     *----------------------------------------------------------------*/    if (iTmpPtr == 0)        bValidPath = TRUE;    /*-----------------------------------------------------------------     * OK, now that we have a valid base, reconstruct the whole path     * by scanning all the sub-directories.       * If we get to a point where a path component does not exist then     * we simply return the rest of the path as is.     *----------------------------------------------------------------*/    while(bValidPath && (int)strlen(pszTmpPath) < nTotalLen)    {        char    **papszDir=NULL;        int     iEntry, iLastPartStart;        iLastPartStart = iTmpPtr;        papszDir = CPLReadDir(pszTmpPath);        /*-------------------------------------------------------------         * Add one component to the current path         *------------------------------------------------------------*/        pszTmpPath[iTmpPtr] = pszFname[iTmpPtr];        iTmpPtr++;        for( ; pszFname[iTmpPtr] != '\0' && pszFname[iTmpPtr]!='/'; iTmpPtr++)        {            pszTmpPath[iTmpPtr] = pszFname[iTmpPtr];        }        while(iLastPartStart < iTmpPtr && pszTmpPath[iLastPartStart] == '/')            iLastPartStart++;        /*-------------------------------------------------------------         * And do a case insensitive search in the current dir...         *------------------------------------------------------------*/        for(iEntry=0; papszDir && papszDir[iEntry]; iEntry++)        {            if (EQUAL(pszTmpPath+iLastPartStart, papszDir[iEntry]))            {                /* Fount it! */                strcpy(pszTmpPath+iLastPartStart, papszDir[iEntry]);                break;            }        }        if (iTmpPtr > 0 && VSIStat(pszTmpPath, &sStatBuf) != 0)            bValidPath = FALSE;        CSLDestroy(papszDir);    }    /*-----------------------------------------------------------------     * We reached the last valid path component... just copy the rest     * of the path as is.     *----------------------------------------------------------------*/    if (iTmpPtr < nTotalLen-1)    {        strncpy(pszTmpPath+iTmpPtr, pszFname+iTmpPtr, nTotalLen-iTmpPtr);    }    /*-----------------------------------------------------------------     * Update the source buffer and return.     *----------------------------------------------------------------*/    strcpy(pszFname, pszTmpPath);    CPLFree(pszTmpPath);    return bValidPath;#endif}/********************************************************************** *                       TABAdjustFilenameExtension() * * Because Unix filenames are case sensitive and MapInfo datasets often have * mixed cases filenames, we use this function to find the right filename * to use ot open a specific file. * * This function works directly on the source string, so the filename it * contains at the end of the call is the one that should be used. * * Returns TRUE if one of the extensions worked, and FALSE otherwise. * If none of the extensions worked then the original extension will NOT be * restored. **********************************************************************/GBool TABAdjustFilenameExtension(char *pszFname){    VSIStatBuf  sStatBuf;    int         i;        /*-----------------------------------------------------------------     * First try using filename as provided     *----------------------------------------------------------------*/    if (VSIStat(pszFname, &sStatBuf) == 0)    {        return TRUE;    }         /*-----------------------------------------------------------------     * Try using uppercase extension (we assume that fname contains a '.')     *----------------------------------------------------------------*/    for(i = strlen(pszFname)-1; i >= 0 && pszFname[i] != '.'; i--)    {        pszFname[i] = toupper(pszFname[i]);    }    if (VSIStat(pszFname, &sStatBuf) == 0)    {        return TRUE;    }             /*-----------------------------------------------------------------     * Try using lowercase extension     *----------------------------------------------------------------*/    for(i = strlen(pszFname)-1; i >= 0 && pszFname[i] != '.'; i--)    {        pszFname[i] = tolower(pszFname[i]);    }    if (VSIStat(pszFname, &sStatBuf) == 0)    {        return TRUE;    }     

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品视频在线| 久久99久久久欧美国产| 日日夜夜精品视频天天综合网| 日韩av中文在线观看| 99久久精品国产导航| 69堂精品视频| 亚洲特级片在线| 激情综合网激情| 欧美天天综合网| 国产日本欧洲亚洲| 久久不见久久见免费视频1| 色哟哟国产精品免费观看| 久久午夜色播影院免费高清| 亚洲一区二区三区视频在线播放| 国产超碰在线一区| 日韩一二三区不卡| 亚洲一区二区三区中文字幕在线 | 国产91高潮流白浆在线麻豆| 欧美日韩亚洲综合一区| 国产精品色呦呦| 国产麻豆日韩欧美久久| 日韩免费看网站| 亚洲mv在线观看| 在线亚洲一区二区| 亚洲男人的天堂在线观看| 大白屁股一区二区视频| 亚洲精品在线电影| 久久99久久久欧美国产| 日韩欧美亚洲国产精品字幕久久久| 一区二区在线观看免费| 99re视频精品| 一区视频在线播放| 99久久国产综合色|国产精品| 久久久久国产精品厨房| 国产精品 欧美精品| 久久免费午夜影院| 国产99一区视频免费| 久久久高清一区二区三区| 国模一区二区三区白浆| 久久伊99综合婷婷久久伊| 久久99最新地址| 久久美女艺术照精彩视频福利播放| 久久国产精品色| 国产肉丝袜一区二区| 国产69精品久久久久毛片| 国产精品日产欧美久久久久| 成人精品视频网站| 亚洲欧美经典视频| 欧美视频一区二| 日韩激情视频在线观看| 日韩欧美国产精品| 成人va在线观看| 夜夜嗨av一区二区三区中文字幕 | 欧美成人激情免费网| 青青青伊人色综合久久| 欧美成人艳星乳罩| 国产精一品亚洲二区在线视频| 国产婷婷色一区二区三区四区 | 亚洲女同女同女同女同女同69| 色狠狠综合天天综合综合| 天天色图综合网| 久久久久国产成人精品亚洲午夜| 国产精品资源网站| 怡红院av一区二区三区| 欧美一区二区精品| 粉嫩av一区二区三区在线播放| 亚洲私人影院在线观看| 日韩欧美国产一区二区在线播放| 国产乱码精品一品二品| 亚洲欧洲精品一区二区精品久久久| 色综合婷婷久久| 久久99热这里只有精品| 亚洲丝袜制服诱惑| 日韩视频一区二区在线观看| 成人激情图片网| 日韩高清在线一区| 国产精品久久久久久久浪潮网站 | av不卡一区二区三区| 一区二区三区四区激情| 欧美sm美女调教| 99免费精品视频| 蜜桃精品在线观看| 国产精品超碰97尤物18| 日韩片之四级片| 一本一本大道香蕉久在线精品| 精品中文av资源站在线观看| 亚洲精品视频在线看| 久久女同性恋中文字幕| 在线播放国产精品二区一二区四区| 成人一级视频在线观看| 另类人妖一区二区av| 一区二区三区美女视频| 国产女主播在线一区二区| 欧美片在线播放| 色成年激情久久综合| 国产精品夜夜嗨| 久久国产剧场电影| 亚洲成人在线观看视频| 亚洲天堂2014| 亚洲视频一区二区在线观看| 欧美不卡视频一区| 在线不卡的av| 欧美日韩1234| 欧美性色欧美a在线播放| www.久久精品| 激情综合网天天干| 久久电影国产免费久久电影| 亚洲午夜激情网站| 亚洲福利一二三区| 亚洲国产综合色| 亚洲自拍偷拍av| 亚洲激情一二三区| 亚洲综合免费观看高清在线观看| 国产精品国产三级国产aⅴ原创 | 亚洲成人av福利| 亚洲午夜私人影院| 一区二区三区 在线观看视频| 亚洲三级免费电影| 国产精品全国免费观看高清| 中文字幕不卡的av| 国产亚洲精品7777| 欧美经典三级视频一区二区三区| 久久久高清一区二区三区| 久久久国产午夜精品 | 亚洲女子a中天字幕| 亚洲免费毛片网站| 亚洲国产视频在线| 五月天欧美精品| 久久99久久99小草精品免视看| 美国十次综合导航| 国产一区二区美女| 99国产精品一区| 91亚洲大成网污www| 日本高清不卡aⅴ免费网站| 欧美日韩一卡二卡| 欧美一区二区三区免费大片| 欧美大黄免费观看| 国产精品三级视频| 亚洲国产中文字幕在线视频综合| 亚洲最大色网站| 日韩av午夜在线观看| 精品一区二区综合| 97se狠狠狠综合亚洲狠狠| 91精彩视频在线观看| 91精品一区二区三区久久久久久 | 欧洲精品一区二区三区在线观看| 欧美日韩国产综合久久| 精品成人私密视频| 日韩美女啊v在线免费观看| 亚洲精品高清在线| 婷婷中文字幕一区三区| 国产在线国偷精品产拍免费yy| 波多野结衣一区二区三区| 欧美日韩精品系列| 国产欧美日韩综合| 亚洲在线视频网站| 国产高清不卡一区二区| 欧美影片第一页| 国产午夜精品一区二区| 一区二区三区中文字幕精品精品| 蜜桃一区二区三区在线观看| jlzzjlzz欧美大全| 欧美一级专区免费大片| 亚洲欧洲三级电影| 国内一区二区视频| 欧美日韩一区二区在线观看| 久久久不卡网国产精品一区| 亚洲激情五月婷婷| 黑人巨大精品欧美一区| 色88888久久久久久影院按摩| 精品欧美一区二区在线观看| 亚洲激情成人在线| 国产一区二区福利| 7777精品伊人久久久大香线蕉完整版| 久久夜色精品国产噜噜av| 亚洲一区国产视频| 91网站在线观看视频| 久久人人爽爽爽人久久久| 午夜精彩视频在线观看不卡| 成人精品免费看| 欧美不卡一二三| 日本不卡123| 精品视频1区2区3区| 亚洲精品伦理在线| 成人av在线播放网站| 欧美mv日韩mv| 天天操天天干天天综合网| 99re热这里只有精品免费视频| 久久免费视频色| 久久精品国产99| 欧美一区二区三区不卡| 亚洲大片精品永久免费| 欧美亚洲动漫制服丝袜| 中文字幕亚洲不卡| 成人激情开心网| 国产精品视频一二三区| 高清免费成人av| 中文字幕一区二区三区在线播放| 国产精品亚洲一区二区三区妖精 | 欧美综合在线视频|