|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Drawing.Drawing2D;
|
|
|
|
|
using System.Drawing.Imaging;
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Xml;
|
|
|
|
|
using System.Xml.Serialization;
|
|
|
|
|
using ArcShapeFileDLL;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Converters;
|
|
|
|
|
using Newtonsoft.Json.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Framework.LayerStyleConvert.XSDClass
|
|
|
|
|
{
|
|
|
|
|
// Token: 0x0200006A RID: 106
|
|
|
|
|
public class CommonMethod
|
|
|
|
|
{
|
|
|
|
|
// Token: 0x06000400 RID: 1024 RVA: 0x00016CFC File Offset: 0x00014EFC
|
|
|
|
|
public static string SerializerToXml<T>(T obj)
|
|
|
|
|
{
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
|
|
|
|
|
string result;
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
|
{
|
|
|
|
|
XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
|
|
|
|
|
xmlSerializerNamespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
|
|
|
|
|
xmlSerializerNamespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
|
|
|
|
|
xmlSerializerNamespaces.Add("typens", "http://www.esri.com/schemas/ArcGIS/10.1");
|
|
|
|
|
xmlSerializer.Serialize(memoryStream, obj, xmlSerializerNamespaces);
|
|
|
|
|
string @string = Encoding.UTF8.GetString(memoryStream.ToArray());
|
|
|
|
|
result = @string;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000401 RID: 1025 RVA: 0x00016DA4 File Offset: 0x00014FA4
|
|
|
|
|
public static string SerializerToXmlNoHeder<T>(T Obj)
|
|
|
|
|
{
|
|
|
|
|
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
|
|
|
|
|
xmlWriterSettings.OmitXmlDeclaration = true;
|
|
|
|
|
xmlWriterSettings.Encoding = Encoding.Default;
|
|
|
|
|
string @string;
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
|
{
|
|
|
|
|
using (XmlWriter xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings))
|
|
|
|
|
{
|
|
|
|
|
XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
|
|
|
|
|
xmlSerializerNamespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
|
|
|
|
|
xmlSerializerNamespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
|
|
|
|
|
xmlSerializerNamespaces.Add("typens", "http://www.esri.com/schemas/ArcGIS/10.1");
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(Obj.GetType());
|
|
|
|
|
xmlSerializer.Serialize(xmlWriter, Obj, xmlSerializerNamespaces);
|
|
|
|
|
}
|
|
|
|
|
@string = Encoding.Default.GetString(memoryStream.ToArray());
|
|
|
|
|
}
|
|
|
|
|
return @string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000402 RID: 1026 RVA: 0x00016E94 File Offset: 0x00015094
|
|
|
|
|
public static void SerializerToFile<T>(T obj, string xmlFilePath)
|
|
|
|
|
{
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
|
|
|
|
|
using (FileStream fileStream = File.Open(xmlFilePath, FileMode.Create, FileAccess.Write))
|
|
|
|
|
{
|
|
|
|
|
xmlSerializer.Serialize(fileStream, obj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000403 RID: 1027 RVA: 0x00016EF0 File Offset: 0x000150F0
|
|
|
|
|
public static T DeSerializerFromXml<T>(string xml)
|
|
|
|
|
{
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
|
|
|
|
|
T result;
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
|
{
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(xml);
|
|
|
|
|
memoryStream.Write(bytes, 0, bytes.Length);
|
|
|
|
|
memoryStream.Position = 0L;
|
|
|
|
|
object obj = xmlSerializer.Deserialize(memoryStream);
|
|
|
|
|
result = (T)((object)obj);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000404 RID: 1028 RVA: 0x00016F70 File Offset: 0x00015170
|
|
|
|
|
public static T DeSerializerFromFile<T>(string xmlFilePath)
|
|
|
|
|
{
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
|
|
|
|
|
T result;
|
|
|
|
|
using (FileStream fileStream = File.OpenRead(xmlFilePath))
|
|
|
|
|
{
|
|
|
|
|
object obj = xmlSerializer.Deserialize(fileStream);
|
|
|
|
|
result = (T)((object)obj);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000405 RID: 1029 RVA: 0x00016FCC File Offset: 0x000151CC
|
|
|
|
|
public static string SerializerToJson(object item)
|
|
|
|
|
{
|
|
|
|
|
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
|
|
|
|
|
{
|
|
|
|
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
|
|
|
|
};
|
|
|
|
|
jsonSerializerSettings.Converters.Add(new StringEnumConverter());
|
|
|
|
|
return JsonConvert.SerializeObject(item, jsonSerializerSettings);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000406 RID: 1030 RVA: 0x0001700C File Offset: 0x0001520C
|
|
|
|
|
public static T DeSerializerFromJson<T>(string json)
|
|
|
|
|
{
|
|
|
|
|
return (T)((object)JsonConvert.DeserializeObject(json, typeof(T)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000407 RID: 1031 RVA: 0x00017034 File Offset: 0x00015234
|
|
|
|
|
public static string GetCreateSqlTypeFormShapeField(ShapeFieldInfo field)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
if (field.FieldName.ToLower() == "objectid")
|
|
|
|
|
{
|
|
|
|
|
result = "integer";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
eFieldType fieldType = field.FieldType;
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpBoolean:
|
|
|
|
|
return "int16";
|
|
|
|
|
case (eFieldType)2:
|
|
|
|
|
case (eFieldType)5:
|
|
|
|
|
case (eFieldType)9:
|
|
|
|
|
case (eFieldType)11:
|
|
|
|
|
goto IL_E4;
|
|
|
|
|
case eFieldType.shpInteger:
|
|
|
|
|
case eFieldType.shpSingle:
|
|
|
|
|
return "int32";
|
|
|
|
|
case eFieldType.shpLong:
|
|
|
|
|
return "int64";
|
|
|
|
|
case eFieldType.shpDouble:
|
|
|
|
|
break;
|
|
|
|
|
case eFieldType.shpDate:
|
|
|
|
|
return "realdate";
|
|
|
|
|
case eFieldType.shpText:
|
|
|
|
|
return string.Format("text({0})", field.FieldSize);
|
|
|
|
|
case eFieldType.shpMemo:
|
|
|
|
|
return "text(100000000)";
|
|
|
|
|
default:
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpNumeric:
|
|
|
|
|
if (field.FieldDecimal == 0)
|
|
|
|
|
{
|
|
|
|
|
return "int32";
|
|
|
|
|
}
|
|
|
|
|
return "float64";
|
|
|
|
|
case eFieldType.shpFloat:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
goto IL_E4;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return "float64";
|
|
|
|
|
IL_E4:
|
|
|
|
|
result = "undifine";
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000408 RID: 1032 RVA: 0x00017130 File Offset: 0x00015330
|
|
|
|
|
public static int GetFieldSDE_Type(ShapeFieldInfo field)
|
|
|
|
|
{
|
|
|
|
|
eFieldType fieldType = field.FieldType;
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpBoolean:
|
|
|
|
|
return 1;
|
|
|
|
|
case (eFieldType)2:
|
|
|
|
|
case (eFieldType)5:
|
|
|
|
|
case (eFieldType)9:
|
|
|
|
|
case (eFieldType)11:
|
|
|
|
|
goto IL_8B;
|
|
|
|
|
case eFieldType.shpInteger:
|
|
|
|
|
return 2;
|
|
|
|
|
case eFieldType.shpLong:
|
|
|
|
|
return 11;
|
|
|
|
|
case eFieldType.shpSingle:
|
|
|
|
|
case eFieldType.shpDouble:
|
|
|
|
|
break;
|
|
|
|
|
case eFieldType.shpDate:
|
|
|
|
|
return 7;
|
|
|
|
|
case eFieldType.shpText:
|
|
|
|
|
return 5;
|
|
|
|
|
case eFieldType.shpMemo:
|
|
|
|
|
return 13;
|
|
|
|
|
default:
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpNumeric:
|
|
|
|
|
if (field.FieldDecimal == 0)
|
|
|
|
|
{
|
|
|
|
|
return 2;
|
|
|
|
|
}
|
|
|
|
|
return 4;
|
|
|
|
|
case eFieldType.shpFloat:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
goto IL_8B;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return 4;
|
|
|
|
|
IL_8B:
|
|
|
|
|
return 5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000409 RID: 1033 RVA: 0x000171D0 File Offset: 0x000153D0
|
|
|
|
|
public static string GetShapeMultiPolygonString(ShapeFiles shapeFile)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
if (shapeFile.Vertices == null || shapeFile.Vertices.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
result = "MULTIPOLYGON EMPTY";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder("MULTIPOLYGON ((");
|
|
|
|
|
foreach (object obj in shapeFile.Parts)
|
|
|
|
|
{
|
|
|
|
|
Part part = (Part)obj;
|
|
|
|
|
stringBuilder.Append("(");
|
|
|
|
|
for (int i = part.Begins; i <= part.Ends; i++)
|
|
|
|
|
{
|
|
|
|
|
stringBuilder.AppendFormat("{0} {1},", shapeFile.Vertices[i].X_Cord, shapeFile.Vertices[i].Y_Cord);
|
|
|
|
|
}
|
|
|
|
|
stringBuilder.Remove(stringBuilder.Length - 1, 1);
|
|
|
|
|
stringBuilder.Append("),");
|
|
|
|
|
}
|
|
|
|
|
stringBuilder.Remove(stringBuilder.Length - 1, 1);
|
|
|
|
|
stringBuilder.Append("))");
|
|
|
|
|
result = stringBuilder.ToString();
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040A RID: 1034 RVA: 0x0001732C File Offset: 0x0001552C
|
|
|
|
|
public static esriFieldType ConvertFromShpFieldType(ShapeFieldInfo field)
|
|
|
|
|
{
|
|
|
|
|
eFieldType fieldType = field.FieldType;
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpBoolean:
|
|
|
|
|
return esriFieldType.esriFieldTypeSmallInteger;
|
|
|
|
|
case (eFieldType)2:
|
|
|
|
|
case (eFieldType)5:
|
|
|
|
|
case (eFieldType)9:
|
|
|
|
|
case (eFieldType)11:
|
|
|
|
|
goto IL_85;
|
|
|
|
|
case eFieldType.shpInteger:
|
|
|
|
|
case eFieldType.shpLong:
|
|
|
|
|
return esriFieldType.esriFieldTypeInteger;
|
|
|
|
|
case eFieldType.shpSingle:
|
|
|
|
|
case eFieldType.shpDouble:
|
|
|
|
|
break;
|
|
|
|
|
case eFieldType.shpDate:
|
|
|
|
|
return esriFieldType.esriFieldTypeDate;
|
|
|
|
|
case eFieldType.shpText:
|
|
|
|
|
return esriFieldType.esriFieldTypeString;
|
|
|
|
|
case eFieldType.shpMemo:
|
|
|
|
|
return esriFieldType.esriFieldTypeString;
|
|
|
|
|
default:
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case eFieldType.shpNumeric:
|
|
|
|
|
if (field.FieldDecimal == 0)
|
|
|
|
|
{
|
|
|
|
|
return esriFieldType.esriFieldTypeInteger;
|
|
|
|
|
}
|
|
|
|
|
return esriFieldType.esriFieldTypeDouble;
|
|
|
|
|
case eFieldType.shpFloat:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
goto IL_85;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return esriFieldType.esriFieldTypeDouble;
|
|
|
|
|
IL_85:
|
|
|
|
|
return esriFieldType.esriFieldTypeString;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040B RID: 1035 RVA: 0x000173C4 File Offset: 0x000155C4
|
|
|
|
|
public static object GetShpFieldTypeDefaultValue(ShapeFiles.eFieldType type)
|
|
|
|
|
{
|
|
|
|
|
//switch (type)
|
|
|
|
|
//{
|
|
|
|
|
//case 1:
|
|
|
|
|
//case 3:
|
|
|
|
|
//case 4:
|
|
|
|
|
// return 0;
|
|
|
|
|
//case 2:
|
|
|
|
|
//case 5:
|
|
|
|
|
//case 9:
|
|
|
|
|
//case 11:
|
|
|
|
|
// goto IL_78;
|
|
|
|
|
//case 6:
|
|
|
|
|
//case 7:
|
|
|
|
|
// break;
|
|
|
|
|
//case 8:
|
|
|
|
|
// return "null";
|
|
|
|
|
//case 10:
|
|
|
|
|
//case 12:
|
|
|
|
|
// return "";
|
|
|
|
|
//default:
|
|
|
|
|
// switch (type)
|
|
|
|
|
// {
|
|
|
|
|
// case 19:
|
|
|
|
|
// case 20:
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// goto IL_78;
|
|
|
|
|
// }
|
|
|
|
|
// break;
|
|
|
|
|
//}
|
|
|
|
|
//return 0.0;
|
|
|
|
|
//IL_78:
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040C RID: 1036 RVA: 0x00017454 File Offset: 0x00015654
|
|
|
|
|
public static long UNIX_TIMESTAMP(DateTime dateTime)
|
|
|
|
|
{
|
|
|
|
|
return (dateTime.Ticks - DateTime.Parse("1970-01-01 00:00:00").Ticks) / 10000000L;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040D RID: 1037 RVA: 0x00017488 File Offset: 0x00015688
|
|
|
|
|
public static Image GetImageFromBase64(string base64)
|
|
|
|
|
{
|
|
|
|
|
Image result;
|
|
|
|
|
if (string.IsNullOrEmpty(base64))
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
byte[] buffer = Convert.FromBase64String(base64);
|
|
|
|
|
result = Image.FromStream(new MemoryStream(buffer)
|
|
|
|
|
{
|
|
|
|
|
Position = 0L
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040E RID: 1038 RVA: 0x000174C8 File Offset: 0x000156C8
|
|
|
|
|
public static string GetBase64FromImage(Image img)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
if (img == null)
|
|
|
|
|
{
|
|
|
|
|
result = "";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
|
{
|
|
|
|
|
if (img.RawFormat.Guid == ImageFormat.MemoryBmp.Guid)
|
|
|
|
|
{
|
|
|
|
|
img.Save(memoryStream, ImageFormat.Bmp);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
img.Save(memoryStream, img.RawFormat);
|
|
|
|
|
}
|
|
|
|
|
memoryStream.Position = 0L;
|
|
|
|
|
result = Convert.ToBase64String(memoryStream.ToArray());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600040F RID: 1039 RVA: 0x0001756C File Offset: 0x0001576C
|
|
|
|
|
public static string GetBMPBase64FromImage(Image img)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
if (img == null)
|
|
|
|
|
{
|
|
|
|
|
result = "";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Bitmap bitmap = new Bitmap(img.Width, img.Height, PixelFormat.Format8bppIndexed);
|
|
|
|
|
using (Graphics graphics = Graphics.FromImage(bitmap))
|
|
|
|
|
{
|
|
|
|
|
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
|
|
|
|
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
|
|
|
|
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
|
|
|
|
graphics.DrawImage(img, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
|
|
{
|
|
|
|
|
bitmap.Save(memoryStream, ImageFormat.Bmp);
|
|
|
|
|
memoryStream.Position = 0L;
|
|
|
|
|
result = Convert.ToBase64String(memoryStream.ToArray());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000410 RID: 1040 RVA: 0x00017644 File Offset: 0x00015844
|
|
|
|
|
public static Color GetColorFromInt4Color(int[] array)
|
|
|
|
|
{
|
|
|
|
|
Color result;
|
|
|
|
|
if (array == null || array.Length != 4)
|
|
|
|
|
{
|
|
|
|
|
result = Color.Black;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = Color.FromArgb(array[3], array[0], array[1], array[2]);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000411 RID: 1041 RVA: 0x00017680 File Offset: 0x00015880
|
|
|
|
|
public static int[] GetInt4ColorFromColor(Color color)
|
|
|
|
|
{
|
|
|
|
|
int[] array = new int[4];
|
|
|
|
|
bool flag = 1 == 0;
|
|
|
|
|
array[0] = (int)color.R;
|
|
|
|
|
array[1] = (int)color.G;
|
|
|
|
|
array[2] = (int)color.B;
|
|
|
|
|
array[3] = (int)color.A;
|
|
|
|
|
return array;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000412 RID: 1042 RVA: 0x000176CC File Offset: 0x000158CC
|
|
|
|
|
public static Bitmap ConvertTo1Bpp1(Bitmap bmp)
|
|
|
|
|
{
|
|
|
|
|
int num = 0;
|
|
|
|
|
for (int i = 0; i < bmp.Width; i++)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < bmp.Height; j++)
|
|
|
|
|
{
|
|
|
|
|
num += (int)bmp.GetPixel(i, j).B;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
num /= bmp.Width * bmp.Height;
|
|
|
|
|
for (int i = 0; i < bmp.Width; i++)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < bmp.Height; j++)
|
|
|
|
|
{
|
|
|
|
|
int num2 = (int)(byte.MaxValue - bmp.GetPixel(i, j).B);
|
|
|
|
|
Color color = (num2 > num) ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255, 255, 255);
|
|
|
|
|
bmp.SetPixel(i, j, color);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return bmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000413 RID: 1043 RVA: 0x000177B4 File Offset: 0x000159B4
|
|
|
|
|
public static Bitmap ConvertTo1Bpp2(Bitmap img)
|
|
|
|
|
{
|
|
|
|
|
int width = img.Width;
|
|
|
|
|
int height = img.Height;
|
|
|
|
|
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format1bppIndexed);
|
|
|
|
|
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
|
|
|
|
|
for (int i = 0; i < height; i++)
|
|
|
|
|
{
|
|
|
|
|
byte[] array = new byte[(width + 7) / 8];
|
|
|
|
|
for (int j = 0; j < width; j++)
|
|
|
|
|
{
|
|
|
|
|
if ((double)img.GetPixel(j, i).GetBrightness() >= 0.5)
|
|
|
|
|
{
|
|
|
|
|
byte[] array2 = array;
|
|
|
|
|
int num = j / 8;
|
|
|
|
|
array2[num] |= (byte)(128 >> j % 8);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Marshal.Copy(array, 0, (IntPtr)((int)bitmapData.Scan0 + bitmapData.Stride * i), array.Length);
|
|
|
|
|
}
|
|
|
|
|
return bitmap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000414 RID: 1044 RVA: 0x000178B0 File Offset: 0x00015AB0
|
|
|
|
|
public static string Get1BppBase64FromImage(Image img)
|
|
|
|
|
{
|
|
|
|
|
Bitmap img2 = CommonMethod.ConvertTo1Bpp2(img as Bitmap);
|
|
|
|
|
return CommonMethod.GetBase64FromImage(img2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000415 RID: 1045 RVA: 0x000178D4 File Offset: 0x00015AD4
|
|
|
|
|
public static string ConvertBase64To1BppBase64(string base64)
|
|
|
|
|
{
|
|
|
|
|
Image imageFromBase = CommonMethod.GetImageFromBase64(base64);
|
|
|
|
|
return CommonMethod.Get1BppBase64FromImage(imageFromBase);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000416 RID: 1046 RVA: 0x000178F4 File Offset: 0x00015AF4
|
|
|
|
|
public static Renderer GetAdvDrawingInfoRender(Renderer itemInfoRender)
|
|
|
|
|
{
|
|
|
|
|
Renderer result;
|
|
|
|
|
if (itemInfoRender is SimpleRenderer)
|
|
|
|
|
{
|
|
|
|
|
SimpleRenderer simpleRenderer = itemInfoRender as SimpleRenderer;
|
|
|
|
|
result = new SimpleRenderer
|
|
|
|
|
{
|
|
|
|
|
Description = simpleRenderer.Description,
|
|
|
|
|
Label = simpleRenderer.Label,
|
|
|
|
|
Symbol = CommonMethod.GetCIMSymbolReference(simpleRenderer.Symbol as FSymbol)
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
else if (itemInfoRender is UniqueValueRenderer)
|
|
|
|
|
{
|
|
|
|
|
UniqueValueRenderer uniqueValueRenderer = itemInfoRender as UniqueValueRenderer;
|
|
|
|
|
UniqueValueRenderer uniqueValueRenderer2 = new UniqueValueRenderer
|
|
|
|
|
{
|
|
|
|
|
Field1 = uniqueValueRenderer.Field1,
|
|
|
|
|
Field2 = uniqueValueRenderer.Field2,
|
|
|
|
|
Field3 = uniqueValueRenderer.Field3,
|
|
|
|
|
DefaultLabel = uniqueValueRenderer.DefaultLabel,
|
|
|
|
|
FieldDelimiter = uniqueValueRenderer.FieldDelimiter
|
|
|
|
|
};
|
|
|
|
|
CIMSymbolReference cimsymbolReference = CommonMethod.GetCIMSymbolReference(uniqueValueRenderer.DefaultSymbol as FSymbol);
|
|
|
|
|
uniqueValueRenderer2.DefaultSymbol = cimsymbolReference;
|
|
|
|
|
for (int i = 0; i < uniqueValueRenderer.UniqueValueInfos.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
UniqueValueInfo uniqueValueInfo = uniqueValueRenderer.UniqueValueInfos[i];
|
|
|
|
|
UniqueValueInfo uniqueValueInfo2 = new UniqueValueInfo
|
|
|
|
|
{
|
|
|
|
|
Label = uniqueValueInfo.Label,
|
|
|
|
|
Description = uniqueValueInfo.Description,
|
|
|
|
|
Value = uniqueValueInfo.Value
|
|
|
|
|
};
|
|
|
|
|
CIMSymbolReference cimsymbolReference2 = CommonMethod.GetCIMSymbolReference(uniqueValueInfo.Symbol as FSymbol);
|
|
|
|
|
cimsymbolReference2.SymbolName = "Symbol_" + (i + 2).ToString();
|
|
|
|
|
uniqueValueInfo2.Symbol = cimsymbolReference2;
|
|
|
|
|
uniqueValueRenderer2.UniqueValueInfos.Add(uniqueValueInfo2);
|
|
|
|
|
}
|
|
|
|
|
result = uniqueValueRenderer2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000417 RID: 1047 RVA: 0x00017AE0 File Offset: 0x00015CE0
|
|
|
|
|
private static CIMSymbolReference GetCIMSymbolReference(FSymbol fSymbol)
|
|
|
|
|
{
|
|
|
|
|
CIMSymbolReference cimsymbolReference = new CIMSymbolReference();
|
|
|
|
|
cimsymbolReference.SymbolName = "Symbol_1";
|
|
|
|
|
CIMPolygonSymbol cimpolygonSymbol = new CIMPolygonSymbol();
|
|
|
|
|
cimpolygonSymbol.SymbolLayers = new List<SymbolLayer>();
|
|
|
|
|
CIMFilledStroke cimfilledStroke = new CIMFilledStroke();
|
|
|
|
|
cimfilledStroke.Pattern = new CIMSolidPattern
|
|
|
|
|
{
|
|
|
|
|
Color = fSymbol.Outline.Color
|
|
|
|
|
};
|
|
|
|
|
cimfilledStroke.Width = fSymbol.Outline.Width;
|
|
|
|
|
cimpolygonSymbol.SymbolLayers.Add(cimfilledStroke);
|
|
|
|
|
if (fSymbol is PFSymbol)
|
|
|
|
|
{
|
|
|
|
|
PFSymbol pfsymbol = fSymbol as PFSymbol;
|
|
|
|
|
CIMFill cimfill = new CIMFill();
|
|
|
|
|
CIMTiledPattern cimtiledPattern = new CIMTiledPattern
|
|
|
|
|
{
|
|
|
|
|
Height = pfsymbol.Height,
|
|
|
|
|
Url = "data:image/bmp;base64," + CommonMethod.ConvertBase64To1BppBase64(pfsymbol.ImageData)
|
|
|
|
|
};
|
|
|
|
|
cimtiledPattern.ColorSubstitutions.Add(new CIMColorSubstitution
|
|
|
|
|
{
|
|
|
|
|
NewColor = fSymbol.Outline.Color,
|
|
|
|
|
OldColor = new int[]
|
|
|
|
|
{
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
255
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
cimtiledPattern.ColorSubstitutions.Add(new CIMColorSubstitution
|
|
|
|
|
{
|
|
|
|
|
NewColor = new int[]
|
|
|
|
|
{
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255
|
|
|
|
|
},
|
|
|
|
|
OldColor = new int[]
|
|
|
|
|
{
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
cimfill.Pattern = cimtiledPattern;
|
|
|
|
|
cimpolygonSymbol.SymbolLayers.Add(cimfill);
|
|
|
|
|
}
|
|
|
|
|
CIMFill cimfill2 = new CIMFill();
|
|
|
|
|
if (fSymbol is SFSymbol)
|
|
|
|
|
{
|
|
|
|
|
SFSymbol sfsymbol = fSymbol as SFSymbol;
|
|
|
|
|
cimfill2.Pattern = new CIMSolidPattern
|
|
|
|
|
{
|
|
|
|
|
Color = sfsymbol.Color
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cimfill2.Pattern = new CIMSolidPattern
|
|
|
|
|
{
|
|
|
|
|
Color = new int[]
|
|
|
|
|
{
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255,
|
|
|
|
|
255
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
cimpolygonSymbol.SymbolLayers.Add(cimfill2);
|
|
|
|
|
cimsymbolReference.Symbol = cimpolygonSymbol;
|
|
|
|
|
return cimsymbolReference;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000418 RID: 1048 RVA: 0x00017CEC File Offset: 0x00015EEC
|
|
|
|
|
public static float[] rgb2hsb(int rgbR, int rgbG, int rgbB)
|
|
|
|
|
{
|
|
|
|
|
int[] array = new int[]
|
|
|
|
|
{
|
|
|
|
|
rgbR,
|
|
|
|
|
rgbG,
|
|
|
|
|
rgbB
|
|
|
|
|
};
|
|
|
|
|
Array.Sort<int>(array);
|
|
|
|
|
int num = array[2];
|
|
|
|
|
int num2 = array[0];
|
|
|
|
|
float num3 = (float)num / 255f;
|
|
|
|
|
float num4 = (num == 0) ? 0f : ((float)(num - num2) / (float)num);
|
|
|
|
|
float num5 = 0f;
|
|
|
|
|
if (num == rgbR && rgbG >= rgbB)
|
|
|
|
|
{
|
|
|
|
|
num5 = (float)(rgbG - rgbB) * 60f / (float)(num - num2) + 0f;
|
|
|
|
|
}
|
|
|
|
|
else if (num == rgbR && rgbG < rgbB)
|
|
|
|
|
{
|
|
|
|
|
num5 = (float)(rgbG - rgbB) * 60f / (float)(num - num2) + 360f;
|
|
|
|
|
}
|
|
|
|
|
else if (num == rgbG)
|
|
|
|
|
{
|
|
|
|
|
num5 = (float)(rgbB - rgbR) * 60f / (float)(num - num2) + 120f;
|
|
|
|
|
}
|
|
|
|
|
else if (num == rgbB)
|
|
|
|
|
{
|
|
|
|
|
num5 = (float)(rgbR - rgbG) * 60f / (float)(num - num2) + 240f;
|
|
|
|
|
}
|
|
|
|
|
if (float.IsNaN(num5))
|
|
|
|
|
{
|
|
|
|
|
num5 = 0f;
|
|
|
|
|
}
|
|
|
|
|
return new float[]
|
|
|
|
|
{
|
|
|
|
|
num5,
|
|
|
|
|
num4,
|
|
|
|
|
num3
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x06000419 RID: 1049 RVA: 0x00017E28 File Offset: 0x00016028
|
|
|
|
|
public static float[] rgb2hsb(Color color)
|
|
|
|
|
{
|
|
|
|
|
return CommonMethod.rgb2hsb((int)color.R, (int)color.G, (int)color.B);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041A RID: 1050 RVA: 0x00017E54 File Offset: 0x00016054
|
|
|
|
|
public static Color hsb2rgb(float h, float s, float v)
|
|
|
|
|
{
|
|
|
|
|
float num = 0f;
|
|
|
|
|
float num2 = 0f;
|
|
|
|
|
float num3 = 0f;
|
|
|
|
|
int num4 = (int)(h / 60f % 6f);
|
|
|
|
|
float num5 = h / 60f - (float)num4;
|
|
|
|
|
float num6 = v * (1f - s);
|
|
|
|
|
float num7 = v * (1f - num5 * s);
|
|
|
|
|
float num8 = v * (1f - (1f - num5) * s);
|
|
|
|
|
switch (num4)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
num = v;
|
|
|
|
|
num2 = num8;
|
|
|
|
|
num3 = num6;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
num = num7;
|
|
|
|
|
num2 = v;
|
|
|
|
|
num3 = num6;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
num = num6;
|
|
|
|
|
num2 = v;
|
|
|
|
|
num3 = num8;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
num = num6;
|
|
|
|
|
num2 = num7;
|
|
|
|
|
num3 = v;
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
num = num8;
|
|
|
|
|
num2 = num6;
|
|
|
|
|
num3 = v;
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
num = v;
|
|
|
|
|
num2 = num6;
|
|
|
|
|
num3 = num7;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return Color.FromArgb((int)((double)num * 255.0), (int)((double)num2 * 255.0), (int)((double)num3 * 255.0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041B RID: 1051 RVA: 0x00017F50 File Offset: 0x00016150
|
|
|
|
|
public static void BuildItemInfoTypes(ItemInfo itemInfo)
|
|
|
|
|
{
|
|
|
|
|
if (itemInfo.DrawingInfo.Renderer is UniqueValueRenderer)
|
|
|
|
|
{
|
|
|
|
|
UniqueValueRenderer uniqueValueRenderer = itemInfo.DrawingInfo.Renderer as UniqueValueRenderer;
|
|
|
|
|
foreach (UniqueValueInfo uniqueValueInfo in uniqueValueRenderer.UniqueValueInfos)
|
|
|
|
|
{
|
|
|
|
|
UniqueType uniqueType = new UniqueType
|
|
|
|
|
{
|
|
|
|
|
Id = uniqueValueInfo.Value,
|
|
|
|
|
Name = uniqueValueInfo.Value
|
|
|
|
|
};
|
|
|
|
|
Template template = CommonMethod.GetTemplate(itemInfo);
|
|
|
|
|
if (uniqueValueRenderer.DefaultSymbol is MSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolPoint";
|
|
|
|
|
}
|
|
|
|
|
else if (uniqueValueRenderer.DefaultSymbol is FSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolPolygon";
|
|
|
|
|
}
|
|
|
|
|
else if (uniqueValueRenderer.DefaultSymbol is LSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolLine";
|
|
|
|
|
}
|
|
|
|
|
template.Name = uniqueValueInfo.Value;
|
|
|
|
|
template.SetAttributeValue(itemInfo.TypeIdField, uniqueValueInfo.Value);
|
|
|
|
|
uniqueType.Templates.Add(template);
|
|
|
|
|
itemInfo.Types.Add(uniqueType);
|
|
|
|
|
}
|
|
|
|
|
itemInfo.Templates.Clear();
|
|
|
|
|
}
|
|
|
|
|
else if (itemInfo.DrawingInfo.Renderer is SimpleRenderer)
|
|
|
|
|
{
|
|
|
|
|
Template template = CommonMethod.GetTemplate(itemInfo);
|
|
|
|
|
Symbol symbol = (itemInfo.DrawingInfo.Renderer as SimpleRenderer).Symbol;
|
|
|
|
|
if (symbol is MSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolPoint";
|
|
|
|
|
}
|
|
|
|
|
else if (symbol is FSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolPolygon";
|
|
|
|
|
}
|
|
|
|
|
else if (symbol is LSymbol)
|
|
|
|
|
{
|
|
|
|
|
template.DrawingTool = "esriFeatureEditToolLine";
|
|
|
|
|
}
|
|
|
|
|
template.Name = itemInfo.Name;
|
|
|
|
|
itemInfo.Templates.Clear();
|
|
|
|
|
itemInfo.Templates.Add(template);
|
|
|
|
|
itemInfo.Types.Clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041C RID: 1052 RVA: 0x000181A0 File Offset: 0x000163A0
|
|
|
|
|
private static Template GetTemplate(ItemInfo itemInfo)
|
|
|
|
|
{
|
|
|
|
|
Template template = new Template();
|
|
|
|
|
foreach (Field field in itemInfo.Fields)
|
|
|
|
|
{
|
|
|
|
|
template.Prototype.Attributes.Add(field.Name, CommonMethod.GetFieldDefaultValue(field.Type));
|
|
|
|
|
}
|
|
|
|
|
return template;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041D RID: 1053 RVA: 0x00018224 File Offset: 0x00016424
|
|
|
|
|
private static object GetFieldDefaultValue(esriFieldType fieldType)
|
|
|
|
|
{
|
|
|
|
|
object result = null;
|
|
|
|
|
switch (fieldType)
|
|
|
|
|
{
|
|
|
|
|
case esriFieldType.esriFieldTypeSmallInteger:
|
|
|
|
|
case esriFieldType.esriFieldTypeInteger:
|
|
|
|
|
case esriFieldType.esriFieldTypeSingle:
|
|
|
|
|
case esriFieldType.esriFieldTypeDouble:
|
|
|
|
|
case esriFieldType.esriFieldTypeOID:
|
|
|
|
|
result = 0;
|
|
|
|
|
break;
|
|
|
|
|
case esriFieldType.esriFieldTypeString:
|
|
|
|
|
case esriFieldType.esriFieldTypeGUID:
|
|
|
|
|
case esriFieldType.esriFieldTypeGlobalID:
|
|
|
|
|
case esriFieldType.esriFieldTypeXML:
|
|
|
|
|
result = " ";
|
|
|
|
|
break;
|
|
|
|
|
case esriFieldType.esriFieldTypeDate:
|
|
|
|
|
case esriFieldType.esriFieldTypeGeometry:
|
|
|
|
|
case esriFieldType.esriFieldTypeBlob:
|
|
|
|
|
case esriFieldType.esriFieldTypeRaster:
|
|
|
|
|
result = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041E RID: 1054 RVA: 0x00018290 File Offset: 0x00016490
|
|
|
|
|
public static Image GetImageFrom(FSymbol fSymbol, int height, int width)
|
|
|
|
|
{
|
|
|
|
|
float num = (float)((height > width) ? width : height) / 2f - 1f;
|
|
|
|
|
float num2 = (float)fSymbol.Outline.Width;
|
|
|
|
|
Bitmap bitmap = new Bitmap(width, height);
|
|
|
|
|
Graphics graphics = Graphics.FromImage(bitmap);
|
|
|
|
|
SolidBrush brush = new SolidBrush(CommonMethod.GetColorFromInt4Color(fSymbol.Outline.Color));
|
|
|
|
|
graphics.FillRectangle(brush, 0, 0, width, height);
|
|
|
|
|
if (num2 > num)
|
|
|
|
|
{
|
|
|
|
|
num2 = num;
|
|
|
|
|
}
|
|
|
|
|
Brush brush2 = null;
|
|
|
|
|
if (fSymbol is SFSymbol)
|
|
|
|
|
{
|
|
|
|
|
SFSymbol sfsymbol = fSymbol as SFSymbol;
|
|
|
|
|
brush2 = new SolidBrush(CommonMethod.GetColorFromInt4Color(sfsymbol.Color));
|
|
|
|
|
}
|
|
|
|
|
else if (fSymbol is PFSymbol)
|
|
|
|
|
{
|
|
|
|
|
PFSymbol pfsymbol = fSymbol as PFSymbol;
|
|
|
|
|
brush2 = new TextureBrush(CommonMethod.GetImageFromBase64(pfsymbol.ImageData));
|
|
|
|
|
}
|
|
|
|
|
Image result;
|
|
|
|
|
if (brush2 == null)
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
graphics.FillRectangle(brush2, num2, num2, (float)width - num2 * 2f, (float)height - num2 * 2f);
|
|
|
|
|
graphics.Save();
|
|
|
|
|
graphics.Dispose();
|
|
|
|
|
result = bitmap;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x0600041F RID: 1055 RVA: 0x000183B0 File Offset: 0x000165B0
|
|
|
|
|
public static LabelingInfo GetLabelInfo(Font font, Color fontColor, string fieldName, int minScale, int maxScale)
|
|
|
|
|
{
|
|
|
|
|
LabelingInfo labelingInfo = new LabelingInfo();
|
|
|
|
|
labelingInfo.LabelExpression = string.Format("[{0}]", fieldName);
|
|
|
|
|
labelingInfo.MaxScale = maxScale;
|
|
|
|
|
labelingInfo.MinScale = minScale;
|
|
|
|
|
labelingInfo.Symbol = new TSSymbol();
|
|
|
|
|
labelingInfo.Symbol.Color = new int[]
|
|
|
|
|
{
|
|
|
|
|
(int)fontColor.R,
|
|
|
|
|
(int)fontColor.G,
|
|
|
|
|
(int)fontColor.B,
|
|
|
|
|
(int)fontColor.A
|
|
|
|
|
};
|
|
|
|
|
labelingInfo.Symbol.Font = new ESRIFont
|
|
|
|
|
{
|
|
|
|
|
Family = font.FontFamily.GetName(CultureInfo.GetCultureInfo("en-us").LCID),
|
|
|
|
|
Size = (int)font.Size
|
|
|
|
|
};
|
|
|
|
|
if (font.Bold)
|
|
|
|
|
{
|
|
|
|
|
labelingInfo.Symbol.Font.Weight = "bold";
|
|
|
|
|
}
|
|
|
|
|
if (font.Underline)
|
|
|
|
|
{
|
|
|
|
|
labelingInfo.Symbol.Font.Decoration = "underline";
|
|
|
|
|
}
|
|
|
|
|
return labelingInfo;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|