Fly

 

精确绘制线_SuperMap

SuperMap桌面软件中的精确十分诱人,但如何在二次开发中实现同样的效果呢?小测试了一下,发现效果不错,分享一下.

功能实现的两个主要事件为地图的MouseMoveEvent和文本框的文本值确定事件(测试采用当Y值文本框输入ENTER键时表示确定此点输入,当然这个事件可任意更改).

当鼠标在地图窗口移动时,确定X和Y坐标的文本框显示当前鼠标位置(事先将地图的操作设为画折线)。

if (axSuperMap1.Action == seAction.scaEditCreatePolyline)
            {
                double dX = axSuperMap1.PixelToMapX(e.x);
                double dY = axSuperMap1.PixelToMapY(e.y);
                txtX.Text = dX.ToString();
                txtY.Text = dY.ToString();
                txtX.SetBounds(e.x, e.y, 75, 21);
                txtY.SetBounds(e.x, e.y + 22, 75, 21);
                txtX.Visible = true;
                txtY.Visible = true;
                txtX.Focus();   //此处主要为方便更改X坐标值,输入ENTER或TAB键后txtY获得焦点,对txtY输入TAB键后txtX获得焦点,方便交互更改,代码没列出,这个切换应该是个小CASE。
                txtX.SelectAll();
            }

当对txtY文本框输入ENTER键时,默认为X、Y坐标都已确认。

private void txtY_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode ==Keys.Enter )
            {
                soPoint objPt = new soPointClass();
                objPt.x = double.Parse(txtX.Text);
                objPt.y = double.Parse(txtY.Text);
                axSuperMap1.AddTrackingPoint(objPt);  //此句为程序精华所在,SuperMap此方法只在交互式编辑时起到相应效果,若地图操作不处于交互式编辑状态,此行代码执行后地图上不会有任何反应。此得执行后即在地图上添加了一个折线上的点。
                axSuperMap1.Refresh();
                Marshal.ReleaseComObject(objPt);
                objPt = null;
            }           
        }

posted on 2009-03-28 14:03  Emily_Fly  阅读(1487)  评论(3编辑  收藏  举报

导航