Пример #1
0
        public override void OnKeyDown(int keyCode, int shift)
        {
            base.OnKeyDown(keyCode, shift);

            if (keyCode == 27)             //ESC 键,取消所有操作
            {
                Reset();

                this.Stop();
                WSGRI.DigitalFactory.Commands.ICommand command = DFApplication.Application.GetCommand("WSGRI.DigitalFactory.DF2DControl.cmdPan");
                if (command != null)
                {
                    command.Execute();
                }

                return;
            }

            if (keyCode == 13 || keyCode == 32)            //按ENTER、SPACEBAR键 开始绘制联合操作
            {
                DoUnion();

                return;
            }

            if (keyCode == 46)              //DEL键,删除选中的要素
            {
                CommonFunction.DelFeaturesFromArray(m_MapControl, ref m_FeatureArray);
                Reset();
                return;
            }
        }
Пример #2
0
        public override void OnKeyDown(int keyCode, int shift)
        {
            // TODO:  添加 DrawPolyline.OnKeyDown 实现
            base.OnKeyDown(keyCode, shift);

            IPoint tempPoint = new PointClass();

            tempPoint.X = m_pLastPoint.X;
            tempPoint.Y = m_pLastPoint.Y;

            if (keyCode == 72)            //按H键,绘制圆弧
            {
                if (m_drawType == 1)
                {
                    m_drawState = "Line_Arc";                  //绘制直线……圆弧
                }
                else if (m_drawType == 2)
                {
                    m_drawState = "Arc_Arc";                  //绘制圆弧……圆弧
                }

                return;
            }

            if (keyCode == 76)            //按L键,绘制直线
            {
                if (m_drawType == 1)
                {
                    m_drawState = "Line_Line";;                  //绘制直线……直线
                }
                else if (m_drawType == 2)
                {
                    m_drawState = "Line_Line";                  //绘制圆弧……直线
                }

                return;
            }

            if (keyCode == 84)            //按T键,绘制圆弧……切线
            {
                m_drawState = "Arc_TLine";

                return;
            }

            if (keyCode == 85)            //按U键,回退
            {
                Undo();

                return;
            }

            if (keyCode == 78 && m_pUndoArray.Count >= 2)          //按N键,输入左折角
            {
                frmLeftCorner fromFixLeftCorner = new frmLeftCorner();
                fromFixLeftCorner.ShowDialog();

                return;
            }

            if (keyCode == 79 && m_bInUse)            //按(O)orientation键,输入方向
            {
                frmFixAzim fromFixAzim = new frmFixAzim();
                fromFixAzim.ShowDialog();

                return;
            }

            if (keyCode == 68 && m_bInUse)            //按D键,输入固定长度
            {
                frmFixLength fromFixLength = new frmFixLength();
                fromFixLength.ShowDialog();

                return;
            }


            if (keyCode == 70 && m_bInUse)            //按F键,输入长度+方位角
            {
                frmLengthAzim.m_pPoint = tempPoint;
                frmLengthAzim fromLengthDirect = new frmLengthAzim();
                fromLengthDirect.ShowDialog();

                if (m_bInputWindowCancel == false)               //若用户没用取消输入
                {
                    DrawPolylineMouseDown(m_pAnchorPoint, m_drawState);
                }

                return;
            }

            if (keyCode == 65)             //按A键,输入绝对坐标
            {
                frmAbsXYZ.m_pPoint = m_pAnchorPoint;
                frmAbsXYZ formXYZ = new frmAbsXYZ();
                formXYZ.ShowDialog();
                if (m_bInputWindowCancel == false)               //若用户没用取消输入
                {
                    DrawPolylineMouseDown(m_pAnchorPoint, m_drawState);
                }

                return;
            }

            if (keyCode == 82 && m_bInUse)            //按R键,输入相对坐标
            {
                frmRelaXYZ.m_pPoint = tempPoint;      // m_pToPoint;
                frmRelaXYZ formRelaXYZ = new frmRelaXYZ();
                formRelaXYZ.ShowDialog();

                if (m_bInputWindowCancel == false)               //若用户没用取消输入
                {
                    DrawPolylineMouseDown(m_pAnchorPoint, m_drawState);
                }

                return;
            }

            if (keyCode == 80 && m_bInUse)            //按P键,生成平行线
            {
                m_pSegment  = null;
                m_bKeyCodeP = true;

                return;
            }

            if (keyCode == 83 && m_pUndoArray.Count >= 2)          //按S键,生成直角
            {
                m_bkeyCodeS = true;
                if (((IFeatureLayer)m_CurrentLayer).FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
                {
                    m_pLastFeedback = new NewLineFeedbackClass();
                    m_pLastLineFeed = (INewLineFeedback)m_pLastFeedback;
                    IPoint pStartPoint = ((PointStruct)m_pUndoArray.get_Element(0)).Point;
                    m_pLastLineFeed.Start(pStartPoint);
                }

                return;
            }

            if (keyCode == 67 && m_pUndoArray.Count >= 4)          //按C键,封闭结束绘制
            {
                IPoint pStartPoint = new PointClass();
                IPoint pEndPoint   = new PointClass();
                pStartPoint = ((PointStruct)m_pUndoArray.get_Element(0)).Point;
                pEndPoint   = ((PointStruct)m_pUndoArray.get_Element(m_pUndoArray.Count - 1)).Point;

                AddPointUndoArray(pEndPoint, 1, ref m_pUndoArray);
                AddPointUndoArray(pStartPoint, 1, ref m_pUndoArray);

                EndDrawPolyline();

                return;
            }


            if ((keyCode == 69 || keyCode == 13 || keyCode == 32) && m_bInUse)            //按E键、ENTER 键、SPACEBAR 键结束绘制
            {
                EndDrawPolyline();

                return;
            }

            if (keyCode == 27)             //ESC 键,取消所有操作
            {
                Reset();

                this.Stop();
                WSGRI.DigitalFactory.Commands.ICommand command = DFApplication.Application.GetCommand("WSGRI.DigitalFactory.DF2DControl.cmdPan");
                if (command != null)
                {
                    command.Execute();
                }

                return;
            }
        }