private void task_TaskUpdate(object sender, DrawTaskEventArgs e) { DrawLayerTask task = (DrawLayerTask)sender; bool canShow = true; lock (this) { int index = tasks.IndexOf(task); for (int i = 0; i < index; i++) { if (tasks[i].layer.Datatable.TableType != DatatableType.Point && tasks[i].layer.Datatable.TableType != DatatableType.Line) { canShow = false; break; } } } if (task.state == 0)//εε§ηΆζ { showEngine.Insert(task.layer.LayerID, task.layerIndex, e.bitmap, canShow, false); task.state = 1; } else { showEngine.Combine(task.layer.LayerID, e.bitmap, canShow, false); } }
private void DoDrawLayers() { for (int i = _map.Layers.Count - 1; i >= 0; i--) { Layer layer = _map.Layers[i]; DrawLayerTask task = GetTask(layer); if (task != null) { task.layerIndex = i; _mapDrawEngine.InsertTask(task); } } _mapDrawEngine.StartAllTask(); }
private void DoDrawLayer(Layer layer) { int index = _map.Layers.IndexOf(layer); if (index >= 0) { DrawLayerTask task = GetTask(layer); if (task != null) { task.layerIndex = index; _mapDrawEngine.InsertTask(task); task.Start(); } } }
public void InsertTask(DrawLayerTask task) { lock (this) { foreach (DrawLayerTask item in tasks) { if (item.layer.LayerID == task.layer.LayerID) { RemoveTask(item); break; } } tasks.Add(task); task.TaskComplete += task_TaskComplete; task.TaskUpdate += task_TaskUpdate; } }
private DrawLayerTask GetTask(Layer layer) { DrawLayerTask task = null; if (layer is RasterLayer) { task = new DrawRasterTask(_workspace, layer as RasterLayer, this.Extent, this.Width, this.Height); } else if (layer is PointLayer) { task = new DrawPointTask(_workspace, layer as PointLayer, this.Extent, this.Width, this.Height); } else if (layer is LineLayer) { task = new DrawLineTask(_workspace, layer as LineLayer, this.Extent, this.Width, this.Height); } else if (layer is PolygonLayer) { task = new DrawPolygonTask(_workspace, layer as PolygonLayer, this.Extent, this.Width, this.Height); } return(task); }
private void task_TaskComplete(object sender, DrawTaskEventArgs e) { lock (this) { DrawLayerTask task = (DrawLayerTask)sender; List <DrawLayerTask> ptasks = new List <DrawLayerTask>(); Console.WriteLine("task_TaskComplete:" + task.layer.AliasName); // if (task.layer.DatatableName=="point") // { // Console.WriteLine("task_TaskComplete:" + tasks.Count); // } if (e != null) { int index = tasks.Count - 1; if (task.state == 0) { task.state = 3;//insert } else { task.state = 2;//combine } task.drawBitmap = e.bitmap; int lastIndex = -1; for (int i = 0; i < tasks.Count; i++) { if (tasks[i] != task) { if (i < index) { if (tasks[i].state != 2 && tasks[i].state != 3) { return; } else { lastIndex = i; } } else { if (tasks[i].state != 2 && tasks[i].state != 3 && tasks[i].layer.Datatable.TableType != DatatableType.Point && tasks[i].layer.Datatable.TableType != DatatableType.Line) { return; } else if (tasks[i].state != 2 && tasks[i].state != 3) { lastIndex = i - 1; break; } else { lastIndex = i; } } } else { index = i; lastIndex = i; } } // index = tasks.IndexOf(task); // if (index != 0) // { // if (task.state==0) // { // task.state = 3; // } // else task.state = 2; // task.drawBitmap = e.bitmap; // return; // } // else // { //ptasks.Add(task); List <ulong> ids = new List <ulong>(); List <int> indexs = new List <int>(); List <Bitmap> bitmaps = new List <Bitmap>(); List <bool> isInOrComs = new List <bool>(); // ids.Add(task.layer.LayerID); // indexs.Add(task.layerIndex); // bitmaps.Add(e.bitmap); // if (task.state==0) // { // isInOrComs.Add(true); // } // else // { // isInOrComs.Add(false); // } for (int i = 0; i <= /*tasks.Count-1*/ lastIndex; i++) { // if (tasks[i].state!=2&&tasks[i].state!=3) // { // break; // } // else // { ids.Add(tasks[i].layer.LayerID); indexs.Add(tasks[i].layerIndex); bitmaps.Add(tasks[i].drawBitmap); tasks[i].drawBitmap = null; ptasks.Add(tasks[i]); if (tasks[i].state == 3) { isInOrComs.Add(true); } else { isInOrComs.Add(false); } Console.WriteLine("complete :" + tasks[i].layer.AliasName); //} } showEngine.InsertOrCombine(ids, indexs, bitmaps, isInOrComs, true, true); // if (task.state == 0) // { // showEngine.Insert(task.layer.LayerID, task.layerIndex, e.bitmap, e.canShow, true); // task.state = 2; // } // else showEngine.Combine(task.layer.LayerID, e.bitmap, e.canShow, true); //} } else { ptasks.Add(task); showEngine.Remove(task.layer.LayerID); } RemoveTask(ptasks.ToArray()); } }