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

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

?? mitab_mapobjectblock.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
      case TAB_GEOM_ELLIPSE_C:
      case TAB_GEOM_ELLIPSE:
        poObj = new TABMAPObjRectEllipse;
        break;
      case TAB_GEOM_TEXT_C:
      case TAB_GEOM_TEXT:
        poObj = new TABMAPObjText;
        break;
      case TAB_GEOM_MULTIPOINT_C:
      case TAB_GEOM_MULTIPOINT:
      case TAB_GEOM_V800_MULTIPOINT_C:
      case TAB_GEOM_V800_MULTIPOINT:
        poObj = new TABMAPObjMultiPoint;
        break;
      case TAB_GEOM_COLLECTION_C:
      case TAB_GEOM_COLLECTION:
      case TAB_GEOM_V800_COLLECTION_C:
      case TAB_GEOM_V800_COLLECTION:
        poObj = new TABMAPObjCollection();
    break;
      default:
        CPLError(CE_Failure, CPLE_AssertionFailed, 
                 "TABMAPObjHdr::NewObj(): Unsupported object type %d",
                 nNewObjType);
    }

    if (poObj)
    {
        poObj->m_nType = nNewObjType;
        poObj->m_nId = nId;
        poObj->m_nMinX = poObj->m_nMinY = poObj->m_nMaxX = poObj->m_nMaxY = 0;
    }

    return poObj;
}


/**********************************************************************
 *                    TABMAPObjHdr::ReadNextObj()
 *
 * Read next object in this block and allocate/init a new object for it
 * if succesful.  
 * Returns NULL in case of error or if we reached end of block.
 **********************************************************************/
TABMAPObjHdr *TABMAPObjHdr::ReadNextObj(TABMAPObjectBlock *poObjBlock,
                                        TABMAPHeaderBlock *poHeader)
{
    TABMAPObjHdr *poObjHdr = NULL;

    if (poObjBlock->AdvanceToNextObject(poHeader) != -1)
    {
        poObjHdr=TABMAPObjHdr::NewObj(poObjBlock->GetCurObjectType());
        if (poObjHdr &&
            ((poObjHdr->m_nId = poObjBlock->GetCurObjectId()) == -1 ||
             poObjHdr->ReadObj(poObjBlock) != 0 ) )
        {
            // Failed reading object in block... an error was already produced
            delete poObjHdr;
            return NULL;
        }
    }

    return poObjHdr;
}

/**********************************************************************
 *                    TABMAPObjHdr::IsCompressedType()
 *
 * Returns TRUE if the current object type uses compressed coordinates
 * or FALSE otherwise.
 **********************************************************************/
GBool TABMAPObjHdr::IsCompressedType()
{
    // Compressed types are 1, 4, 7, etc.
    return ((m_nType % 3) == 1 ? TRUE : FALSE);
}

/**********************************************************************
 *                   TABMAPObjHdr::WriteObjTypeAndId()
 *
 * Writetype+object id information... should be called only by the derived
 * classes' WriteObj() methods.
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABMAPObjHdr::WriteObjTypeAndId(TABMAPObjectBlock *poObjBlock)
{
    poObjBlock->WriteByte(m_nType);
    return poObjBlock->WriteInt32(m_nId);
}

/**********************************************************************
 *                   TABMAPObjHdr::SetMBR()
 *
 **********************************************************************/
void TABMAPObjHdr::SetMBR(GInt32 nMinX, GInt32 nMinY, 
                          GInt32 nMaxX, GInt32 nMaxY)
{
    m_nMinX = MIN(nMinX, nMaxX);
    m_nMinY = MIN(nMinY, nMaxY);
    m_nMaxX = MAX(nMinX, nMaxX);
    m_nMaxY = MAX(nMinY, nMaxY);
}


/**********************************************************************
 *                   class TABMAPObjLine
 *
 * Applies to 2-points LINEs only
 **********************************************************************/

/**********************************************************************
 *                   TABMAPObjLine::ReadObj()
 *
 * Read Object information starting after the object id which should 
 * have been read by TABMAPObjHdr::ReadNextObj() already.
 * This function should be called only by TABMAPObjHdr::ReadNextObj().
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABMAPObjLine::ReadObj(TABMAPObjectBlock *poObjBlock)
{
    poObjBlock->ReadIntCoord(IsCompressedType(), m_nX1, m_nY1);
    poObjBlock->ReadIntCoord(IsCompressedType(), m_nX2, m_nY2);

    m_nPenId = poObjBlock->ReadByte();      // Pen index

    SetMBR(m_nX1, m_nY1, m_nX2, m_nY2);

    if (CPLGetLastErrorNo() != 0)
        return -1;

    return 0;
}

/**********************************************************************
 *                   TABMAPObjLine::WriteObj()
 *
 * Write Object information with the type+object id
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABMAPObjLine::WriteObj(TABMAPObjectBlock *poObjBlock)
{
    // Write object type and id
    TABMAPObjHdr::WriteObjTypeAndId(poObjBlock);

    poObjBlock->WriteIntCoord(m_nX1, m_nY1, IsCompressedType());
    poObjBlock->WriteIntCoord(m_nX2, m_nY2, IsCompressedType());

    poObjBlock->WriteByte(m_nPenId);      // Pen index

    if (CPLGetLastErrorNo() != 0)
        return -1;

    return 0;
}

/**********************************************************************
 *                   class TABMAPObjPLine
 *
 * Applies to PLINE, MULTIPLINE and REGION object types
 **********************************************************************/

/**********************************************************************
 *                   TABMAPObjPLine::ReadObj()
 *
 * Read Object information starting after the object id which should 
 * have been read by TABMAPObjHdr::ReadNextObj() already.
 * This function should be called only by TABMAPObjHdr::ReadNextObj().
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABMAPObjPLine::ReadObj(TABMAPObjectBlock *poObjBlock)
{
    m_nCoordBlockPtr = poObjBlock->ReadInt32();
    m_nCoordDataSize = poObjBlock->ReadInt32();

    if (m_nCoordDataSize & 0x80000000)
    {
        m_bSmooth = TRUE;
        m_nCoordDataSize &= 0x7FFFFFFF; //Take smooth flag out of the value
    }
    else
    {
        m_bSmooth = FALSE;
    }

#ifdef TABDUMP
    printf("TABMAPObjPLine::ReadObj: m_nCoordDataSize = %d @ %d\n", 
           m_nCoordDataSize, m_nCoordBlockPtr);
#endif

    // Number of line segments applies only to MULTIPLINE/REGION but not PLINE
    if (m_nType == TAB_GEOM_PLINE_C ||
        m_nType == TAB_GEOM_PLINE )
    {
        m_numLineSections = 1;
    }
    else if (m_nType == TAB_GEOM_V800_REGION ||
             m_nType == TAB_GEOM_V800_REGION_C ||
             m_nType == TAB_GEOM_V800_MULTIPLINE ||
             m_nType == TAB_GEOM_V800_MULTIPLINE_C )
    {
        /* V800 REGIONS/MULTIPLINES use an int32 */
        m_numLineSections = poObjBlock->ReadInt32();
        /* ... followed by 33 unknown bytes */
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadInt32();
        poObjBlock->ReadByte();
    }
    else
    {
        /* V300 and V450 REGIONS/MULTIPLINES use an int16 */
        m_numLineSections = poObjBlock->ReadInt16();
    }

#ifdef TABDUMP
    printf("PLINE/REGION: id=%d, type=%d, "
           "CoordBlockPtr=%d, CoordDataSize=%d, numLineSect=%d, bSmooth=%d\n",
           m_nId, m_nType, m_nCoordBlockPtr, m_nCoordDataSize, 
           m_numLineSections, m_bSmooth);
#endif

    if (IsCompressedType())
    {
        // Region center/label point, relative to compr. coord. origin
        // No it's not relative to the Object block center
        m_nLabelX = poObjBlock->ReadInt16();
        m_nLabelY = poObjBlock->ReadInt16();

        // Compressed coordinate origin (present only in compressed case!)
        m_nComprOrgX = poObjBlock->ReadInt32();
        m_nComprOrgY = poObjBlock->ReadInt32();

        m_nLabelX += m_nComprOrgX;
        m_nLabelY += m_nComprOrgY;

        m_nMinX = m_nComprOrgX + poObjBlock->ReadInt16();  // Read MBR
        m_nMinY = m_nComprOrgY + poObjBlock->ReadInt16();
        m_nMaxX = m_nComprOrgX + poObjBlock->ReadInt16();
        m_nMaxY = m_nComprOrgY + poObjBlock->ReadInt16();
    }
    else
    {
        // Region center/label point, relative to compr. coord. origin
        // No it's not relative to the Object block center
        m_nLabelX = poObjBlock->ReadInt32();
        m_nLabelY = poObjBlock->ReadInt32();

        m_nMinX = poObjBlock->ReadInt32();    // Read MBR
        m_nMinY = poObjBlock->ReadInt32();
        m_nMaxX = poObjBlock->ReadInt32();
        m_nMaxY = poObjBlock->ReadInt32();
    }


    if ( ! IsCompressedType() )
    {
        // Init. Compr. Origin to a default value in case type is ever changed
        m_nComprOrgX = (m_nMinX + m_nMaxX) / 2;
        m_nComprOrgY = (m_nMinY + m_nMaxY) / 2;
    }

    m_nPenId = poObjBlock->ReadByte();      // Pen index

    if (m_nType == TAB_GEOM_REGION ||
        m_nType == TAB_GEOM_REGION_C ||
        m_nType == TAB_GEOM_V450_REGION ||
        m_nType == TAB_GEOM_V450_REGION_C ||
        m_nType == TAB_GEOM_V800_REGION ||
        m_nType == TAB_GEOM_V800_REGION_C )
    {
        m_nBrushId = poObjBlock->ReadByte();    // Brush index... REGION only
    }
    else
    {
        m_nBrushId = 0;
    }

    if (CPLGetLastErrorNo() != 0)
        return -1;

    return 0;
}


/**********************************************************************
 *                   TABMAPObjPLine::WriteObj()
 *
 * Write Object information with the type+object id
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABMAPObjPLine::WriteObj(TABMAPObjectBlock *poObjBlock)
{
    // Write object type and id
    TABMAPObjHdr::WriteObjTypeAndId(poObjBlock);

    poObjBlock->WriteInt32(m_nCoordBlockPtr);

    // Combine smooth flag in the coord data size.
    if (m_bSmooth)
        poObjBlock->WriteInt32( m_nCoordDataSize | 0x80000000 );
    else
        poObjBlock->WriteInt32( m_nCoordDataSize );

    // Number of line segments applies only to MULTIPLINE/REGION but not PLINE
    if (m_nType == TAB_GEOM_V800_REGION ||
        m_nType == TAB_GEOM_V800_REGION_C ||
        m_nType == TAB_GEOM_V800_MULTIPLINE ||
        m_nType == TAB_GEOM_V800_MULTIPLINE_C )
    {
        /* V800 REGIONS/MULTIPLINES use an int32 */
        poObjBlock->WriteInt32(m_numLineSections);
        /* ... followed by 33 unknown bytes */
        poObjBlock->WriteZeros(33);
    }
    else if (m_nType != TAB_GEOM_PLINE_C &&
             m_nType != TAB_GEOM_PLINE )
    {
        /* V300 and V450 REGIONS/MULTIPLINES use an int16 */
        poObjBlock->WriteInt16(m_numLineSections);
    }

    if (IsCompressedType())
    {
        // Region center/label point, relative to compr. coord. origin
        // No it's not relative to the Object block center
        poObjBlock->WriteInt16(m_nLabelX - m_nComprOrgX);
        poObjBlock->WriteInt16(m_nLabelY - m_nComprOrgY);

        // Compressed coordinate origin (present only in compressed case!)
        poObjBlock->WriteInt32(m_nComprOrgX);
        poObjBlock->WriteInt32(m_nComprOrgY);
    }
    else
    {
        // Region center/label point
        poObjBlock->WriteInt32(m_nLabelX);
        poObjBlock->WriteInt32(m_nLabelY);
    }

    // MBR
    if (IsCompressedType())
    {
        // MBR relative to PLINE origin (and not object block center)
        poObjBlock->WriteInt16(m_nMinX - m_nComprOrgX);
        poObjBlock->WriteInt16(m_nMinY - m_nComprOrgY);
        poObjBlock->WriteInt16(m_nMaxX - m_nComprOrgX);
        poObjBlock->WriteInt16(m_nMaxY - m_nComprOrgY);
    }
    else
    {
        poObjBlock->WriteInt32(m_nMinX);
        poObjBlock->WriteInt32(m_nMinY);
        poObjBlock->WriteInt32(m_nMaxX);
        poObjBlock->WriteInt32(m_nMaxY);
    }

    poObjBlock->WriteByte(m_nPenId);      // Pen index

    if (m_nType == TAB_GEOM_REGION ||
        m_nType == TAB_GEOM_REGION_C ||
        m_nType == TAB_GEOM_V450_REGION ||
        m_nType == TAB_GEOM_V450_REGION_C ||
        m_nType == TAB_GEOM_V800_REGION ||
        m_nType == TAB_GEOM_V800_REGION_C )
    {
        poObjBlock->WriteByte(m_nBrushId);    // Brush index... REGION only
    }

    if (CPLGetLastErrorNo() != 0)
        return -1;

    return 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性久久久久久久久久久久| 日本成人在线电影网| 欧美一区二区免费视频| 激情图区综合网| 亚洲综合无码一区二区| 欧美精品一区二区不卡| 91国模大尺度私拍在线视频| 久久成人麻豆午夜电影| 亚洲资源中文字幕| 国产精品免费观看视频| 精品三级av在线| 欧美吻胸吃奶大尺度电影| 国产成人精品免费看| 偷窥少妇高潮呻吟av久久免费| 成人免费小视频| 久久伊99综合婷婷久久伊| 欧美日韩成人在线| 91香蕉视频mp4| 国产精品一区二区久激情瑜伽| 香蕉影视欧美成人| 亚洲精品成a人| 国产精品美女久久久久久2018| 日韩免费电影网站| 欧美一级片免费看| 欧美日免费三级在线| av不卡一区二区三区| 国产精品一二三四| 国产在线精品视频| 久久99精品国产| 免费观看在线色综合| 亚洲福利视频三区| 午夜精品一区二区三区免费视频| 亚洲欧洲中文日韩久久av乱码| 中文字幕精品在线不卡| 欧美激情中文字幕一区二区| 久久久久亚洲蜜桃| 久久蜜桃av一区二区天堂| 欧美成人一区二区| 欧美成人官网二区| 精品福利一区二区三区免费视频| 欧美一区二区三区免费大片| 这里只有精品99re| 欧美日韩在线不卡| 7777精品伊人久久久大香线蕉的| 欧美日本乱大交xxxxx| 欧美日韩国产精选| 欧美精品日日鲁夜夜添| 这里只有精品电影| 精品乱码亚洲一区二区不卡| 精品国产91乱码一区二区三区 | 捆绑紧缚一区二区三区视频| 日本aⅴ免费视频一区二区三区 | 国产在线精品一区二区三区不卡| 日本午夜一本久久久综合| 亚洲成人久久影院| 日韩高清一级片| 激情综合一区二区三区| 国产精品原创巨作av| 高潮精品一区videoshd| av亚洲精华国产精华精华| 99久久婷婷国产综合精品电影| 99久久er热在这里只有精品15| 97se亚洲国产综合在线| 欧美美女一区二区三区| 日韩一区二区电影网| 久久色中文字幕| 国产精品久久久久久久久图文区| 亚洲欧洲中文日韩久久av乱码| 亚洲福利电影网| 国模冰冰炮一区二区| 成人激情视频网站| 欧美日韩一级黄| 日韩一级二级三级精品视频| 欧美成人福利视频| 中文字幕一区二区三区蜜月| 亚洲啪啪综合av一区二区三区| 一区二区在线观看视频在线观看| 一区二区三区在线视频免费观看| 亚洲成在人线免费| 亚洲综合一二区| 激情av综合网| 成人动漫精品一区二区| 日本韩国欧美一区二区三区| 在线观看91精品国产入口| 欧美日韩国产一级二级| 亚洲精品一区二区三区四区高清| 国产亚洲综合av| 亚洲欧美日韩系列| 日韩有码一区二区三区| 久久99在线观看| 成人综合婷婷国产精品久久 | 丰满少妇在线播放bd日韩电影| 成人在线视频首页| 欧美在线观看禁18| 日韩欧美国产麻豆| 欧美国产一区二区| 婷婷久久综合九色综合伊人色| 狠狠色丁香婷婷综合| 波多野结衣视频一区| 91欧美激情一区二区三区成人| 欧美变态凌虐bdsm| 亚洲人精品午夜| 美女视频一区二区三区| 成人免费高清视频| 91精品国产91久久久久久一区二区 | 亚洲第一成人在线| 国产91丝袜在线播放| 欧美无砖专区一中文字| 精品日韩成人av| 亚洲成人av在线电影| 国产69精品久久久久毛片 | 国产一区二区h| 欧美做爰猛烈大尺度电影无法无天| 91精品国产欧美一区二区成人| 国产精品美女久久久久久久久 | 精品久久久久久久久久久久久久久 | 亚洲视频免费在线| 久久99精品久久久| 欧美日韩在线直播| 中文字幕第一页久久| 日本免费新一区视频| 91在线观看免费视频| 精品久久五月天| 日日夜夜精品视频天天综合网| 成人午夜激情片| 欧美xxxxxxxx| 午夜欧美视频在线观看| av在线这里只有精品| 精品久久久久久久久久久久久久久久久 | 欧美美女激情18p| 国产精品久久久久久户外露出 | 国产人久久人人人人爽| 三级在线观看一区二区| 色老汉一区二区三区| 国产精品免费av| 国产精品2024| 日韩女优毛片在线| 亚洲综合久久久久| 91在线观看视频| 亚洲欧美日韩电影| 成人福利在线看| 中文字幕成人在线观看| 国产一区 二区| 日韩欧美国产成人一区二区| 午夜精品久久久久久久99樱桃 | 奇米888四色在线精品| 欧美精品丝袜中出| 五月天激情综合| 欧美美女喷水视频| 水蜜桃久久夜色精品一区的特点 | 欧美午夜精品一区二区蜜桃| 中文字幕中文字幕在线一区| 高清国产午夜精品久久久久久| 国产亚洲午夜高清国产拍精品| 国内精品久久久久影院薰衣草 | 狠狠色丁香婷婷综合| 精品裸体舞一区二区三区| 极品少妇xxxx精品少妇| 精品国产自在久精品国产| 精品在线观看免费| 久久综合色鬼综合色| 国产一区二区不卡在线| 国产亚洲一区二区三区在线观看| 99精品在线观看视频| 亚洲丝袜精品丝袜在线| 欧美在线免费视屏| 天天做天天摸天天爽国产一区| 欧美日韩成人综合在线一区二区| 日日夜夜精品免费视频| 日韩丝袜情趣美女图片| 日韩中文字幕一区二区三区| 777午夜精品视频在线播放| 午夜视频在线观看一区二区 | 亚洲黄色免费网站| 欧美系列一区二区| 久久精品国产色蜜蜜麻豆| 欧美一区二区三级| 成人av综合在线| 亚洲一区二区三区精品在线| 欧美丰满高潮xxxx喷水动漫| 美女免费视频一区| 国产精品美女久久久久aⅴ国产馆| 99久久免费精品| 亚洲国产wwwccc36天堂| 欧美日韩午夜在线视频| 久久 天天综合| 国产精品美女久久久久久久久| 色呦呦网站一区| 日本麻豆一区二区三区视频| 欧美精品一区二区三区四区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 99精品视频一区| 中文字幕一区二区三区精华液 | 国产在线精品一区二区三区不卡| 一区二区三区在线免费播放| 日韩免费视频一区二区| www.久久久久久久久| 日韩va欧美va亚洲va久久| 国产欧美一区二区在线| 在线视频你懂得一区二区三区|