|
|
using GeoSigma.SigmaDrawerUtil;
|
|
|
using GeoSigmaDrawLib;
|
|
|
using System;
|
|
|
using System.Diagnostics;
|
|
|
using System.Drawing;
|
|
|
using System.Drawing.Imaging;
|
|
|
using System.IO;
|
|
|
using System.Windows.Forms;
|
|
|
using UCDraw;
|
|
|
|
|
|
namespace KevServer
|
|
|
{
|
|
|
public class WebDrawer
|
|
|
{
|
|
|
public Size DrawerSize;
|
|
|
public GeoSigmaXY Geo { get; set; }
|
|
|
|
|
|
public DrawerConfig Configuration
|
|
|
{
|
|
|
get => DrawerConfig.Instance;
|
|
|
}
|
|
|
|
|
|
public GeoLayerTree LayerTree
|
|
|
{
|
|
|
get; set;
|
|
|
}
|
|
|
|
|
|
public string DrawFileName { get; set; }
|
|
|
private Color viewBackColor = Color.White;
|
|
|
|
|
|
public Color ViewBackColor
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return viewBackColor;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
viewBackColor = value;
|
|
|
Geo?.SetViewBackcolor(viewBackColor.R, viewBackColor.G, viewBackColor.B);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Point CacheImgLocation { get; set; } = new Point(0, 0);
|
|
|
public bool EnableRedraw { get; set; } = false;
|
|
|
private WebDrawViewOperator viewOperator;
|
|
|
private bool isNewFile = true;
|
|
|
private WebDrawTool[] tools; // array of tools
|
|
|
|
|
|
private WebDrawer()
|
|
|
{
|
|
|
tools = new WebDrawTool[(int)DrawToolType.NumberOfDrawTools];
|
|
|
//tools[(int)DrawToolType.Default] = new DrawToolDefault();
|
|
|
tools[(int)DrawToolType.Select] = new WebDrawToolSelect();
|
|
|
//tools[(int)DrawToolType.Pointer] = new DrawToolPointer();
|
|
|
//tools[(int)DrawToolType.ViewWindow] = new DrawToolViewWindow();
|
|
|
//tools[(int)DrawToolType.Point] = new DrawToolPoint();
|
|
|
//tools[(int)DrawToolType.CrossPoint] = new DrawToolCrossPoint();
|
|
|
//tools[(int)DrawToolType.Curve] = new DrawToolCurve();
|
|
|
//tools[(int)DrawToolType.Proportion] = new DrawToolProportion();
|
|
|
//tools[(int)DrawToolType.RectangularCSGrid] = new DrawToolRectangularCSGrid();
|
|
|
//tools[(int)DrawToolType.Rectangle] = new DrawToolRectangle();
|
|
|
//tools[(int)DrawToolType.Ellipse] = new DrawToolEllipse();
|
|
|
//tools[(int)DrawToolType.Arc] = new DrawToolArc();
|
|
|
//tools[(int)DrawToolType.Chord] = new DrawToolChord();
|
|
|
//tools[(int)DrawToolType.Pie] = new DrawToolPie();
|
|
|
//tools[(int)DrawToolType.Equilateral] = new DrawToolEquilateral();
|
|
|
//tools[(int)DrawToolType.Text] = new DrawToolText();
|
|
|
//tools[(int)DrawToolType.BreakDirect] = new DrawToolBreakDirect();
|
|
|
//tools[(int)DrawToolType.Break] = new DrawToolBreak();
|
|
|
//tools[(int)DrawToolType.Delete] = new DrawToolDelete();
|
|
|
//tools[(int)DrawToolType.DeleteIn] = new DrawToolDeleteIn();
|
|
|
//tools[(int)DrawToolType.DeleteOut] = new DrawToolDeleteOut();
|
|
|
//tools[(int)DrawToolType.ExtendCurve] = new DrawToolExtendCurve();
|
|
|
//tools[(int)DrawToolType.TrimCurve] = new DrawToolTrimCurve();
|
|
|
//tools[(int)DrawToolType.CloseCurve] = new DrawToolCloseCurve();
|
|
|
//tools[(int)DrawToolType.MoveCurveName] = new DrawToolMoveCurveName();
|
|
|
//tools[(int)DrawToolType.LinkCurve] = new DrawToolLinkCurve();
|
|
|
//tools[(int)DrawToolType.ReverseCurve] = new DrawToolReverseCurve();
|
|
|
//tools[(int)DrawToolType.NameToZ] = new DrawToolNameToZ();
|
|
|
//tools[(int)DrawToolType.ZToName] = new DrawToolZToName();
|
|
|
//tools[(int)DrawToolType.FindCurveOfEmptyName] = new DrawToolFindCurveOfEmptyName();
|
|
|
//tools[(int)DrawToolType.RangeToImage] = new DrawToolCopyRangeAsImage();
|
|
|
//tools[(int)DrawToolType.LeftAlignment] = new DrawToolLeftAlignment();
|
|
|
//tools[(int)DrawToolType.RightAlignment] = new DrawToolRightAlignment();
|
|
|
//tools[(int)DrawToolType.TopAlignment] = new DrawToolTopAlignment();
|
|
|
//tools[(int)DrawToolType.BottomAlignment] = new DrawToolBottomAlignment();
|
|
|
//tools[(int)DrawToolType.HCenterAlignment] = new DrawToolHCenterAlignment();
|
|
|
//tools[(int)DrawToolType.VCenterAlignment] = new DrawToolVCenterAlignment();
|
|
|
//tools[(int)DrawToolType.DisplayOrderTop] = new DrawToolDisplayOrderTop();
|
|
|
//tools[(int)DrawToolType.DisplayOrderBottom] = new DrawToolDisplayOrderBottom();
|
|
|
//tools[(int)DrawToolType.DisplayOrderFront] = new DrawToolDisplayOrderFront();
|
|
|
//tools[(int)DrawToolType.DisplayOrderBack] = new DrawToolDisplayOrderBack();
|
|
|
//tools[(int)DrawToolType.HorizontalMirror] = new DrawToolHorizontalMirror();
|
|
|
//tools[(int)DrawToolType.VerticalMirror] = new DrawToolVerticalMirror();
|
|
|
//tools[(int)DrawToolType.EditCurveNode] = new DrawToolEditCurveNode();
|
|
|
//tools[(int)DrawToolType.CurveSmooth] = new DrawToolCurveSmooth();
|
|
|
//tools[(int)DrawToolType.CutOutByRect] = new DrawToolCutOutByRect();
|
|
|
//tools[(int)DrawToolType.CutOutByPickup] = new DrawToolCutOutByPickup();
|
|
|
//tools[(int)DrawToolType.CutInByRect] = new DrawToolCutInByRect();
|
|
|
//tools[(int)DrawToolType.CutInByPickup] = new DrawToolCutInByPickup();
|
|
|
//tools[(int)DrawToolType.CalculateVolume] = new DrawToolCalculateSurfaceVolume();
|
|
|
//tools[(int)DrawToolType.SetZValueOfSurface] = new DrawToolSurfaceSetZValue();
|
|
|
//tools[(int)DrawToolType.EditGridPoint] = new DrawToolEditGridPoint();
|
|
|
//tools[(int)DrawToolType.PointPropertyClear] = new DrawToolPointPropertyClear();
|
|
|
//tools[(int)DrawToolType.PointPropertySet] = new DrawToolPointPropertySet();
|
|
|
//tools[(int)DrawToolType.CurvePropertyClear] = new DrawToolCurvePropertyClear();
|
|
|
//tools[(int)DrawToolType.CurvePropertySet] = new DrawToolCurvePropertySet();
|
|
|
//tools[(int)DrawToolType.HighLightTip] = new DrawToolHighLightTip();
|
|
|
//tools[(int)DrawToolType.ArcToCurve] = new DrawToolArcToCurve();
|
|
|
//tools[(int)DrawToolType.CurveZFromSurface] = new DrawToolCurveZFromSurface();
|
|
|
//tools[(int)DrawToolType.Calibration2] = new DrawToolCalibrationTwo();
|
|
|
//tools[(int)DrawToolType.Calibration4] = new DrawToolCalibrationFour();
|
|
|
//tools[(int)DrawToolType.ConnectCurveFilling] = new DrawToolFilling();
|
|
|
//tools[(int)DrawToolType.SolidLink] = new DrawToolSolidLink();
|
|
|
//tools[(int)DrawToolType.SolidAuto] = new DrawToolSolidAuto();
|
|
|
//tools[(int)DrawToolType.PositiveNegativeSign] = new DrawToolPositiveNegativeSign();
|
|
|
//tools[(int)DrawToolType.DeleteCondition] = new DrawToolDeletionCondition();
|
|
|
//tools[(int)DrawToolType.SaveAsSymbol] = new DrawToolSaveAsSymbol();
|
|
|
//tools[(int)DrawToolType.FractionPoint] = new DrawToolFractionPoint();
|
|
|
//tools[(int)DrawToolType.CurveNameSetting] = new DrawToolCurveNameSetting();
|
|
|
//tools[(int)DrawToolType.CurveBroaden] = new DrawToolCurveBroaden();
|
|
|
//tools[(int)DrawToolType.FaultSymply] = new DrawToolFaultSymply();
|
|
|
//tools[(int)DrawToolType.SetContourName] = new DrawToolContourName();
|
|
|
//tools[(int)DrawToolType.RangeToImageEx] = new DrawToolCopyRangeAsImageEx();
|
|
|
//tools[(int)DrawToolType.PolygonToImage] = new DrawToolCopyPolygonAsImage();
|
|
|
//tools[(int)DrawToolType.WellGroup] = new DrawToolWellGroup();
|
|
|
//tools[(int)DrawToolType.WellGroupEdit] = new DrawToolWellGroupEdit();
|
|
|
//tools[(int)DrawToolType.EditWellGroupBranchCurveNode] = new DrawToolEditWellBranchCurve();
|
|
|
}
|
|
|
|
|
|
private WebDrawer(int width, int height)
|
|
|
: this()
|
|
|
{
|
|
|
if (width <= 0 || height <= 0)
|
|
|
{
|
|
|
DrawerSize = new Size(1024, 768);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
DrawerSize = new Size(width, height);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
|
{
|
|
|
if (Geo != null)
|
|
|
{
|
|
|
Geo.Dispose();
|
|
|
Geo = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void InitGlobaVariable()
|
|
|
{
|
|
|
// 5000 如果是 double 必须加 D,如果类型不匹配,会转换失败
|
|
|
double extensionLength = Configuration.FindConfigValue("Extension", "Length", 5000D);
|
|
|
|
|
|
Geo.Global_SetExtendLength(extensionLength);
|
|
|
|
|
|
double xStep = Configuration.FindConfigValue("GridSet", "X", 20D);
|
|
|
double yStep = Configuration.FindConfigValue("GridSet", "Y", 20D);
|
|
|
|
|
|
Geo.SetGridStep(xStep, yStep);
|
|
|
}
|
|
|
|
|
|
private DrawToolType activeTool; // active drawing tool
|
|
|
|
|
|
public DrawToolType ActiveTool
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return activeTool;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
if (tools == null || activeTool == value)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
//ReDraw();
|
|
|
DrawToolType oldTool = activeTool;
|
|
|
activeTool = value;
|
|
|
|
|
|
// FIXME: 这个对象需要传递一个多边形,暂时没想到好办法,在这里做下特殊处理
|
|
|
if (activeTool == DrawToolType.PolygonToImage)
|
|
|
{
|
|
|
long pos = Geo.SelectGetPolygon();
|
|
|
//(tools[(int)activeTool] as DrawToolCopyPolygonAsImage).PolygonPosition = pos;
|
|
|
}
|
|
|
|
|
|
tools[(int)oldTool]?.End();
|
|
|
if (oldTool != DrawToolType.HighLightTip)
|
|
|
{
|
|
|
// this.tools[(int)DrawToolType.HighLightTip].End();
|
|
|
}
|
|
|
// 默认命令是Default或Select 这取决于上一次选中的是Default还是Select
|
|
|
if (value == DrawToolType.Select
|
|
|
|| value == DrawToolType.Default
|
|
|
|| value == DrawToolType.WellGroupEdit)
|
|
|
{
|
|
|
//defaultTool = value;
|
|
|
}
|
|
|
if (value == DrawToolType.Finsih)
|
|
|
{
|
|
|
//activeTool = defaultTool;
|
|
|
}
|
|
|
|
|
|
//activeTool = value;
|
|
|
DrawItemType itemType = tools[(int)activeTool].ItemType;
|
|
|
|
|
|
// ChangeContextMenu(activeTool);
|
|
|
if (Geo == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (itemType == DrawItemType.ITEM_VIEW_PAN || itemType == DrawItemType.ITEM_VIEW_WINDOW)
|
|
|
{
|
|
|
// Geo.SetViewPan();
|
|
|
// this.Invalidate();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//Geo.SetItem((int)itemType);
|
|
|
//tools[(int)activeTool].SigmaDrawer = this;
|
|
|
//tools[(int)activeTool].Start();
|
|
|
if (oldTool == DrawToolType.Select && activeTool != DrawToolType.RangeToImage)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static WebDrawer OpenFile(string fileName)
|
|
|
{
|
|
|
var webDrawer = new WebDrawer();
|
|
|
if (webDrawer.OpenFileImpl(fileName) != null)
|
|
|
{
|
|
|
return webDrawer;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
private GeoSigmaXY OpenFileImpl(string fileName)
|
|
|
{
|
|
|
DrawFileName = fileName;
|
|
|
Console.WriteLine(DrawFileName);
|
|
|
Geo?.Dispose();
|
|
|
Geo = new GeoSigmaXY();
|
|
|
Geo.EnableRotateEdit(false);
|
|
|
foreach (WebDrawTool t in tools)
|
|
|
{
|
|
|
if (t != null)
|
|
|
{
|
|
|
t.Geo = Geo;
|
|
|
//t.Init();
|
|
|
}
|
|
|
}
|
|
|
LayerTree = new GeoLayerTree(this.Geo);
|
|
|
|
|
|
bool bSuccess = Geo.OpenDocument(DrawFileName);
|
|
|
if (!bSuccess)
|
|
|
{
|
|
|
Geo?.Dispose();
|
|
|
Geo = null;
|
|
|
return null;
|
|
|
}
|
|
|
Geo.SetAntiAlias(false);
|
|
|
Geo.SetViewBackcolor(ViewBackColor.R, ViewBackColor.G, ViewBackColor.B);
|
|
|
isNewFile = true;
|
|
|
EnableRedraw = true;
|
|
|
|
|
|
InitGlobaVariable();
|
|
|
viewOperator = new WebDrawViewOperator(Geo);
|
|
|
return Geo;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 保存文件.
|
|
|
/// </summary>
|
|
|
/// <returns>A bool.</returns>
|
|
|
public bool SaveFile()
|
|
|
{
|
|
|
if (this.Geo == null)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
return this.Geo.SaveFile();
|
|
|
}
|
|
|
|
|
|
public void OnPaint(Graphics g)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
Graphics gMain = g;
|
|
|
if (Geo == null)
|
|
|
{
|
|
|
ClearGraphics(gMain);
|
|
|
return;
|
|
|
}
|
|
|
Rectangle rect = new Rectangle(0, 0, this.DrawerSize.Width, this.DrawerSize.Height);
|
|
|
|
|
|
if (isNewFile)
|
|
|
{
|
|
|
IntPtr pBmpDC = g.GetHdc();
|
|
|
Geo.InitializeImg(pBmpDC, rect.X, rect.Y, rect.Right, rect.Bottom);
|
|
|
Geo.DrawImg(false);
|
|
|
g.ReleaseHdc();
|
|
|
isNewFile = false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Geo.SetViewRect(rect.Left, rect.Top, rect.Right, rect.Bottom);
|
|
|
IntPtr pBmpDC = g.GetHdc();
|
|
|
Geo.SetImgDC(pBmpDC);
|
|
|
Geo.DrawImg(false);
|
|
|
g.ReleaseHdc(pBmpDC);
|
|
|
EnableRedraw = false;
|
|
|
}
|
|
|
|
|
|
//if (PaintingImage != null)
|
|
|
//{
|
|
|
// DrawPaintingImage(gMain);
|
|
|
//}
|
|
|
//if (!(viewOperation != null && viewOperation.IsOnMoving))
|
|
|
//{
|
|
|
// DrawAssistant(gMain);
|
|
|
//}
|
|
|
|
|
|
//DrawerEnd?.Invoke(gMain);
|
|
|
|
|
|
//OnDrawOther(gMain);
|
|
|
}
|
|
|
catch (Exception)
|
|
|
{
|
|
|
//e.Graphics.Clear(ViewBackColor);
|
|
|
Trace.WriteLine("绘制错误,请刷新!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void ClearGraphics(Graphics g)
|
|
|
{
|
|
|
g.Clear(ViewBackColor);
|
|
|
}
|
|
|
|
|
|
public void ZoomIn()
|
|
|
{
|
|
|
EnableRedraw = true;
|
|
|
int zoomMode = Configuration.FindConfigValue("Display", "ZoomMode", 0);
|
|
|
//int zoomMode = int.Parse(config.ReadString("Display", "ZoomMode", "0"));
|
|
|
Geo.SetZoomMode(zoomMode);
|
|
|
Geo.ViewEnlarge();
|
|
|
}
|
|
|
|
|
|
public void ZoomOut()
|
|
|
{
|
|
|
EnableRedraw = true;
|
|
|
int zoomMode = Configuration.FindConfigValue("Display", "ZoomMode", 0);
|
|
|
Geo.SetZoomMode(zoomMode);
|
|
|
Geo.ViewReduce();
|
|
|
|
|
|
// 判断真实坐标范围,超出有效范围就回退,当真实地图缩到非常小时,计算会出问题,主要和浮点精度有关
|
|
|
if (RealViewRectOutOfRange())
|
|
|
{
|
|
|
Geo.Sigma_UndoView();
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void ViewAll()
|
|
|
{
|
|
|
EnableRedraw = true;
|
|
|
Geo.ViewAll();
|
|
|
}
|
|
|
|
|
|
private bool OutOfRange(double value)
|
|
|
{
|
|
|
const double equatorialCircumference = 40009 * 1000; // 有效范围,40009千米,赤道周长
|
|
|
return Math.Abs(value) > equatorialCircumference * 100;
|
|
|
}
|
|
|
|
|
|
private bool RealViewRectOutOfRange()
|
|
|
{
|
|
|
double left = 0.0;
|
|
|
double top = 0.0;
|
|
|
double right = 0.0;
|
|
|
double bottom = 0.0;
|
|
|
Geo.GetRealViewRect(ref left, ref top, ref right, ref bottom);
|
|
|
|
|
|
return OutOfRange(left) || OutOfRange(top) || OutOfRange(right) || OutOfRange(bottom);
|
|
|
}
|
|
|
|
|
|
public Bitmap OnLButtonDown(double x, double y)
|
|
|
{
|
|
|
if (this.activeTool != DrawToolType.Select)
|
|
|
{
|
|
|
this.ActiveTool = DrawToolType.Select;
|
|
|
(tools[(int)ActiveTool]).Start();
|
|
|
}
|
|
|
WebDrawToolSelect tool = (tools[(int)DrawToolType.Select]) as WebDrawToolSelect;
|
|
|
Bitmap bmp = tool.OnLButtonDown(new MouseEventArgs(MouseButtons.Left, 1, (int)x, (int)y, 0));
|
|
|
CacheImgLocation = tool.CacheImgLocation;
|
|
|
return bmp;
|
|
|
}
|
|
|
|
|
|
public Bitmap LButtonUp(double x, double y)
|
|
|
{
|
|
|
if (this.activeTool == DrawToolType.Select)
|
|
|
{
|
|
|
WebDrawToolSelect drawToolSelect = (tools[(int)DrawToolType.Select]) as WebDrawToolSelect;
|
|
|
if (drawToolSelect.OnLButtonUp(new MouseEventArgs(MouseButtons.Left, 1, (int)x, (int)y, 0)))
|
|
|
{
|
|
|
Bitmap bmp = new Bitmap(this.DrawerSize.Width, this.DrawerSize.Height);
|
|
|
Graphics g = Graphics.FromImage(bmp);
|
|
|
this.OnPaint(g);
|
|
|
return bmp;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 移动选择的图元到指定位置.
|
|
|
/// </summary>
|
|
|
/// <param name="x">The x,像素坐标.</param>
|
|
|
/// <param name="y">The y,像素坐标.</param>
|
|
|
/// <returns>A Bitmap.</returns>
|
|
|
public Bitmap TranslateElements(double x, double y)
|
|
|
{
|
|
|
if (this.activeTool != DrawToolType.Select)
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
WebDrawToolSelect drawToolSelect = (tools[(int)DrawToolType.Select]) as WebDrawToolSelect;
|
|
|
drawToolSelect.MoveElementsTo((int)x, (int)y);
|
|
|
Bitmap bmp = new Bitmap(this.DrawerSize.Width, this.DrawerSize.Height);
|
|
|
Graphics g = Graphics.FromImage(bmp);
|
|
|
this.OnPaint(g);
|
|
|
return bmp;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 鼠标移动事件.
|
|
|
/// </summary>
|
|
|
/// <param name="x">The x.</param>
|
|
|
/// <param name="y">The y.</param>
|
|
|
/// <returns>An int.</returns>
|
|
|
public int MouseMove(double x, double y)
|
|
|
{
|
|
|
if (this.activeTool != DrawToolType.Select)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
WebDrawToolSelect drawToolSelect = (tools[(int)DrawToolType.Select]) as WebDrawToolSelect;
|
|
|
return drawToolSelect.OnMouseMove(new MouseEventArgs(MouseButtons.Left, 1, (int)x, (int)y, 0));
|
|
|
}
|
|
|
|
|
|
public Bitmap ViewOperator(double startX, double startY, double endX, double endY)
|
|
|
{
|
|
|
SetViewOperationKind(ViewOperationKind.ViewPan);
|
|
|
viewOperator.OnLButtonDown(new MouseEventArgs(MouseButtons.Left, 1, (int)startX, (int)startY, 0));
|
|
|
bool bSuccess = viewOperator.OnLButtonUp(new MouseEventArgs(MouseButtons.Left, 1, (int)endX, (int)endY, 0));
|
|
|
if (bSuccess)
|
|
|
{
|
|
|
Bitmap bmp = new Bitmap(this.DrawerSize.Width, this.DrawerSize.Height);
|
|
|
Graphics g = Graphics.FromImage(bmp);
|
|
|
this.OnPaint(g);
|
|
|
//bmp.Save("C:\\temp\\aa.png");
|
|
|
return bmp;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public void SetViewOperationKind(ViewOperationKind kind)
|
|
|
{
|
|
|
if (viewOperator.Kind == kind)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
viewOperator.Kind = kind;
|
|
|
if (kind == ViewOperationKind.Invalid)
|
|
|
{
|
|
|
if (tools[(int)activeTool] == null)
|
|
|
{
|
|
|
//RestoreTool();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public int AddBufferData(string data)
|
|
|
{
|
|
|
return this.Geo.AddBufferData(data);
|
|
|
}
|
|
|
|
|
|
public void DeleteLayers(string[] layers, bool withSublayer = false)
|
|
|
{
|
|
|
this.Geo.DeleteLayer(layers, withSublayer);
|
|
|
}
|
|
|
|
|
|
public static byte[] ConvertBitmapToByteArray(Bitmap bitmap)
|
|
|
{
|
|
|
using (MemoryStream memoryStream = new MemoryStream())
|
|
|
{
|
|
|
// 选择图像格式,可以是Png、Jpeg等
|
|
|
bitmap.Save(memoryStream, ImageFormat.Png);
|
|
|
return memoryStream.ToArray();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} |