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)); }
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); }
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(); }
//将屏幕距离计算为Zoom等级下的地图距离 public static double ToUnit(float screenvalue, UcMapControl mapCtrl) { return((double)screenvalue / (double)(m_screenResolution * mapCtrl.Zoom)); }