public override void OnMouseDown(int Button, int Shift, int X, int Y) { // 右键返回 if (Button == 2) { return; } if (m_pDongshiFeatureLayer == null) { return; } m_pPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_pPoint = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint); double angle = -1; string layerName = LayerNames.LAYER_ALIAS_MR_TUNNEL_FD; //巷道 pFeatLayer = drawSpecialCom.GetFeatureLayerByName(layerName); IFeature pFeature = null; TestExistPointFeature(m_hookHelper, m_pPoint, pFeatLayer, ref pFeature); if (pFeature == null) { MessageBox.Show(@"鼠标点击处没有巷道,请先选择一条巷道边线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //IPoint hightPoint= Snapping(m_pPoint, pFeatLayer, pFeature); //if (hightPoint.IsEmpty) //{ // MessageBox.Show("获取巷道边界失败,请重新选择", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; //} IProximityOperator proximityOperator = (IProximityOperator)pFeature.Shape; IPoint mousePoint = proximityOperator.ReturnNearestPoint(m_pPoint, esriSegmentExtension.esriNoExtension); IProximityOperator proximityOperator2 = (IProximityOperator)mousePoint; ISegmentCollection segmentCollection = (ISegmentCollection)pFeature.Shape; for (int i = 0; i < segmentCollection.SegmentCount; i++) { ISegmentCollection geometryCollection = new PolylineClass(); ISegment segment = segmentCollection.get_Segment(i); geometryCollection.AddSegment(segment); geometryCollection.SegmentsChanged(); var distance = proximityOperator2.ReturnDistance((IGeometry)geometryCollection); if (distance < 0.0001) { angle = ((ILine)segment).Angle; break; } } if (angle == -1) { MessageBox.Show(@"获取巷道边界失败,请重新选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //得到相应的中线 string hdid = pFeature.get_Value(pFeature.Fields.FindField(GIS_Const.FIELD_HDID)).ToString(); string bid = pFeature.get_Value(pFeature.Fields.FindField(GIS_Const.FIELD_BID)).ToString(); FormCaveSizeInput frmCaveSize = new FormCaveSizeInput(); frmCaveSize.ShowDialog(); if (frmCaveSize.DialogResult == DialogResult.OK) { //输入正确,获得硐室的长和宽 double Width = frmCaveSize.CaveWidth; double Height = frmCaveSize.CaveHeight; PointClass p0 = RectanglePoint(mousePoint, angle, Width); PointClass p1 = RectanglePoint(mousePoint, angle + Math.PI, Width); PointClass p2 = RectanglePoint2(p0, angle + 90 * Math.PI / 180, Height); PointClass p3 = RectanglePoint2(p1, angle + 90 * Math.PI / 180, Height); //绘制硐室 CreateDongShi(p0, p2, p3, p1, hdid, bid); } }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { // �Ҽ����� if (Button == 2) return; if (m_pDongshiFeatureLayer == null) return; m_pPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_pPoint = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint); double angle = -1; string layerName = LayerNames.LAYER_ALIAS_MR_TUNNEL_FD; //��� pFeatLayer = drawSpecialCom.GetFeatureLayerByName(layerName); IFeature pFeature = null; TestExistPointFeature(m_hookHelper, m_pPoint, pFeatLayer, ref pFeature); if (pFeature == null) { MessageBox.Show(@"�������û�����������ѡ��һ���������", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //IPoint hightPoint= Snapping(m_pPoint, pFeatLayer, pFeature); //if (hightPoint.IsEmpty) //{ // MessageBox.Show("��ȡ����߽�ʧ�ܣ�������ѡ��", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; //} IProximityOperator proximityOperator = (IProximityOperator)pFeature.Shape; IPoint mousePoint = proximityOperator.ReturnNearestPoint(m_pPoint, esriSegmentExtension.esriNoExtension); IProximityOperator proximityOperator2 = (IProximityOperator)mousePoint; ISegmentCollection segmentCollection = (ISegmentCollection)pFeature.Shape; for (int i = 0; i < segmentCollection.SegmentCount; i++) { ISegmentCollection geometryCollection = new PolylineClass(); ISegment segment = segmentCollection.get_Segment(i); geometryCollection.AddSegment(segment); geometryCollection.SegmentsChanged(); var distance = proximityOperator2.ReturnDistance((IGeometry)geometryCollection); if (distance < 0.0001) { angle = ((ILine)segment).Angle; break; } } if (angle == -1) { MessageBox.Show(@"��ȡ����߽�ʧ�ܣ�������ѡ��", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //�õ���Ӧ������ string hdid = pFeature.get_Value(pFeature.Fields.FindField(GIS_Const.FIELD_HDID)).ToString(); string bid = pFeature.get_Value(pFeature.Fields.FindField(GIS_Const.FIELD_BID)).ToString(); FormCaveSizeInput frmCaveSize = new FormCaveSizeInput(); frmCaveSize.ShowDialog(); if (frmCaveSize.DialogResult == DialogResult.OK) { //������ȷ��������ҵij��Ϳ� double Width = frmCaveSize.CaveWidth; double Height = frmCaveSize.CaveHeight; PointClass p0 = RectanglePoint(mousePoint, angle, Width); PointClass p1 = RectanglePoint(mousePoint, angle + Math.PI, Width); PointClass p2 = RectanglePoint2(p0, angle + 90 * Math.PI / 180, Height); PointClass p3 = RectanglePoint2(p1, angle + 90 * Math.PI / 180, Height); //�������� CreateDongShi(p0, p2, p3, p1, hdid, bid); } }