You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
6.8 KiB
206 lines
6.8 KiB
using ESRI.ArcGIS.Carto; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using System; |
|
using System.Collections.Generic; |
|
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.MapView.Views |
|
{ |
|
/// <summary> |
|
/// UCFieldCalculator.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class UCFieldCalculator : BaseWindow |
|
{ |
|
public Expression expressionFieldCalculator { get; set; } |
|
private IFeatureLayer m_featureLayer; |
|
public UCFieldCalculator(IFeatureLayer featureLayer) |
|
{ |
|
InitializeComponent(); |
|
m_featureLayer = featureLayer; |
|
expressionFieldCalculator = new Expression(); |
|
InItFieldList(); |
|
} |
|
private void InItFieldList() |
|
{ |
|
try |
|
{ |
|
if (m_featureLayer == null || m_featureLayer.FeatureClass == null) return; |
|
List<string> fields = new List<string>(); |
|
for (int i = 0; i < m_featureLayer.FeatureClass.Fields.FieldCount; i++) |
|
{ |
|
fields.Add(m_featureLayer.FeatureClass.Fields.Field[i].Name); |
|
} |
|
fieldListBox.ItemsSource = fields; |
|
if (fields.Count > 0) |
|
fieldListBox.SelectedIndex = 0; |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowTips("获取数据类的字段列表异常!" + ex.Message); |
|
LogAPI.Debug("获取数据类的字段列表异常!" + ex.Message); |
|
LogAPI.Debug("获取数据类的字段列表异常!" + ex.StackTrace); |
|
} |
|
} |
|
private void FieldListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.Field = fieldListBox.SelectedItem.ToString(); |
|
|
|
fieldLabel.Content = " " + fieldListBox.SelectedItem.ToString() + " = "; |
|
} |
|
|
|
private void BtnOK_Click(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.ExpressionText = contentBlock.Text.Trim(); |
|
if (string.IsNullOrEmpty(expressionFieldCalculator.ExpressionText)) |
|
{ |
|
MessageHelper.ShowTips("请先编辑字段计算器!"); |
|
this.DialogResult = false; |
|
} |
|
else |
|
{ |
|
this.DialogResult = true; |
|
this.Close(); |
|
} |
|
} |
|
|
|
private void BtnCancel_Click(object sender, RoutedEventArgs e) |
|
{ |
|
expressionFieldCalculator = null; |
|
this.Close(); |
|
} |
|
|
|
private void VB_Checked(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.Type = CODEType.VB; |
|
} |
|
|
|
private void Python_Checked(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.Type = CODEType.Python; |
|
} |
|
|
|
private void FigureRadioButton_Checked(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.DataType = DataType.FigureType; |
|
} |
|
|
|
private void StringRadioButton_Checked(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.DataType = DataType.StringType; |
|
} |
|
|
|
private void DateRadioButton_Checked(object sender, RoutedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.DataType = DataType.DateType; |
|
} |
|
|
|
private void ContentBlock_TextChanged(object sender, TextChangedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
expressionFieldCalculator.ExpressionText = contentBlock.Text; |
|
} |
|
|
|
private void FunctionListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
{ |
|
if (expressionFieldCalculator == null) |
|
expressionFieldCalculator = new Expression(); |
|
System.Windows.Controls.ListBoxItem listBoxItem = functionListBox.SelectedItem as ListBoxItem; |
|
|
|
expressionFieldCalculator.Function = listBoxItem.Content.ToString(); |
|
|
|
contentBlock.Text += " " + listBoxItem.Content.ToString() + " "; |
|
} |
|
|
|
private void BtnMultiplication_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " * "; |
|
} |
|
|
|
private void BtnDivide_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " / "; |
|
} |
|
|
|
private void BtnWith_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " & "; |
|
} |
|
|
|
private void BtnAdd_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " + "; |
|
} |
|
|
|
private void BtnSubtract_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " - "; |
|
} |
|
|
|
private void BtnEqual_Click(object sender, RoutedEventArgs e) |
|
{ |
|
contentBlock.Text += " = "; |
|
} |
|
} |
|
|
|
public class Expression |
|
{ |
|
/// <summary> |
|
/// 所选字段 |
|
/// </summary> |
|
public string Field { get; set; } |
|
/// <summary> |
|
/// 解析程序类型 |
|
/// </summary> |
|
public CODEType Type { get; set; } = CODEType.Python; |
|
/// <summary> |
|
/// 数据类型 |
|
/// </summary> |
|
public DataType DataType { get; set; } = DataType.StringType; |
|
/// <summary> |
|
/// 函数 |
|
/// </summary> |
|
public object Function { get; set; } |
|
/// <summary> |
|
/// 内容 |
|
/// </summary> |
|
public string ExpressionText { get; set; } |
|
} |
|
public enum CODEType |
|
{ |
|
Python, |
|
VB |
|
} |
|
public enum DataType |
|
{ |
|
StringType, |
|
FigureType, |
|
DateType |
|
} |
|
}
|
|
|