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.
953 lines
39 KiB
953 lines
39 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Drawing; |
|
using System.Data; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Windows.Forms; |
|
using DevExpress.XtraEditors; |
|
using KGIS.Plugin.LayerProperty.Interface; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using KGIS.Plugin.LayerProperty.Utils; |
|
using ESRI.ArcGIS.esriSystem; |
|
using stdole; |
|
using ESRI.ArcGIS.ADF; |
|
using ESRI.ArcGIS.Geometry; |
|
using DevExpress.XtraEditors.Controls; |
|
using KGIS.Plugin.LayerProperty.Enum; |
|
using KGIS.Framework.Utils.Helper; |
|
|
|
namespace KGIS.Plugin.LayerProperty.View.UC_Controls |
|
{ |
|
public partial class UCLabelPropertyPage : XtraUserControl, IUCPropertyPageEx, IPropertyPage |
|
{ |
|
private string m_FontName; |
|
private string m_LabelFieldName; |
|
private float m_FontSize = 10f; |
|
private bool m_CanLabel; |
|
private bool m_Bold; |
|
private bool m_Italic; |
|
private bool m_Underline; |
|
private string m_FontColor; |
|
private double m_LabelMinScale; |
|
private double m_LabelMaxScale; |
|
private IAnnotateLayerPropertiesCollection m_AnnotateLayerPropertiesCollection; |
|
private ILabelEngineLayerProperties2 m_LabelEngineLayerProps; |
|
private ILabelEngineLayerProperties2 m_CloneLabelEngineLayerProps; |
|
private IBasicOverposterLayerProperties4 m_TempBasicOverposterLayerProperties; |
|
private IStyleGalleryClass m_StyleGalleryClass; |
|
private ILayer m_Layer; |
|
private FormLabelScaleRangeSet m_frmLabelScaleRangeSet; |
|
private List<IPropertyPage> PropertyList; |
|
private FormPlacmentProps m_PlacmentSet; |
|
private ITextSymbol m_TextSymbol; |
|
private IFontDisp m_TextFont; |
|
private IFields m_Fields; |
|
private string m_LabelExpression; |
|
private bool m_IsExpressionSimple = true; |
|
private IGeoFeatureLayer geoFeaLyr; |
|
private FormSQLCreator frmSQLCreator; |
|
private IAnnotateLayerProperties m_CurrentAnnoLyrProp; |
|
private bool m_ReadProp; |
|
private bool isCustomLayer; |
|
private bool isDirty; |
|
public event System.EventHandler EditorChanged; |
|
public bool IsCustomLayer |
|
{ |
|
get |
|
{ |
|
return this.isCustomLayer; |
|
} |
|
} |
|
public bool IsPageDirty |
|
{ |
|
get |
|
{ |
|
return this.isDirty; |
|
} |
|
set |
|
{ |
|
this.isDirty = value; |
|
} |
|
} |
|
public int Priority |
|
{ |
|
get |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
set |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
} |
|
public string Title |
|
{ |
|
get |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
set |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
} |
|
public UCLabelPropertyPage() |
|
{ |
|
InitializeComponent(); |
|
PopupBaseAutoSearchEdit popupBaseAutoSearchEdit = this.cmbFontSize; |
|
DevExpressControlCommand.SetAllEditorInteger2(ref popupBaseAutoSearchEdit, false, false, 3); |
|
} |
|
public void InitUC(object layerProperty) |
|
{ |
|
try |
|
{ |
|
this.isCustomLayer = false; |
|
this.m_Layer = (layerProperty as ILayer); |
|
this.geoFeaLyr = (layerProperty as IGeoFeatureLayer); |
|
this.PropertyList = new List<IPropertyPage>(); |
|
this.m_TempBasicOverposterLayerProperties = null; |
|
this.fontEdit2.EditValue = "宋体"; |
|
this.chkBold.Checked = false; |
|
this.chkItalic.Checked = false; |
|
this.chkUnderline.Checked = false; |
|
this.clrFontColor.Color = Color.Black; |
|
this.btnDeleteClass.Enabled = true; |
|
this.cmbAnnoLyrPropClass.Properties.Items.Clear(); |
|
if (this.geoFeaLyr != null) |
|
{ |
|
this.chkLabelFeatures.Checked = this.geoFeaLyr.DisplayAnnotation; |
|
this.m_AnnotateLayerPropertiesCollection = this.geoFeaLyr.AnnotationProperties; |
|
if (this.m_AnnotateLayerPropertiesCollection == null) |
|
{ |
|
this.CreateDefaultAnnonation(); |
|
} |
|
else |
|
{ |
|
IAnnotateLayerProperties annotateLayerProperties = null; |
|
IElementCollection elementCollection = null; |
|
IElementCollection elementCollection2 = null; |
|
for (int i = 0; i < this.m_AnnotateLayerPropertiesCollection.Count; i++) |
|
{ |
|
this.m_AnnotateLayerPropertiesCollection.QueryItem(i, out annotateLayerProperties, out elementCollection2, out elementCollection); |
|
IAnnotateLayerProperties innervalue = (annotateLayerProperties as IClone).Clone() as IAnnotateLayerProperties; |
|
ItemInfo<IAnnotateLayerProperties, string> item = new ItemInfo<IAnnotateLayerProperties, string>(innervalue, annotateLayerProperties.Class); |
|
this.cmbAnnoLyrPropClass.Properties.Items.Add(item); |
|
} |
|
this.cmbAnnoLyrPropClass.SelectedIndex = 0; |
|
if (this.m_AnnotateLayerPropertiesCollection.Count > 1) |
|
{ |
|
this.cmbLabelType.SelectedIndex = 1; |
|
} |
|
else |
|
{ |
|
this.cmbLabelType.SelectedIndex = 0; |
|
} |
|
} |
|
this.btnGetAnnoLyrPropBySymbol.Enabled = this.CanGetClassFromSymbols(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
public void ReadAnnotateLayerProperties(IAnnotateLayerProperties pAnnotateLayerProperties) |
|
{ |
|
if (pAnnotateLayerProperties == null) |
|
{ |
|
return; |
|
} |
|
this.m_CurrentAnnoLyrProp = pAnnotateLayerProperties; |
|
this.m_LabelEngineLayerProps = (pAnnotateLayerProperties as ILabelEngineLayerProperties2); |
|
IClone clone = this.m_LabelEngineLayerProps.BasicOverposterLayerProperties as IClone; |
|
this.m_TempBasicOverposterLayerProperties = (clone.Clone() as IBasicOverposterLayerProperties4); |
|
clone = (this.m_LabelEngineLayerProps as IClone); |
|
this.m_CloneLabelEngineLayerProps = (clone.Clone() as ILabelEngineLayerProperties2); |
|
this.m_LabelMaxScale = pAnnotateLayerProperties.AnnotationMaximumScale; |
|
this.m_LabelMinScale = pAnnotateLayerProperties.AnnotationMinimumScale; |
|
if (this.m_LabelEngineLayerProps == null) |
|
{ |
|
return; |
|
} |
|
this.chkDisplayAnnotation.Checked = pAnnotateLayerProperties.DisplayAnnotation; |
|
this.m_LabelExpression = this.m_LabelEngineLayerProps.Expression; |
|
this.m_IsExpressionSimple = this.m_LabelEngineLayerProps.IsExpressionSimple; |
|
this.m_Fields = this.geoFeaLyr.FeatureClass.Fields; |
|
this.SetCmbLabelField(this.m_LabelEngineLayerProps); |
|
if (this.m_LabelEngineLayerProps.Symbol == null) |
|
{ |
|
this.m_TextSymbol = this.ConvertToSymbol(); |
|
this.m_LabelEngineLayerProps.Symbol = this.m_TextSymbol; |
|
} |
|
else |
|
{ |
|
this.m_TextSymbol = this.m_LabelEngineLayerProps.Symbol; |
|
} |
|
this.SetBySymbol(this.m_TextSymbol); |
|
} |
|
private void GetLabelSet() |
|
{ |
|
try |
|
{ |
|
this.GetCurrentLabelSet(); |
|
this.m_AnnotateLayerPropertiesCollection.Clear(); |
|
for (int i = 0; i < this.cmbAnnoLyrPropClass.Properties.Items.Count; i++) |
|
{ |
|
ItemInfo<IAnnotateLayerProperties, string> itemInfo = this.cmbAnnoLyrPropClass.Properties.Items[i] as ItemInfo<IAnnotateLayerProperties, string>; |
|
if (itemInfo != null) |
|
{ |
|
if (this.cmbLabelType.SelectedIndex == 0) |
|
{ |
|
itemInfo.InnerValue.WhereClause = ""; |
|
this.m_AnnotateLayerPropertiesCollection.Add(itemInfo.InnerValue); |
|
break; |
|
} |
|
this.m_AnnotateLayerPropertiesCollection.Add(itemInfo.InnerValue); |
|
} |
|
} |
|
(this.m_Layer as IGeoFeatureLayer).AnnotationProperties = this.m_AnnotateLayerPropertiesCollection; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void GetCurrentLabelSet() |
|
{ |
|
try |
|
{ |
|
if (this.m_TempBasicOverposterLayerProperties != null) |
|
{ |
|
this.m_LabelEngineLayerProps.BasicOverposterLayerProperties = (this.m_TempBasicOverposterLayerProperties as IBasicOverposterLayerProperties); |
|
} |
|
else |
|
{ |
|
this.m_LabelEngineLayerProps.BasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass(); |
|
} |
|
this.m_LabelEngineLayerProps.Symbol = this.m_TextSymbol; |
|
this.m_CloneLabelEngineLayerProps.Expression = (this.cmbLabelField.Tag as string); |
|
|
|
#region BUG10428修改 2018-09-03 郑英杰 注释,对象为引用类型不需要再次赋值 |
|
//this.m_LabelEngineLayerProps.Expression = this.m_CloneLabelEngineLayerProps.Expression; |
|
//this.m_LabelEngineLayerProps.ExpressionParser = this.m_CloneLabelEngineLayerProps.ExpressionParser; |
|
//this.m_LabelEngineLayerProps.IsExpressionSimple = this.m_CloneLabelEngineLayerProps.IsExpressionSimple; |
|
#endregion |
|
|
|
IAnnotateLayerProperties annotateLayerProperties = this.m_LabelEngineLayerProps as IAnnotateLayerProperties; |
|
if (annotateLayerProperties != null) |
|
{ |
|
annotateLayerProperties.AnnotationMaximumScale = this.m_LabelMaxScale; |
|
annotateLayerProperties.AnnotationMinimumScale = this.m_LabelMinScale; |
|
annotateLayerProperties.DisplayAnnotation = this.chkDisplayAnnotation.Checked; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void SetCmbLabelField(ILabelEngineLayerProperties2 labelEngineLayerProps) |
|
{ |
|
if (!this.IsExpression(labelEngineLayerProps)) |
|
{ |
|
string text = labelEngineLayerProps.Expression.Replace("[", ""); |
|
text = text.Replace("]", ""); |
|
Utils.Util.InitFieldList(ref this.cmbLabelField, this.geoFeaLyr.FeatureClass.Fields, text, false, false, true); |
|
this.cmbLabelField.Enabled = true; |
|
} |
|
else |
|
{ |
|
this.cmbLabelField.Enabled = false; |
|
this.cmbLabelField.Text = "表达式"; |
|
} |
|
this.cmbLabelField.Tag = labelEngineLayerProps.Expression; |
|
} |
|
public void Write2Prop() |
|
{ |
|
try |
|
{ |
|
if (!this.isCustomLayer) |
|
{ |
|
this.GetLabelSet(); |
|
IGeoFeatureLayer geoFeatureLayer = this.m_Layer as IGeoFeatureLayer; |
|
if (geoFeatureLayer != null) |
|
{ |
|
geoFeatureLayer.DisplayAnnotation = this.chkLabelFeatures.Checked; |
|
} |
|
} |
|
this.isDirty = false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
public bool CanWrite2Prop() |
|
{ |
|
return this.isDirty; |
|
} |
|
private void InvokeEditValueChanged(object sender, System.EventArgs e) |
|
{ |
|
if (this.EditorChanged != null) |
|
{ |
|
this.EditorChanged(sender, e); |
|
} |
|
this.isDirty = true; |
|
} |
|
public void SetDefaultValue(object value) |
|
{ |
|
} |
|
private void chkLabelFeatures_CheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
this.m_CanLabel = this.chkLabelFeatures.Checked; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void ucFieldsCombox1_SelectedFieldChanged(IField field) |
|
{ |
|
try |
|
{ |
|
if (field != null) |
|
{ |
|
this.m_LabelFieldName = field.Name; |
|
} |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void cmbLabelField_SelectedIndexChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
ItemInfo<IField, string> itemInfo = this.cmbLabelField.SelectedItem as ItemInfo<IField, string>; |
|
if (itemInfo != null) |
|
{ |
|
this.m_LabelFieldName = itemInfo.InnerValue.Name; |
|
this.m_LabelExpression = "[" + this.m_LabelFieldName + "]"; |
|
this.cmbLabelField.Tag = this.m_LabelExpression; |
|
|
|
#region BUG9883修改 2018-09-03 郑英杰 |
|
this.m_LabelEngineLayerProps.Expression = this.m_LabelExpression; |
|
#endregion |
|
|
|
} |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void cmbFontSize_TextChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (Convert.ToDouble(this.cmbFontSize.Text) >= 0.0) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
this.m_TextSymbol.Font = this.CreateFont(); |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_FontSize = Convert.ToSingle(this.cmbFontSize.Text); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void fontEdit2_SelectedIndexChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
this.m_TextSymbol.Font = this.CreateFont(); |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_FontName = this.fontEdit2.Text; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private IFontDisp CreateFont() |
|
{ |
|
float value = Convert.ToSingle(this.cmbFontSize.EditValue); |
|
this.m_TextFont = (new StdFontClass() as IFontDisp); |
|
decimal size = Convert.ToDecimal(value); |
|
this.m_TextFont.Size = size; |
|
this.m_TextFont.Italic = this.chkItalic.Checked; |
|
this.m_TextFont.Bold = this.chkBold.Checked; |
|
this.m_TextFont.Underline = this.chkUnderline.Checked; |
|
this.m_TextFont.Name = this.fontEdit2.Text; |
|
return this.m_TextFont; |
|
} |
|
private void clrFontColor_EditValueChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
IColor color = this.m_TextSymbol.Color; |
|
color = Converter.ToRGBColor(this.clrFontColor.Color); |
|
color.Transparency = this.clrFontColor.Color.A; |
|
this.m_TextSymbol.Color = color; |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_FontColor = this.clrFontColor.Text; |
|
this.InvokeEditValueChanged(sender, e); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void chkBold_CheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
this.m_TextSymbol.Font = this.CreateFont(); |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_Bold = this.chkBold.Checked; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void chkItalic_CheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
this.m_TextSymbol.Font = this.CreateFont(); |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_Italic = this.chkItalic.Checked; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void chkUnderline_CheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (!this.m_ReadProp) |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
this.m_TextSymbol.Font = this.CreateFont(); |
|
} |
|
this.PreviewGalleryItem(); |
|
this.m_Underline = this.chkUnderline.Checked; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private FontStyle rtPadFontStyle() |
|
{ |
|
FontStyle fontStyle = FontStyle.Regular; |
|
if (this.chkBold.Checked) |
|
{ |
|
fontStyle |= FontStyle.Bold; |
|
} |
|
if (this.chkItalic.Checked) |
|
{ |
|
fontStyle |= FontStyle.Italic; |
|
} |
|
if (this.chkUnderline.Checked) |
|
{ |
|
fontStyle |= FontStyle.Underline; |
|
} |
|
return fontStyle; |
|
} |
|
private void btnSelectSymbol_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
IClone clone = this.m_TextSymbol as IClone; |
|
if (clone != null) |
|
{ |
|
ISymbol symbol = clone.Clone() as ISymbol; |
|
symbol = (RenderUtil.OpenStyleSelector(esriStyleClass.TextSymbols, symbol) as ISymbol); |
|
if (symbol != null) |
|
{ |
|
this.m_TextSymbol = (symbol as ITextSymbol); |
|
this.SetBySymbol(this.m_TextSymbol); |
|
} |
|
} |
|
} |
|
catch |
|
{ |
|
} |
|
} |
|
private void CreateDefaultAnnonation() |
|
{ |
|
try |
|
{ |
|
IFeatureLayer2 featureLayer = this.m_Layer as IFeatureLayer2; |
|
Utils.Util.InitFieldList(ref this.cmbLabelField, featureLayer.FeatureClass.Fields, this.m_LabelFieldName, false, false, true); |
|
esriFeatureType featureType = featureLayer.FeatureClass.FeatureType; |
|
if (featureType != esriFeatureType.esriFTAnnotation) |
|
{ |
|
this.m_TempBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass(); |
|
this.m_LabelEngineLayerProps = new LabelEngineLayerPropertiesClass(); |
|
this.m_AnnotateLayerPropertiesCollection.Clear(); |
|
this.m_LabelEngineLayerProps.BasicOverposterLayerProperties = (this.m_TempBasicOverposterLayerProperties as IBasicOverposterLayerProperties); |
|
this.m_LabelEngineLayerProps.Symbol = this.ConvertToSymbol(); |
|
this.m_LabelEngineLayerProps.IsExpressionSimple = true; |
|
this.m_LabelEngineLayerProps.Expression = "[" + this.m_LabelFieldName + "]"; |
|
IAnnotateLayerProperties annotateLayerProperties = this.m_LabelEngineLayerProps as IAnnotateLayerProperties; |
|
if (annotateLayerProperties != null) |
|
{ |
|
annotateLayerProperties.AnnotationMaximumScale = this.m_LabelMaxScale; |
|
annotateLayerProperties.AnnotationMinimumScale = this.m_LabelMinScale; |
|
} |
|
this.m_AnnotateLayerPropertiesCollection.Add(annotateLayerProperties); |
|
(this.m_Layer as IGeoFeatureLayer).AnnotationProperties = this.m_AnnotateLayerPropertiesCollection; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private ITextSymbol ConvertToSymbol() |
|
{ |
|
try |
|
{ |
|
ITextSymbol textSymbol = new TextSymbolClass(); |
|
Color color = Color.Black; |
|
string[] array = this.m_FontColor.Split(new char[] |
|
{ |
|
',' |
|
}); |
|
if (array.Length == 3) |
|
{ |
|
int red = Convert.ToInt32(array[0]); |
|
int green = Convert.ToInt32(array[1]); |
|
int blue = Convert.ToInt32(array[2]); |
|
color = Color.FromArgb(red, green, blue); |
|
} |
|
else |
|
{ |
|
color = Color.FromName(this.m_FontColor); |
|
} |
|
textSymbol.Color = Converter.ToRGBColor(color); |
|
System.Drawing.Font font = new System.Drawing.Font(this.m_FontName, this.m_FontSize, this.rtPadFontStyle()); |
|
textSymbol.Font = Converter.ToStdFont(font); |
|
textSymbol.Text = "AaBbYyZz"; |
|
return textSymbol; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
return null; |
|
} |
|
private void SetBySymbol(ITextSymbol Symbol) |
|
{ |
|
try |
|
{ |
|
this.m_ReadProp = true; |
|
if (Symbol != null) |
|
{ |
|
if (this.m_StyleGalleryClass == null) |
|
{ |
|
this.m_StyleGalleryClass = new TextSymbolStyleGalleryClassClass(); |
|
} |
|
this.m_TextFont = Symbol.Font; |
|
this.fontEdit2.Text = this.m_TextFont.Name; |
|
this.cmbFontSize.Text = this.m_TextFont.Size.ToString(); |
|
this.chkBold.Checked = this.m_TextFont.Bold; |
|
Color color = Converter.FromRGBColor(Symbol.Color as IRgbColor); |
|
this.clrFontColor.Text = string.Concat(new object[] |
|
{ |
|
color.R, |
|
",", |
|
color.G, |
|
",", |
|
color.B |
|
}); |
|
this.chkItalic.Checked = this.m_TextFont.Italic; |
|
this.chkUnderline.Checked = this.m_TextFont.Underline; |
|
this.m_FontName = this.fontEdit2.Text; |
|
this.m_FontSize = Convert.ToSingle(this.cmbFontSize.Text); |
|
this.m_CanLabel = this.chkLabelFeatures.Checked; |
|
this.m_Bold = this.chkBold.Checked; |
|
this.m_FontColor = this.clrFontColor.Text; |
|
this.m_Italic = this.chkItalic.Checked; |
|
this.m_Underline = this.chkUnderline.Checked; |
|
this.PreviewGalleryItem(); |
|
} |
|
this.m_ReadProp = false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void btnScaleRange_Click(object sender, System.EventArgs e) |
|
{ |
|
if (this.m_frmLabelScaleRangeSet == null) |
|
{ |
|
this.m_frmLabelScaleRangeSet = new FormLabelScaleRangeSet(); |
|
} |
|
this.m_frmLabelScaleRangeSet.InitForm(this.m_LabelMaxScale, this.m_LabelMinScale); |
|
if (this.m_frmLabelScaleRangeSet.ShowDialog(base.FindForm()) == DialogResult.OK) |
|
{ |
|
this.m_LabelMaxScale = this.m_frmLabelScaleRangeSet.MaxScale; |
|
this.m_LabelMinScale = this.m_frmLabelScaleRangeSet.MinScale; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
private void btnPlacementSet_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.m_TempBasicOverposterLayerProperties == null) |
|
{ |
|
IClone clone = this.m_LabelEngineLayerProps.BasicOverposterLayerProperties as IClone; |
|
this.m_TempBasicOverposterLayerProperties = (clone.Clone() as IBasicOverposterLayerProperties4); |
|
} |
|
if (this.m_PlacmentSet == null) |
|
{ |
|
this.m_PlacmentSet = new FormPlacmentProps(); |
|
} |
|
this.m_PlacmentSet.Fields = this.m_Fields; |
|
this.m_PlacmentSet.InitUC(this.m_TempBasicOverposterLayerProperties); |
|
if (this.m_PlacmentSet.ShowDialog() == DialogResult.OK) |
|
{ |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
public int Activate() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
public void Deactivate() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
public void Cancel() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
private void PreviewGalleryItem() |
|
{ |
|
try |
|
{ |
|
if (this.m_TextSymbol != null) |
|
{ |
|
Bitmap map = StyleGalleryItemView.GetSymbolBitMap(this.picView.Width - 1, this.picView.Height - 1, this.m_StyleGalleryClass, this.m_TextSymbol as ISymbol); |
|
this.picView.Image = map; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void btnExpression_Click(object sender, System.EventArgs e) |
|
{ |
|
FormLabelExpression formLabelExpression = new FormLabelExpression(); |
|
formLabelExpression.InitForm(this.m_LabelEngineLayerProps, this.m_Fields); |
|
if (formLabelExpression.ShowDialog(base.FindForm()) == DialogResult.OK) |
|
{ |
|
this.SetCmbLabelField(this.m_LabelEngineLayerProps); |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
private void btnLabelStyle_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
ILabelStyle labelStyle = RenderUtil.OpenStyleSelector(esriStyleClass.Labels, null) as ILabelStyle; |
|
if (labelStyle != null) |
|
{ |
|
this.m_TextSymbol = labelStyle.Symbol; |
|
this.m_TempBasicOverposterLayerProperties = (labelStyle.BasicOverposterLayerProperties as IBasicOverposterLayerProperties4); |
|
IFeatureLayer2 featureLayer = this.m_Layer as IFeatureLayer2; |
|
if (featureLayer != null) |
|
{ |
|
if (featureLayer.ShapeType == esriGeometryType.esriGeometryPoint) |
|
{ |
|
this.m_TempBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; |
|
} |
|
else |
|
{ |
|
if (featureLayer.ShapeType == esriGeometryType.esriGeometryPolyline) |
|
{ |
|
this.m_TempBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; |
|
} |
|
else |
|
{ |
|
if (featureLayer.ShapeType == esriGeometryType.esriGeometryPolygon) |
|
{ |
|
this.m_TempBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; |
|
} |
|
} |
|
} |
|
} |
|
this.SetBySymbol(this.m_TextSymbol); |
|
} |
|
} |
|
catch |
|
{ |
|
} |
|
} |
|
private bool IsExpression(ILabelEngineLayerProperties2 labelEngineLayerProps) |
|
{ |
|
if (!labelEngineLayerProps.IsExpressionSimple) |
|
{ |
|
return true; |
|
} |
|
if (labelEngineLayerProps.Expression.Contains("&\"")) |
|
{ |
|
return true; |
|
} |
|
string expression = labelEngineLayerProps.Expression; |
|
return expression.IndexOf("]") < expression.Length - 1; |
|
} |
|
private void cmbLabelType_SelectedIndexChanged(object sender, System.EventArgs e) |
|
{ |
|
if (this.cmbLabelType.SelectedIndex == 0) |
|
{ |
|
this.pnlMutilClasses.Visible = false; |
|
} |
|
else |
|
{ |
|
this.pnlMutilClasses.Visible = true; |
|
} |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
private bool ClassNameCanUse(string className) |
|
{ |
|
if (className == string.Empty) |
|
{ |
|
MessageHelper.Show("名称不能为空"); |
|
return false; |
|
} |
|
for (int i = 0; i < this.cmbAnnoLyrPropClass.Properties.Items.Count; i++) |
|
{ |
|
ItemInfo<IAnnotateLayerProperties, string> itemInfo = this.cmbAnnoLyrPropClass.Properties.Items[i] as ItemInfo<IAnnotateLayerProperties, string>; |
|
if (itemInfo != null && itemInfo.DisplayValue == className) |
|
{ |
|
MessageHelper.Show("分类名称已经存在,不能重复!"); |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
private bool ClassNameCanUse2(string className) |
|
{ |
|
if (className == string.Empty) |
|
{ |
|
return false; |
|
} |
|
for (int i = 0; i < this.cmbAnnoLyrPropClass.Properties.Items.Count; i++) |
|
{ |
|
ItemInfo<IAnnotateLayerProperties, string> itemInfo = this.cmbAnnoLyrPropClass.Properties.Items[i] as ItemInfo<IAnnotateLayerProperties, string>; |
|
if (itemInfo != null && itemInfo.DisplayValue == className) |
|
{ |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
private void CreateNewAnnotateLayerProperties(string name) |
|
{ |
|
IAnnotateLayerProperties annotateLayerProperties = (this.m_CurrentAnnoLyrProp as IClone).Clone() as IAnnotateLayerProperties; |
|
annotateLayerProperties.Class = name; |
|
annotateLayerProperties.DisplayAnnotation = false; |
|
ItemInfo<IAnnotateLayerProperties, string> item = new ItemInfo<IAnnotateLayerProperties, string>(annotateLayerProperties, name); |
|
this.cmbAnnoLyrPropClass.SelectedIndex = this.cmbAnnoLyrPropClass.Properties.Items.Add(item); |
|
this.AnnoLyrPropClassChanged(); |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
private void btnAddClass_Click(object sender, System.EventArgs e) |
|
{ |
|
string empty = string.Empty; |
|
if (DevExpressInputBox.InputBox("分类名称:", "新建分类", "", out empty) == DialogResult.OK && this.ClassNameCanUse(empty)) |
|
{ |
|
this.CreateNewAnnotateLayerProperties(empty); |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
private void btnDeleteClass_Click(object sender, System.EventArgs e) |
|
{ |
|
if (this.cmbAnnoLyrPropClass.Properties.Items.Count > 1) |
|
{ |
|
this.cmbAnnoLyrPropClass.Properties.Items.Remove(this.cmbAnnoLyrPropClass.SelectedItem); |
|
this.cmbAnnoLyrPropClass.SelectedIndex = 0; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
private void btnRenameClass_Click(object sender, System.EventArgs e) |
|
{ |
|
string empty = string.Empty; |
|
if (DevExpressInputBox.InputBox("分类名称:", "修改分类", this.m_CurrentAnnoLyrProp.Class, out empty) == DialogResult.OK && this.ClassNameCanUse(empty)) |
|
{ |
|
this.m_CurrentAnnoLyrProp.Class = empty; |
|
this.cmbAnnoLyrPropClass.Properties.Items.Remove(this.cmbAnnoLyrPropClass.SelectedItem); |
|
ItemInfo<IAnnotateLayerProperties, string> item = new ItemInfo<IAnnotateLayerProperties, string>(this.m_CurrentAnnoLyrProp, this.m_CurrentAnnoLyrProp.Class); |
|
this.cmbAnnoLyrPropClass.SelectedIndex = this.cmbAnnoLyrPropClass.Properties.Items.Add(item); |
|
this.cmbAnnoLyrPropClass.Update(); |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
private void cmbAnnoLyrPropClass_SelectedValueChanged(object sender, System.EventArgs e) |
|
{ |
|
ItemInfo<IAnnotateLayerProperties, string> itemInfo = this.cmbAnnoLyrPropClass.SelectedItem as ItemInfo<IAnnotateLayerProperties, string>; |
|
if (itemInfo != null) |
|
{ |
|
this.ReadAnnotateLayerProperties(itemInfo.InnerValue); |
|
} |
|
this.AnnoLyrPropClassChanged(); |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
private void cmbAnnoLyrPropClass_EditValueChanging(object sender, ChangingEventArgs e) |
|
{ |
|
ItemInfo<IAnnotateLayerProperties, string> param = e.OldValue as ItemInfo<IAnnotateLayerProperties, string>; |
|
if (param != null) |
|
{ |
|
this.GetCurrentLabelSet(); |
|
} |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
private void btnWhereClause_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.frmSQLCreator == null) |
|
{ |
|
this.frmSQLCreator = new FormSQLCreator(); |
|
} |
|
IFeatureLayer featureLayer = this.m_Layer as IFeatureLayer; |
|
if (featureLayer != null) |
|
{ |
|
this.frmSQLCreator.InitForm(featureLayer); |
|
this.frmSQLCreator.SQL = this.m_CurrentAnnoLyrProp.WhereClause; |
|
if (this.frmSQLCreator.ShowDialog() == DialogResult.OK) |
|
{ |
|
this.m_CurrentAnnoLyrProp.WhereClause = this.frmSQLCreator.SQL; |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
private void AnnoLyrPropClassChanged() |
|
{ |
|
if (this.cmbAnnoLyrPropClass.Properties.Items.Count == 1) |
|
{ |
|
this.btnDeleteClass.Enabled = false; |
|
this.chkDisplayAnnotation.Checked = true; |
|
this.chkDisplayAnnotation.Enabled = false; |
|
return; |
|
} |
|
this.btnDeleteClass.Enabled = true; |
|
this.chkDisplayAnnotation.Enabled = true; |
|
} |
|
private bool CanGetClassFromSymbols() |
|
{ |
|
try |
|
{ |
|
IFeatureRenderer renderer = (this.m_Layer as IGeoFeatureLayer).Renderer; |
|
IUniqueValueRenderer uniqueValueRenderer = renderer as IUniqueValueRenderer; |
|
if (uniqueValueRenderer != null) |
|
{ |
|
return true; |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
} |
|
return false; |
|
} |
|
private void btnGetAnnoLyrPropBySymbol_Click(object sender, System.EventArgs e) |
|
{ |
|
DialogResult dialogResult = MessageHelper.ShowYesNoCancelAndTips("是否要覆盖现有的标注分类?\n\r点击是将使用符号分类对现有的分类进行覆盖。\n\r点击否将跳过现有分类,将符号分类进行追加。"); |
|
if (dialogResult == DialogResult.Yes) |
|
{ |
|
this.cmbAnnoLyrPropClass.Properties.Items.Clear(); |
|
IFeatureRenderer renderer = (this.m_Layer as IGeoFeatureLayer).Renderer; |
|
IUniqueValueRenderer uniqueValueRenderer = renderer as IUniqueValueRenderer; |
|
for (int i = 0; i < uniqueValueRenderer.ValueCount; i++) |
|
{ |
|
string name = uniqueValueRenderer.get_Value(i); |
|
this.CreateNewAnnotateLayerProperties(name); |
|
} |
|
return; |
|
} |
|
if (dialogResult == DialogResult.No) |
|
{ |
|
IFeatureRenderer renderer2 = (this.m_Layer as IGeoFeatureLayer).Renderer; |
|
IUniqueValueRenderer uniqueValueRenderer2 = renderer2 as IUniqueValueRenderer; |
|
for (int j = 0; j < uniqueValueRenderer2.ValueCount; j++) |
|
{ |
|
string text = uniqueValueRenderer2.get_Value(j); |
|
if (this.ClassNameCanUse2(text)) |
|
{ |
|
this.CreateNewAnnotateLayerProperties(text); |
|
} |
|
} |
|
} |
|
} |
|
private void chkDisplayAnnotation_CheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
} |
|
}
|
|
|