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

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

?? vector.~cpp

?? 利用vc開發gis系統有用的可以下一下哈歡迎大家使用
?? ~CPP
字號:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Vector.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
//構造函數
TGisVectorLayer::TGisVectorLayer()
{
  m_lpPolygonList=NULL;
  m_nSelectID = -1;
}
//---------------------------------------------------------------------------
//析構函數
TGisVectorLayer::~TGisVectorLayer()
{
 if(m_lpPolygonList)
   {
    //釋放資源
    for(int i=0;i<m_lpPolygonList->Count;i++)
      {
       delete m_lpPolygonList->Items[i];
      }
    delete m_lpPolygonList;
   }
}
//---------------------------------------------------------------------------
//讀入Idris格式的矢量文件
BOOL TGisVectorLayer::OpenIdrisFile(AnsiString FileName)
{
  //首先讀入文件頭
  AnsiString DocFileName= ChangeFileExt(FileName,".dvc");
  TStringList *StringList1=new TStringList();
  StringList1->LoadFromFile(DocFileName);

  AnsiString type=StringList1->Strings[3].SubString(15,StringList1->Strings[4].Length()-13);
  if(type=="polygon")
    m_gisFileHeader.giType=GIS_POLYGON;
  else if(type=="point")
    m_gisFileHeader.giType=GIS_POINT;
  else
    m_gisFileHeader.giType=GIS_LINE;

  m_gisFileHeader.giMinX = StringList1->Strings[7].SubString(15,StringList1->Strings[7].Length()-13).ToDouble();
  m_gisFileHeader.giMaxX = StringList1->Strings[8].SubString(15,StringList1->Strings[8].Length()-13).ToDouble();
  m_gisFileHeader.giMinY = StringList1->Strings[9].SubString(15,StringList1->Strings[9].Length()-13).ToDouble();
  m_gisFileHeader.giMaxY = StringList1->Strings[10].SubString(15,StringList1->Strings[10].Length()-13).ToDouble();
  delete StringList1;

  TFileStream* File=new TFileStream(FileName,fmOpenRead);
  if(m_gisFileHeader.giType==GIS_POLYGON
    || m_gisFileHeader.giType==GIS_LINE)
  {
    m_lpPolygonList=new TList;
    float test[2];
    File->Read(test,8);
    do
    {
      LPGISPOLYGON polygon = new GISPOLYGON;
      polygon->point = new GISPOINT[test[1]];
      polygon->pPen = new TPen;
      polygon->pBrush = new TBrush;
      polygon->id=test[0];
      polygon->numberPoint=test[1];
      File->Read((float*)polygon->point ,4*2*test[1]);
      //計算多邊形的外包圍矩形
      polygon->outRect.x1=polygon->point[0].x;
      polygon->outRect.x2=polygon->point[0].x;
      polygon->outRect.y1=polygon->point[0].y;
      polygon->outRect.y2=polygon->point[0].y;
      for(int i=1;i<test[1];i++)
      {
        if(polygon->outRect.x1>polygon->point[i].x)
        polygon->outRect.x1=polygon->point[i].x;
        if(polygon->outRect.x2<polygon->point[i].x)
          polygon->outRect.x2=polygon->point[i].x;
        if(polygon->outRect.y1>polygon->point[i].y)
          polygon->outRect.y1=polygon->point[i].y;
        if(polygon->outRect.y2<polygon->point[i].y)
          polygon->outRect.y2=polygon->point[i].y;
      }
      m_lpPolygonList->Add (polygon);
      File->Read(test,8);
    }while(test[0]!=0 && test[1]!=0);
  }
  delete File;
  return TRUE;
}
//---------------------------------------------------------------------------
//繪制函數
void TGisVectorLayer::Draw(TCanvas* canvas,GISRECT SourceRect,TRect DestRect)
{
 m_DrawRect=DestRect;
 m_gisSourceRect=SourceRect;
 m_canvas=canvas;

 m_ratioX=DestRect.Width() /(SourceRect.x2-SourceRect.x1);
 m_ratioY=DestRect.Height()/(SourceRect.y2-SourceRect.y1);

 canvas->Brush->Color=clBlack;
 if(m_gisFileHeader.giType==GIS_POLYGON
    || m_gisFileHeader.giType==GIS_LINE)
 {
  for(int i=0;i<m_lpPolygonList->Count;i++)
  {
   LPGISPOLYGON polygon=(GISPOLYGON*)m_lpPolygonList->Items[i];
   DrawAPolygon(polygon,SourceRect,DestRect);
   if(i == m_nSelectID)
   {
     DrawSelectPolygon(SourceRect,DestRect);
   }
  }
 }
}
//---------------------------------------------------------------------------
//繪制一個多邊形
void TGisVectorLayer::DrawAPolygon(LPGISPOLYGON polygon,GISRECT SourceRect,TRect DestRect)
{
   int pointCount=polygon->numberPoint ;
   TPoint* points = new TPoint[pointCount];
   for(int i=0; i<pointCount; i++)
   {
     points[i].x = m_ratioX*(polygon->point[i].x-SourceRect.x1);
     points[i].y = DestRect.Height()-m_ratioY*(polygon->point[i].y-SourceRect.y1);
   }

   m_canvas->Pen->Style = polygon->pPen->Style;
   m_canvas->Pen->Width = polygon->pPen->Width;
   m_canvas->Pen->Color = polygon->pPen->Color;
   m_canvas->Brush->Style = polygon->pBrush->Style;
   m_canvas->Brush->Color = polygon->pBrush->Color;
   if(polygon->pBrush->Bitmap)
   {
     m_canvas->Brush->Bitmap = polygon->pBrush->Bitmap;
   }
   m_canvas->Polygon(points, pointCount-1);
   //   m_canvas->Polyline(points, pointCount-1);
   delete points;
}
//---------------------------------------------------------------------------
//用于判斷一個點是否在一個多邊形中
//返回TRUE:表示點在多邊形中,否則點不在多邊形中
BOOL TGisVectorLayer::PointIsInPolygon(LPGISPOLYGON polygon,GISPOINT point)
{
 //如果點在多邊形的外包圍矩形外,那么肯定沒有交點
 if(   point.x < polygon->outRect.x1
    || point.x > polygon->outRect.x2
    || point.y < polygon->outRect.y1
    || point.y > polygon->outRect.y2)
    return FALSE;

 int count=0;
 for(int i=0;i<polygon->numberPoint-1;i++)
 {
  GISLINE tempLine(polygon->point[i].x,
                   polygon->point[i].y,
                   polygon->point[i+1].x,
                   polygon->point[i+1].y);
  if(point.y < tempLine.Y1 && point.y < tempLine.Y2)
    continue;
  float a;
  float b;
  if(tempLine.X2==tempLine.X1)
    continue;
  a=(tempLine.Y2-tempLine.Y1)/(tempLine.X2-tempLine.X1);
  b=tempLine.Y1-a*tempLine.X1;
  float y=a*point.x+b;
  if(y<point.y
     && y<=(tempLine.Y1>tempLine.Y2 ? tempLine.Y1 : tempLine.Y2)
     && y>=(tempLine.Y1<tempLine.Y2? tempLine.Y1 : tempLine.Y2)
     && point.x<=(tempLine.X1>tempLine.X2 ? tempLine.X1 : tempLine.X2)
     && point.x>=(tempLine.X1<tempLine.X2 ? tempLine.X1 : tempLine.X2))
    count++;
 }

 if(count%2)
   return TRUE;
 else
   return FALSE;
}
//---------------------------------------------------------------------------
//將行列值的坐標變換成X、Y值坐標
GISPOINT TGisVectorLayer::TPointToGisPoint(TPoint SourcePoint)
{
 GISPOINT point;
 point.x= SourcePoint.x/m_ratioX + m_gisFileHeader.giMinX;
 point.y= (m_DrawRect.Height()-SourcePoint.y)/m_ratioY + m_gisFileHeader.giMinY;
 return point;
}
//---------------------------------------------------------------------------
//選擇多邊形函數
void TGisVectorLayer::SelectPolygon(TPoint SourcePoint)
{
 for(int i=0;i<m_lpPolygonList->Count;i++)
 {
  GISPOINT point=TPointToGisPoint(SourcePoint);
  if(PointIsInPolygon((GISPOLYGON*)(m_lpPolygonList->Items[i]),point))
  {
   m_nSelectID = i;
   return;
  }
 }

 m_nSelectID = -1;
}
//---------------------------------------------------------------------------
void TGisVectorLayer::DrawSelPlyWithBitmap(GISRECT SourceRect,TRect DestRect)
{/*
    Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
    try
    {
      LPGISPOLYGON polygon = (GISPOLYGON*)m_lpPolygonList->Items[m_nSelectID];
      int pointCount=polygon->numberPoint ;
      BrushBmp->LoadFromFile(m_strBitmapFileName);
      m_canvas->Brush->Bitmap = BrushBmp;
      TPoint* points = new TPoint[pointCount];
   for(int i=0; i<pointCount; i++)
   {
     points[i].x=ratioX*(polygon->point[i].x-SourceRect.x1);
     points[i].y=DestRect.Height()-ratioY*(polygon->point[i].y-SourceRect.y1);
   }
   m_canvas->Polygon(points, pointCount-1);
   delete points;
      m_canvas->Brush->Bitmap = NULL;
    }
    __finally
    {
      m_canvas->Brush->Bitmap = NULL;
      delete BrushBmp;
    }               */
}
//---------------------------------------------------------------------------
void TGisVectorLayer::DrawSelectPolygon(GISRECT SourceRect,TRect DestRect)
{
  TColor oldColor = m_canvas->Brush->Color; //保存原畫刷顏色
  LPGISPOLYGON polygon = (GISPOLYGON*)m_lpPolygonList->Items[m_nSelectID];
  //在本次所選擇的多邊形中填充紅色
  m_canvas->Brush->Color=clRed;
  int pointCount=polygon->numberPoint ;
  TPoint* points = new TPoint[pointCount];
  for(int i=0; i<pointCount; i++)
  {
    points[i].x=m_ratioX*(polygon->point[i].x-SourceRect.x1);
    points[i].y=DestRect.Height()-m_ratioY*(polygon->point[i].y-SourceRect.y1);
  }
  m_canvas->Pen->Style = polygon->pPen->Style;
  m_canvas->Pen->Width = polygon->pPen->Width;
  m_canvas->Pen->Color = polygon->pPen->Color;
  m_canvas->Polygon(points, pointCount-1);
  delete points;
  m_canvas->Brush->Color=oldColor; //恢復使用原畫刷顏色
}
//---------------------------------------------------------------------------
void TGisVectorLayer::SetBitmapBrush(AnsiString strBitmapFile)
{
  LPGISPOLYGON polygon = (GISPOLYGON*)m_lpPolygonList->Items[m_nSelectID];
  Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
  BrushBmp->LoadFromFile(strBitmapFile);
  polygon->pBrush->Bitmap = BrushBmp;
}
//---------------------------------------------------------------------------
//將圖形坐標的點轉換成屏幕坐標
TPoint TGisVectorLayer:: GisPointToTPoint(GISPOINT SourcePoint)
{
  TPoint point;
  point.x = (SourcePoint.x - m_gisFileHeader.giMinX)*m_ratioX;
  point.y = m_DrawRect.Height() - (SourcePoint.y - m_gisFileHeader.giMinY)*m_ratioY;
  return point;
}
//---------------------------------------------------------------------------
//將圖形坐標中的矩形轉變為屏幕坐標
TRect  TGisVectorLayer::GisRectToTRect(GISRECT SourceRect)
{
  GISPOINT pt1, pt2;
  pt1.x = SourceRect.x1;
  pt1.y = SourceRect.y1;
  pt2.x = SourceRect.x2;
  pt2.y = SourceRect.y2;
  TPoint point1, point2;
  point1 = GisPointToTPoint(pt1);
  point2 = GisPointToTPoint(pt2);
  return TRect(point1,point2);
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品一区二区三区电影天堂 | 色悠悠亚洲一区二区| 久久不见久久见免费视频7| 亚洲一级电影视频| 一区二区三区日韩在线观看| 亚洲免费伊人电影| 亚洲精品欧美综合四区| 亚洲一区二区三区中文字幕 | 久99久精品视频免费观看| 五月激情丁香一区二区三区| 亚洲动漫第一页| 婷婷丁香久久五月婷婷| 麻豆91精品视频| 国产麻豆日韩欧美久久| 成人小视频在线观看| 97久久精品人人做人人爽| 91国模大尺度私拍在线视频| 欧美日韩视频第一区| 欧美一级高清大全免费观看| 久久无码av三级| 中文字幕一区二区三区在线不卡| 亚洲精选免费视频| 日韩中文字幕一区二区三区| 奇米777欧美一区二区| 国产伦精品一区二区三区免费迷 | 国产精品天干天干在线综合| 中文字幕亚洲在| 偷拍一区二区三区| 久久精品国产久精国产| 成人免费va视频| 4438x成人网最大色成网站| 久久婷婷国产综合国色天香 | 日本成人在线不卡视频| 国产成人精品免费一区二区| 91久久精品一区二区二区| 56国语精品自产拍在线观看| 国产日韩欧美精品电影三级在线| 亚洲女女做受ⅹxx高潮| 蜜桃久久av一区| 色天使色偷偷av一区二区| 精品国产1区2区3区| 亚洲嫩草精品久久| 激情综合色综合久久| 色狠狠色噜噜噜综合网| 国产欧美日韩另类一区| 日韩va欧美va亚洲va久久| 成人av免费在线观看| 日韩午夜精品电影| 亚洲一区二区三区在线| www.日本不卡| 久久天天做天天爱综合色| 午夜不卡av在线| 在线观看亚洲精品视频| 国产女人18毛片水真多成人如厕 | 久久精品一级爱片| 五月激情丁香一区二区三区| 99精品视频在线观看免费| 久久久久综合网| 久久精品免费观看| 在线不卡免费av| 亚洲综合一区二区| 色中色一区二区| 亚洲欧美aⅴ...| 99re这里都是精品| 亚洲人成网站精品片在线观看| 国产成人综合亚洲网站| 日韩精品一区在线| 男人的天堂亚洲一区| 欧美亚洲国产一卡| 一区二区三区电影在线播| 99精品欧美一区| 亚洲精品视频在线看| 91免费国产在线观看| 国产精品美女视频| 成人黄色小视频| 国产精品美女久久久久高潮| 福利一区二区在线| 国产精品你懂的在线欣赏| av电影在线观看完整版一区二区| 国产免费久久精品| av一二三不卡影片| 亚洲精品日日夜夜| 欧美亚洲一区三区| 日本网站在线观看一区二区三区| 欧美日韩精品免费| 青青草国产成人av片免费| 日韩写真欧美这视频| 久久99精品久久久久久动态图| www激情久久| 波多野结衣在线aⅴ中文字幕不卡| 中文一区一区三区高中清不卡| 白白色 亚洲乱淫| 亚洲综合色视频| 91精品国产综合久久蜜臀| 蜜桃av噜噜一区| 国产精品欧美一级免费| 色老汉av一区二区三区| 美腿丝袜亚洲色图| 国产精品视频在线看| 欧美又粗又大又爽| 麻豆国产精品官网| 综合激情网...| 91精品国产色综合久久久蜜香臀| 精品午夜久久福利影院| 中文字幕在线观看一区| 欧洲激情一区二区| 国产一区二区不卡| 亚洲精品视频在线| www欧美成人18+| 日本久久一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产精品国产三级国产专播品爱网 | 丁香一区二区三区| 亚洲综合在线五月| 久久久蜜桃精品| 欧美精品久久久久久久多人混战| 粉嫩aⅴ一区二区三区四区 | 97精品国产露脸对白| 日本视频一区二区| 亚洲欧美日韩系列| 久久综合九色综合97婷婷女人 | 99久久精品免费| 美腿丝袜亚洲综合| 亚洲一区二区三区三| 国产精品私人影院| 亚洲精品一区二区三区在线观看| 色94色欧美sute亚洲13| 国产福利精品一区二区| 免费av成人在线| 午夜欧美一区二区三区在线播放| 中文字幕va一区二区三区| 2020国产成人综合网| 欧美一区二区女人| 欧美亚洲丝袜传媒另类| 色久优优欧美色久优优| 99视频有精品| 成人免费视频播放| 国产一区二区91| 国产精品影视在线| 加勒比av一区二区| 全国精品久久少妇| 日韩中文字幕麻豆| 午夜久久久久久电影| 五月开心婷婷久久| 五月婷婷综合网| 蜜臀久久99精品久久久久久9| 亚洲成av人影院在线观看网| 亚洲精品国产无天堂网2021| 亚洲伦理在线精品| 亚洲免费在线观看| 亚洲视频在线观看一区| 中文字幕一区二| 中文字幕在线观看不卡| 中文字幕一区av| 亚洲一区二区三区四区在线观看 | 亚洲在线视频一区| 一区二区三区高清在线| 亚洲成人你懂的| 日韩中文字幕91| 久久精品国产免费| 成人综合婷婷国产精品久久蜜臀 | 亚洲黄色小说网站| 一区二区三区四区蜜桃| 亚洲精品免费电影| 亚洲成人tv网| 老司机精品视频在线| 国产资源在线一区| www.亚洲国产| 欧美日韩极品在线观看一区| 91精品国产综合久久福利软件| 精品久久国产老人久久综合| 国产亚洲精品精华液| 中文字幕一区二区三| 亚洲高清在线视频| 久久97超碰色| 不卡的电视剧免费网站有什么| 91亚洲国产成人精品一区二区三| 在线亚洲高清视频| 日韩精品一区二区三区中文不卡 | 久久99久久精品| 成人精品视频一区| 欧美午夜宅男影院| 精品久久人人做人人爰| 国产精品国产三级国产| 午夜一区二区三区在线观看| 精品一区免费av| 色噜噜狠狠成人中文综合| 欧美一级欧美三级在线观看| 中文字幕第一区| 久久精品99国产精品日本| 精品一区二区免费看| 91免费看片在线观看| 久久久国产精品午夜一区ai换脸 | 日韩一二三区视频| 成人欧美一区二区三区白人| 日韩av中文字幕一区二区三区| 成人高清免费在线播放| 日韩精品专区在线影院重磅| 自拍偷拍国产精品| 国内精品久久久久影院一蜜桃|