示例#1
0
        public static RPoint ToUnit(PointF screenpoint, UcMapControl mapCtrl)
        {
            float panoffsetX = mapCtrl.m_panOffset.X + mapCtrl.m_dragOffset.X;
            float panoffsetY = mapCtrl.m_panOffset.Y + mapCtrl.m_dragOffset.Y;
            float xpos       = (screenpoint.X - panoffsetX) / (m_screenResolution * mapCtrl.Zoom);
            float ypos       = mapCtrl.ScreenHeight() - ((screenpoint.Y - panoffsetY)) / (m_screenResolution * mapCtrl.Zoom);

            return(new RPoint(xpos, ypos, 0));
        }
示例#2
0
        public static PointF ToScreen(RPoint pt, UcMapControl mapCtrl)
        {
            PointF transformedPoint = new PointF((float)pt.X, (float)pt.Y);

            transformedPoint.Y  = mapCtrl.ScreenHeight() - transformedPoint.Y; //将Unit坐标系转换为屏幕坐标系,Y轴反向,此时Y坐标为屏幕坐标系坐标
            transformedPoint.Y *= m_screenResolution * mapCtrl.Zoom;           //相对于屏幕原点放大
            transformedPoint.X *= m_screenResolution * mapCtrl.Zoom;

            transformedPoint.X += mapCtrl.m_panOffset.X + mapCtrl.m_dragOffset.X;
            transformedPoint.Y += mapCtrl.m_panOffset.Y + mapCtrl.m_dragOffset.Y;
            return(transformedPoint);
        }
示例#3
0
        public void StartDrawing(UcMapControl mapCtrl)
        {
            if (m_staticImage == null)
            {
                cliprectangle = mapCtrl.ClientRectangle;
                m_staticImage = new Bitmap(cliprectangle.Width, cliprectangle.Height);
                //  m_staticImage.Save("D:\\a.png", ImageFormat.Png);
                m_staticDirty = true;
            }
            System.Drawing.Drawing2D.SmoothingMode m_smoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
            //绘制在背景图片上
            BitMapGc = Graphics.FromImage(m_staticImage);
            BitMapGc.SmoothingMode = m_smoothingMode;
            BitMapGc.Clear(Color.White);
            //m_model.BackgroundLayer.Draw(dcStatic, r);
            //if (m_model.GridLayer.Enabled)
            //    m_model.GridLayer.Draw(dcStatic, r);
            //绘制十字丝
            RPoint rCenterPoint = new RPoint(0, 0, 0);
            PointF nullPoint    = Transform.ToScreen(rCenterPoint, mapCtrl);

            BitMapGc.DrawLine(Pens.Blue, nullPoint.X - 10, nullPoint.Y, nullPoint.X + 10, nullPoint.Y);
            BitMapGc.DrawLine(Pens.Blue, nullPoint.X, nullPoint.Y - 10, nullPoint.X, nullPoint.Y + 10);
            if (m_staticDirty)
            {
                m_staticDirty = false;
                List <ILayer> layers = mapCtrl.mMap.Layers;
                for (int layerindex = layers.Count - 1; layerindex >= 0; layerindex--)
                {
                    if (layers[layerindex].Visible)
                    {
                        layers[layerindex].Draw(this);
                    }
                }
            }
            if (NewObject != null)
            {
                if (NewObject is Polygon)
                {
                    SolidBrush brush  = new SolidBrush(Color.Blue);
                    SolidBrush brush2 = new SolidBrush(Color.Pink);
                    Pen        pen    = new Pen(brush2);
                    DrawPolygon2(BitMapGc, NewObject as Polygon, brush, pen, false);
                }
            }
            BitMapGc.Dispose();
        }
示例#4
0
 //将屏幕距离计算为Zoom等级下的地图距离
 public static double ToUnit(float screenvalue, UcMapControl mapCtrl)
 {
     return((double)screenvalue / (double)(m_screenResolution * mapCtrl.Zoom));
 }