年度变更建库软件5.0版本
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.

354 lines
17 KiB

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using KGIS.Framework.AE.ExtensionMethod;
using KGIS.Framework.Commands;
using KGIS.Framework.Maps;
using KGIS.Framework.Platform;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using Kingo.Framework.LayerStyleConvert;
using Kingo.Framework.LayerStyleConvert.Common;
using Kingo.Framework.LayerStyleConvert.XSDClass;
using Kingo.PluginServiceInterface;
using System;
using System.Collections.Generic;
using System.IO;
using UIShell.OSGi;
namespace Kingo.Plugin.MapView.Commands
{
/// <summary>
/// 保存工程-功能点
/// </summary>
public class CmdSaveProject : BaseMenuCommand
{
IHookHelper m_hookHelper = null;
private IDataCatalogService _DataCatalog = null;
public override void OnClick()
{
try
{
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" });
}
catch (Exception ex)
{
LogAPI.Debug("保存工程时发生异常,异常信息如下:" + ex.Message);
}
}
private void GetLayersSymbol()
{
try
{
if (_DataCatalog == null)
_DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>();
ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo;
if (projectInfo == null || _DataCatalog.CurrentLayers == null) return;
//获取图层样式
LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg;
List<LayerCfg> list = layerInfo.GetAllItem();
if (list != null && list.Count != 0)
{
foreach (var item in list)
{
ILayer layer = item.Data as ILayer;
if (layer != null)
{
if (layer is IFeatureLayer)
{
if (layer.Name == "变更范围图斑")
{
}
Renderer randerer = SymbolConvert.Instance().GetRenderer((layer as IGeoFeatureLayer).Renderer);
LabelingInfo labelingInfo = null;
LabelStyleConvert styleConvert = new LabelStyleConvert();
List<LabelingInfo> labelInfo = styleConvert.EsriLabelToCustomLabels((layer as IGeoFeatureLayer).AnnotationProperties);
if (labelInfo != null && labelInfo.Count > 0)
labelingInfo = labelInfo[0];
if (labelingInfo != null)
{
//AdvancedDrawimgInfoManager ad = new AdvancedDrawimgInfoManager();
//string jsons = ad.GetRenderer(randerer, labelingInfo);
//item.Symbol = jsons;
AdvancedDrawingInfo adi = new AdvancedDrawingInfo();
adi.DrawingInfo.Renderer = randerer;
adi.DrawingInfo.LabelingInfo = labelInfo;
item.Symbol = adi.ToJson();
}
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
private void SaveLayersToXML()
{
try
{
if (_DataCatalog == null)
_DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>();
ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo;
if (projectInfo == null || _DataCatalog.CurrentLayers == null) return;
//获取图层样式
LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg;
List<LayerCfg> list = layerInfo.GetAllItem();
if (list != null && list.Count != 0)
{
foreach (var item in list)
{
ILayer layer = item.Data as ILayer;
if (layer != null)
{
if (layer is IFeatureLayer)
{
if (layer.Name == "变更范围图斑")
{
}
Renderer randerer = SymbolConvert.Instance().GetRenderer((layer as IGeoFeatureLayer).Renderer);
LabelingInfo labelingInfo = null;
LabelStyleConvert styleConvert = new LabelStyleConvert();
List<LabelingInfo> labelInfo = styleConvert.EsriLabelToCustomLabels((layer as IGeoFeatureLayer).AnnotationProperties);
if (labelInfo != null && labelInfo.Count > 0)
labelingInfo = labelInfo[0];
if (labelingInfo != null)
{
//AdvancedDrawimgInfoManager ad = new AdvancedDrawimgInfoManager();
//string jsons = ad.GetRenderer(randerer, labelingInfo);
//item.Symbol = jsons;
AdvancedDrawingInfo adi = new AdvancedDrawingInfo();
adi.DrawingInfo.Renderer = randerer;
adi.DrawingInfo.LabelingInfo = labelInfo;
item.Symbol = adi.ToJson();
}
}
}
}
}
//设置图层样式
string layerStylePath = System.IO.Path.Combine(projectInfo.ProjDir, "LatersToXML.xml");
if (System.IO.File.Exists(layerStylePath))
{
LayerCfg layerInfoClass = SerializeAPI.DeserializeToObject2<LayerCfg>(layerStylePath);
if (layerInfoClass != null && layerInfoClass.Layers != null)
{
List<LayerCfg> layerInfolist = layerInfo.GetAllItem();
foreach (var item in layerInfolist)
{
ILayer layer = item.Data as ILayer;
if (layer != null)
{
if (layer is IFeatureLayer)
{
if (layer.Name == "变更范围图斑")
{
}
if (!string.IsNullOrWhiteSpace(item.Symbol))
{
AdvancedDrawingInfo ad = AdvancedDrawingInfo.FromJson(item.Symbol);
//ItemInfo itemInfo = ItemInfo.FromJson(item.Symbol);
if (ad != null)
{
//Symbol symbol = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.SimpleRenderer).Symbol;
//Renderer rander = SymbolConvert.Instance().GetItemInfoRenderer((layer as IGeoFeatureLayer).Renderer);
if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.SimpleRenderer)
{
Symbol symbol1 = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.SimpleRenderer).Symbol;
//if (symbol1 is CIMSymbolReference)
//{
ISimpleRenderer simpleRander2 = SymbolConvert.Instance().GetSimpleRenderer(symbol1, SymbolTypeEnum.Fill);
(layer as IGeoFeatureLayer).Renderer = simpleRander2 as IFeatureRenderer;
continue;
//}
}
else if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.UniqueValueRenderer)
{
//Symbol symbol = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.UniqueValueRenderer).DefaultSymbol;
//ISimpleRenderer simpleRander2 = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Fill);
//(layer as IGeoFeatureLayer).Renderer = simpleRander2 as IFeatureRenderer;
continue;
}
//if (symbol != null)
//{
// ISymbol gisSymbol = null;
// IFeatureLayer2 featureLayer = layer as IFeatureLayer2;
// ESRI.ArcGIS.Geometry.esriGeometryType geometryType = featureLayer.ShapeType;
// ISimpleRenderer simpleRenderer = (featureLayer as IGeoFeatureLayer).Renderer as ISimpleRenderer;
// if (simpleRenderer != null)
// {
// gisSymbol = simpleRenderer.Symbol;
// }
// else
// {
// gisSymbol = GetDefaultSymbol(geometryType);
// }
// ISimpleRenderer simpleRander = null;
// //面
// if (gisSymbol is IFillSymbol)
// {
// simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Fill);
// }
// //线
// else if (gisSymbol is ILineSymbol)
// {
// simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Line);
// }
// //点
// else if (gisSymbol is IMarkerSymbol)
// {
// simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Point);
// }
//(layer as IGeoFeatureLayer).Renderer = simpleRander as IFeatureRenderer;
//}
}
}
//IFillSymbol fillSymbol = getLayerFillSymbol(item.Layer as ILayer);
//if (fillSymbol != null)
//{
// System.Drawing.Color fillColor = Converter.FromRGBColor(fillSymbol.Color as IRgbColor);
// System.Drawing.Color borderColor = Converter.FromRGBColor(fillSymbol.Outline.Color as IRgbColor);
// layerInfo.layerBorderColor = System.Windows.Media.Color.FromArgb(borderColor.A, borderColor.R, borderColor.G, borderColor.B).ToString();
// layerInfo.layerFillColor = System.Windows.Media.Color.FromArgb(fillColor.A, fillColor.R, fillColor.G, fillColor.B).ToString();
// if (fillSymbol.Outline is ISimpleLineSymbol)
// {
// ISimpleLineSymbol esriSymbol = fillSymbol.Outline as ISimpleLineSymbol;
// if (esriSymbol != null)
// {
// layerInfo.LayerBorderStyle = (int)esriSymbol.Style;
// layerInfo.layerBorderWidth = esriSymbol.Width;
// }
// }
//}
}
}
}
}
}
//将对象序列化成字符串
string Str = SerializeAPI.SerializeToXML<LayerCfg>(_DataCatalog.CurrentLayers as LayerCfg);
Byte[] bytearr = System.Text.Encoding.Default.GetBytes(Str);//Encoding.UTF8.GetBytes(Str);
using (Stream stream = new System.IO.FileStream(projectInfo.ProjDir + "\\" + "LatersToXML.xml", FileMode.Create, FileAccess.Write, FileShare.None))
{
stream.Write(bytearr, 0, bytearr.Length);
stream.Close();
}
}
catch (Exception)
{
throw;
}
}
private ISymbol GetDefaultSymbol(ESRI.ArcGIS.Geometry.esriGeometryType geometryType)
{
try
{
ISymbol result = null;
IRgbColor rgbColor = new RgbColorClass();
rgbColor.Red = 184;
rgbColor.Green = 242;
rgbColor.Blue = 200;
switch (geometryType)
{
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
result = (new SimpleMarkerSymbolClass
{
Color = rgbColor,
Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle
} as ISymbol);
goto IL_B3;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint:
goto IL_B3;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
result = (new SimpleFillSymbolClass
{
Color = rgbColor,
Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid
} as ISymbol);
goto IL_B3;
default:
if (geometryType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine)
{
goto IL_B3;
}
break;
}
result = (new SimpleLineSymbolClass
{
Color = rgbColor,
Width = 1.0,
Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid
} as ISymbol);
IL_B3:
return result;
}
catch (Exception ex)
{
LogAPI.Debug(ex.Message);
}
return null;
}
public override void OnCreate(object Hook)
{
try
{
if (m_hookHelper == null)
{
m_hookHelper = new HookHelper
{
Hook = Hook
};
}
}
catch (Exception ex)
{
LogAPI.Debug("初始化 保存 命令时异常,异常信息如下:" + ex.Message);
}
}
public override bool Enabled
{
get
{
//验证是否打开工程
if (!(KGIS.Framework.Maps.MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo))
return false;
else
return true;
}
}
}
}