|
|
|
|
using DevExpress.Xpf.Core;
|
|
|
|
|
using KGIS.Framework.Utils;
|
|
|
|
|
using KGIS.Framework.Utils.ExtensionMethod;
|
|
|
|
|
using Kingo.Plugin.EngineEditor.Model;
|
|
|
|
|
using KGIS.Framework.Utils.Helper;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows;
|
|
|
|
|
using System.Windows.Controls;
|
|
|
|
|
using System.Windows.Data;
|
|
|
|
|
using System.Windows.Documents;
|
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
using System.Windows.Media.Imaging;
|
|
|
|
|
using System.Windows.Navigation;
|
|
|
|
|
using System.Windows.Shapes;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.EngineEditor.Views
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// FrmDrawDoublePolyline.xaml 的交互逻辑
|
|
|
|
|
/// </summary>
|
|
|
|
|
public partial class FrmDrawDoublePolyline : DXWindow
|
|
|
|
|
{
|
|
|
|
|
private DrawParam DrawParam = new DrawParam();
|
|
|
|
|
public delegate void StartDrawHandler(DrawParam drawParam);
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 开始绘制事件
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event StartDrawHandler StartDrawEvent;
|
|
|
|
|
public FrmDrawDoublePolyline()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
//绘制方式(默认左右两边绘制)
|
|
|
|
|
DrawParam.DrawMode = DrawMode.LeftAndRight;
|
|
|
|
|
DrawParam.Width = 10;
|
|
|
|
|
DrawParam.OutType = "Polyline";
|
|
|
|
|
DrawParam.DLBM = "1004-城镇村道路用地";
|
|
|
|
|
//FrmDrawDoublePolyline fddpl = new FrmDrawDoublePolyline();
|
|
|
|
|
//fddpl.Show();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public FrmDrawDoublePolyline(DrawParam pDrawParam, int p = 0)
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
if (p == -1)
|
|
|
|
|
{
|
|
|
|
|
paraXWKD.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
spAutoCheckbox.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
//this.Height = 75;
|
|
|
|
|
}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// spAutoCheckbox.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
// this.Height = 95;
|
|
|
|
|
//}
|
|
|
|
|
List<DataDicTionary> dic = new List<DataDicTionary>();
|
|
|
|
|
dic.Add(new DataDicTionary() { CODE = "LeftAndRight", NAME = "中心线" });
|
|
|
|
|
dic.Add(new DataDicTionary() { CODE = "Left", NAME = "左边线" });
|
|
|
|
|
dic.Add(new DataDicTionary() { CODE = "Right", NAME = "右边线" });
|
|
|
|
|
combDrawMode.ItemsSource = dic;
|
|
|
|
|
//绘制方式(默认左右两边绘制)
|
|
|
|
|
this.DrawParam = pDrawParam;
|
|
|
|
|
if (string.IsNullOrWhiteSpace(this.DrawParam.DLBM))
|
|
|
|
|
{
|
|
|
|
|
this.DrawParam.DLBM = "1004-城镇村道路用地";
|
|
|
|
|
}
|
|
|
|
|
this.DataContext = this.DrawParam;
|
|
|
|
|
//记录之前选中过的地类编码
|
|
|
|
|
if (this.DrawParam != null && !string.IsNullOrWhiteSpace(this.DrawParam.DLBM))
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < cmbDL.Items.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
ComboBoxItem comBox = cmbDL.Items[i] as ComboBoxItem;
|
|
|
|
|
if (comBox.Content.Equals(DrawParam.DLBM))
|
|
|
|
|
{
|
|
|
|
|
cmbDL.SelectedIndex = i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.cbAutoClose.IsChecked = DrawParam.IsAutoClose;
|
|
|
|
|
this.cbAutoStep.IsChecked = DrawParam.IsAutoStep;
|
|
|
|
|
this.cbAutoTrack.IsChecked = DrawParam.IsAutoTrack;
|
|
|
|
|
//有记录值时再赋值,防止值变化导致变更事件判断错误
|
|
|
|
|
if (DrawParam.SetWidth >= 0.1 && DrawParam.SetWidth <= 10)
|
|
|
|
|
{
|
|
|
|
|
this.txtSetWidth.Text = DrawParam.SetWidth.ToString();
|
|
|
|
|
}
|
|
|
|
|
//给出DrawParam里微调值的默认值
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DrawParam.SetWidth = this.txtSetWidth.Text.Trim().ToDouble();
|
|
|
|
|
}
|
|
|
|
|
this.SetParam(false, true);
|
|
|
|
|
this.ShowInMainForm();
|
|
|
|
|
//this.spinScale.EditValue = this.DrawParam.ToloranceScale;
|
|
|
|
|
}
|
|
|
|
|
//public void SetVisible(bool isVisible)
|
|
|
|
|
//{
|
|
|
|
|
// if (isVisible)
|
|
|
|
|
// {
|
|
|
|
|
// cmbDL.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
// cbAutoClose.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// cbAutoClose.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
// cmbDL.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
public void SetParam(bool IsImgIdentity, bool IsPolygon)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (IsImgIdentity)
|
|
|
|
|
{
|
|
|
|
|
paraAutoIdentity.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
paraXWKD.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
paraAutoIdentity.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
paraXWKD.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
}
|
|
|
|
|
if (IsPolygon)
|
|
|
|
|
{
|
|
|
|
|
cmbDL.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
cbAutoClose.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cbAutoClose.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
cmbDL.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
}
|
|
|
|
|
if (!IsImgIdentity && IsPolygon)
|
|
|
|
|
{
|
|
|
|
|
laSetWidth.Visibility = System.Windows.Visibility.Visible;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
laSetWidth.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
//Common.Utility.LogAPI.Debug(ex);
|
|
|
|
|
|
|
|
|
|
LogAPI.Debug("画双线期间 设置参数 时异常,异常信息如下:");
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
LogAPI.Debug("画双线期间 设置参数 时异常信息结束");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 控制控件状态
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void RadioButton_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RadioButton btn = sender as RadioButton;
|
|
|
|
|
DrawParam.DrawMode = (DrawMode)System.Enum.Parse(typeof(DrawMode), btn.Tag.ToString());
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 开始绘制按钮事件
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btnStartDraw_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//DrawParam.IsAutoClose = cbAutoClose.IsChecked == true ? true : false;
|
|
|
|
|
if (StartDrawEvent != null)
|
|
|
|
|
{
|
|
|
|
|
StartDrawEvent(DrawParam);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OutTypeRadioButton_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RadioButton btn = sender as RadioButton;
|
|
|
|
|
DrawParam.OutType = btn.Tag.ToString();
|
|
|
|
|
switch (btn.Tag.ToString())
|
|
|
|
|
{
|
|
|
|
|
case "Polyline":
|
|
|
|
|
cbAutoClose.IsEnabled = true;
|
|
|
|
|
break;
|
|
|
|
|
case "Polygon":
|
|
|
|
|
cbAutoClose.IsEnabled = false;
|
|
|
|
|
cbAutoClose.IsChecked = true;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbAutoClose_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DrawParam.IsAutoClose = cbAutoClose.IsChecked == true ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void spinScale_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//this.DrawParam.ToloranceScale = (double)spinScale.Value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void combDrawMode_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//this.DrawParam.DrawMode = (DrawMode)Enum.Parse(typeof(DrawMode), combDrawMode.SelectedValue.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbAutoTrack_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (cbAutoTrack.IsChecked == true)
|
|
|
|
|
{
|
|
|
|
|
DrawParam.IsAutoTrack = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DrawParam.IsAutoTrack = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbAutoStep_Click(object sender, RoutedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (cbAutoStep.IsChecked == true)
|
|
|
|
|
{
|
|
|
|
|
DrawParam.IsAutoStep = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DrawParam.IsAutoStep = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cmbDL_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
ComboBoxItem item = (ComboBoxItem)cmbDL.Items[cmbDL.SelectedIndex];
|
|
|
|
|
if (item.Content != null)
|
|
|
|
|
{
|
|
|
|
|
DrawParam.DLBM = item.Content.ToString();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DrawParam.DLBM = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void paraWidth_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
decimal widthTxt = 10;
|
|
|
|
|
if (decimal.TryParse(paraWidth.Text, out widthTxt))
|
|
|
|
|
{
|
|
|
|
|
this.paraWidth.Value = Math.Round(widthTxt, 2, MidpointRounding.AwayFromZero);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//更换判断事件,原事件在修改过程中就会判断,容易导致判断错误
|
|
|
|
|
private void txtSetWidth_MouseLeave(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
double setWidth;
|
|
|
|
|
if (!double.TryParse(txtSetWidth.Text.Trim(), out setWidth))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.ShowError("数值不合法!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
double RoundSetWidth = Math.Round(setWidth, 1);
|
|
|
|
|
//增加微调值范围控制
|
|
|
|
|
if ((RoundSetWidth < 0.1 || RoundSetWidth > 10))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.ShowTips("微调值须在0.1-10之间!");
|
|
|
|
|
//微调值输入不合法时,恢复上一次设置的微调值
|
|
|
|
|
txtSetWidth.Text = DrawParam.SetWidth.ToString();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
txtSetWidth.Text = RoundSetWidth.ToString();
|
|
|
|
|
DrawParam.SetWidth = RoundSetWidth;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DXWindow_Closed(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
BindingOperations.ClearAllBindings(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 绘制方式
|
|
|
|
|
/// </summary>
|
|
|
|
|
public enum DrawMode
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 左边绘制
|
|
|
|
|
/// </summary>
|
|
|
|
|
Left = 1,
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 右边绘制
|
|
|
|
|
/// </summary>
|
|
|
|
|
Right = 2,
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 两边绘制
|
|
|
|
|
/// </summary>
|
|
|
|
|
LeftAndRight = 3
|
|
|
|
|
}
|
|
|
|
|
public class DrawParam : INotifyPropertyChanged
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 绘制方式
|
|
|
|
|
/// </summary>
|
|
|
|
|
public DrawMode DrawMode { get; set; }
|
|
|
|
|
private double _Width;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 宽度
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Width
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _Width;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_Width = Math.Round(value, 2, MidpointRounding.AwayFromZero);
|
|
|
|
|
//if (_Width > 15)
|
|
|
|
|
//{
|
|
|
|
|
// this.ToloranceScale = 0.3;
|
|
|
|
|
//}
|
|
|
|
|
//else if (_Width <= 15 && _Width > 0)
|
|
|
|
|
//{
|
|
|
|
|
// this.ToloranceScale = 0.1;
|
|
|
|
|
//}
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
{
|
|
|
|
|
PropertyChanged(this, new PropertyChangedEventArgs("Width"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private double _setWdth;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 微调值
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double SetWidth
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _setWdth;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_setWdth = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 是否自动封闭
|
|
|
|
|
/// </summary>
|
|
|
|
|
public bool IsAutoClose { get; set; }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 输出类型
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string OutType { get; set; }
|
|
|
|
|
private double _ToloranceScale;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 容差比例(自动识别度)
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double ToloranceScale
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _ToloranceScale;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_ToloranceScale = value;
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
{
|
|
|
|
|
PropertyChanged(this, new PropertyChangedEventArgs("ToloranceScale"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private bool _IsAutoTrack { get; set; }
|
|
|
|
|
public bool IsAutoTrack
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _IsAutoTrack;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_IsAutoTrack = value;
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
{
|
|
|
|
|
PropertyChanged(this, new PropertyChangedEventArgs("IsAutoTrack"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private bool _IsAutoStep;
|
|
|
|
|
public bool IsAutoStep
|
|
|
|
|
{
|
|
|
|
|
get { return _IsAutoStep; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_IsAutoStep = value;
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
{
|
|
|
|
|
PropertyChanged(this, new PropertyChangedEventArgs("IsAutoStep"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private string _DLBM;
|
|
|
|
|
public string DLBM
|
|
|
|
|
{
|
|
|
|
|
get { return _DLBM; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_DLBM = value;
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
{
|
|
|
|
|
PropertyChanged(this, new PropertyChangedEventArgs("DLBM"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|