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