森林草原湿地荒漠调查
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

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
}
}