Example #1
0
 /// <summary>
 /// Constructs a Layer and attaches it to the specified layer container.
 /// </summary>
 /// <param name="container">Container to attach the layer to</param>
 /// <remarks>
 /// <seealso cref="Syncfusion.Windows.Forms.Diagram.ILayerContainer"/>
 /// </remarks>
 public Layer(ILayerContainer container)
 {
     this.container      = container;
     this.propertyValues = new Hashtable();
     this.SetDefaultPropertyValues();
     this.members     = new ArrayList();
     this.drawObjects = new ArrayList();
 }
Example #2
0
 /// <summary>
 /// Initialize new instance of <see cref="ToolTextSelection"/> class.
 /// </summary>
 /// <param name="serviceProvider">The service provider.</param>
 /// <param name="layer">The selection shapes layer.</param>
 /// <param name="shape">The selected shape.</param>
 /// <param name="style">The selection shapes style.</param>
 /// <param name="point">The selection point shape.</param>
 public ToolTextSelection(IServiceProvider serviceProvider, ILayerContainer layer, ITextShape shape, IShapeStyle style, IBaseShape point)
 {
     _serviceProvider = serviceProvider;
     _layer           = layer;
     _text            = shape;
     _style           = style;
     _point           = point;
 }
Example #3
0
 public SettingsLayer(ICamera camera, IScene scene, ISettingsManager <Settings> settingsManager,
                      ILayerContainer layerContainer)
 {
     _camera          = camera;
     _scene           = scene;
     _settingsManager = settingsManager;
     _layerContainer  = layerContainer;
 }
Example #4
0
 /// <summary>
 /// Initialize new instance of <see cref="ToolQuadraticBezierSelection"/> class.
 /// </summary>
 /// <param name="serviceProvider">The service provider.</param>
 /// <param name="layer">The selection shapes layer.</param>
 /// <param name="shape">The selected shape.</param>
 /// <param name="style">The selection shapes style.</param>
 /// <param name="point">The selection point shape.</param>
 public ToolQuadraticBezierSelection(IServiceProvider serviceProvider, ILayerContainer layer, IQuadraticBezierShape shape, IShapeStyle style, IBaseShape point)
 {
     _serviceProvider = serviceProvider;
     _layer           = layer;
     _quadraticBezier = shape;
     _style           = style;
     _point           = point;
 }
Example #5
0
 /// <summary>
 /// Initialize new instance of <see cref="ToolRectangleSelection"/> class.
 /// </summary>
 /// <param name="serviceProvider">The service provider.</param>
 /// <param name="layer">The selection shapes layer.</param>
 /// <param name="shape">The selected shape.</param>
 /// <param name="style">The selection shapes style.</param>
 /// <param name="point">The selection point shape.</param>
 public ToolRectangleSelection(IServiceProvider serviceProvider, ILayerContainer layer, IRectangleShape shape, IShapeStyle style, IBaseShape point)
 {
     _serviceProvider = serviceProvider;
     _layer           = layer;
     _rectangle       = shape;
     _style           = style;
     _point           = point;
 }
Example #6
0
 private void DeInitialize()
 {
     if (_layer != null)
     {
         _layer.InvalidateLayer -= Invalidate;
         _layer = default;
     }
 }
Example #7
0
 /// <summary>
 /// Add shape at specified index.
 /// </summary>
 /// <param name="project">The project instance.</param>
 /// <param name="layer">The layer instance.</param>
 /// <param name="shape">The shape instance.</param>
 /// <param name="index">The shape index.</param>
 public static void AddShapeAt(this IProjectContainer project, ILayerContainer layer, IBaseShape shape, int index)
 {
     if (layer?.Shapes != null && shape != null)
     {
         var previous = layer.Shapes;
         var next     = layer.Shapes.Insert(index, shape);
         project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
         layer.Shapes = next;
     }
 }
Example #8
0
 public ApplicationRunner(IApplication application, IWindow window, IEventDispatcher eventDispatcher,
                          ILayerContainer layerContainer, IRenderContext renderContext, Settings settings)
 {
     _application     = application;
     _window          = window;
     _eventDispatcher = eventDispatcher;
     _layerContainer  = layerContainer;
     _renderContext   = renderContext;
     _settings        = settings;
 }
Example #9
0
 /// <summary>
 /// Remove layer.
 /// </summary>
 /// <param name="project">The project instance.</param>
 /// <param name="layer">The layer instance.</param>
 public static void RemoveLayer(this IProjectContainer project, ILayerContainer layer)
 {
     if (layer.Owner is IPageContainer container && container.Layers != null)
     {
         var previous = container.Layers;
         var next     = container.Layers.Remove(layer);
         project?.History?.Snapshot(previous, next, (p) => container.Layers = p);
         container.Layers = next;
     }
 }
Example #10
0
 /// <summary>
 /// Remove shape.
 /// </summary>
 /// <param name="project">The project instance.</param>
 /// <param name="layer">The layer instance.</param>
 /// <param name="shape">The shape instance.</param>
 public static void RemoveShape(this IProjectContainer project, ILayerContainer layer, IBaseShape shape)
 {
     if (layer?.Shapes != null && shape != null)
     {
         var previous = layer.Shapes;
         var next     = layer.Shapes.Remove(shape);
         project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
         layer.Shapes = next;
     }
 }
Example #11
0
 /// <summary>
 /// Clear layer.
 /// </summary>
 /// <param name="project">The project instance.</param>
 /// <param name="layer">The layer instance.</param>
 public static void ClearLayer(this IProjectContainer project, ILayerContainer layer)
 {
     if (layer != null)
     {
         var previous = layer.Shapes;
         var next     = ImmutableArray.Create <IBaseShape>();
         project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
         layer.Shapes = next;
     }
 }
Example #12
0
        private void Initialize()
        {
            if (_layer != null)
            {
                DeInitialize();
            }

            if (DataContext is ILayerContainer layer)
            {
                _layer = layer;
                _layer.InvalidateLayer += Invalidate;
            }
        }
Example #13
0
        /// <summary>
        /// Add shapes.
        /// </summary>
        /// <param name="project">The project instance.</param>
        /// <param name="layer">The layer instance.</param>
        /// <param name="shapes">The shapes collection.</param>
        public static void AddShapes(this IProjectContainer project, ILayerContainer layer, IEnumerable <IBaseShape> shapes)
        {
            if (layer?.Shapes != null && shapes != null)
            {
                var builder = layer.Shapes.ToBuilder();
                builder.AddRange(shapes);

                var previous = layer.Shapes;
                var next     = builder.ToImmutable();
                project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
                layer.Shapes = next;
            }
        }
Example #14
0
        /// <summary>
        /// Replace shape at specified index.
        /// </summary>
        /// <param name="project">The project instance.</param>
        /// <param name="layer">The layer instance.</param>
        /// <param name="shape">The shape instance.</param>
        /// <param name="index">The shape index.</param>
        public static void ReplaceShape(this IProjectContainer project, ILayerContainer layer, IBaseShape shape, int index)
        {
            if (layer != null && shape != null && index >= 0)
            {
                var builder = layer.Shapes.ToBuilder();
                builder[index] = shape;

                var previous = layer.Shapes;
                var next     = builder.ToImmutable();
                project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
                layer.Shapes = next;
            }
        }
Example #15
0
        /// <summary>
        /// Swap shape at specified indexes.
        /// </summary>
        /// <param name="project">The project instance.</param>
        /// <param name="layer">The layer instance.</param>
        /// <param name="shape">The shape instance.</param>
        /// <param name="insertIndex">The shape insert index.</param>
        /// <param name="removeIndex">The shape remove index.</param>
        public static void SwapShape(this IProjectContainer project, ILayerContainer layer, IBaseShape shape, int insertIndex, int removeIndex)
        {
            if (layer != null && shape != null && insertIndex >= 0 && removeIndex >= 0)
            {
                var builder = layer.Shapes.ToBuilder();
                builder.Insert(insertIndex, shape);
                builder.RemoveAt(removeIndex);

                var previous = layer.Shapes;
                var next     = builder.ToImmutable();
                project?.History?.Snapshot(previous, next, (p) => layer.Shapes = p);
                layer.Shapes = next;
            }
        }
Example #16
0
        private void ReRender(RenderArgs arg, bool needComputeViewport)
        {
            if (_dummyBitmap != null)
            {
                _dummyBitmap.Dispose();
            }
            _dummyBitmap = new Bitmap(_environment.CanvasSize.Width, _environment.CanvasSize.Height);
            if (needComputeViewport) //for web
            {
                ComputeViewportProjection();
            }
            _dummyEnvelope = ExtentOfProjectionCoord.Clone() as Envelope;
            //
            ILayerContainer layerContainer = _map.LayerContainer;

            //计算用于快速坐标变换的参数
            ComputeQuickArgs();
            //构造缓存画布
            using (Graphics g = Graphics.FromImage(_dummyBitmap))
            {
                g.SmoothingMode = _map.MapArguments.SmoothingMode;
                g.Clear(_map.MapArguments.BackColor);
                //重置冲突检测
                if (_conflictorForSymbol != null && _conflictorForSymbol.Enabled)
                {
                    _conflictorForSymbol.Reset();
                }
                //
                if (_conflictorForLabel != null && _conflictorForLabel.Enabled)
                {
                    _conflictorForLabel.Reset();
                    _labelRender.Begin(_conflictorForLabel, this as IFeatureRenderEnvironment);
                }
                else
                {
                    _labelRender.Begin(null, this as IFeatureRenderEnvironment);
                }
                //绘制影像层
                DrawRasterlayers(g);

                //绘制几何形状
                DrawAllGeometries(layerContainer, g);
                //绘制标注
                DrawAllLabels(layerContainer, g);
                #region debug
                //(_conflictorForLabel as PixelConflictor).Save();
                #endregion
            }
            arg.Graphics.DrawImage(_dummyBitmap, 0, 0);
        }
Example #17
0
 public RuntimeExchanger(IFeatureRenderEnvironment environment,
                         IMapRefresh mapRefresh, ILayerContainer featureLayerContainer,
                         IAsyncDataArrivedNotify asyncDataArrivedNotify)
 {
     _mapRefresh                           = mapRefresh;
     _environment                          = environment;
     _layerContainer                       = featureLayerContainer;
     _asyncDataArrivedNotify               = asyncDataArrivedNotify;
     _idleEventHandler                     = new EventHandler(Application_Idle);
     Application.Idle                     += _idleEventHandler;
     _environment.OnTransformChanged      += new OnTransformChangedHandler(TransformChanged);
     _layerContainer.OnAddFeatureLayer    += new OnAddLayerHandler(OnAddLayer);
     _layerContainer.OnRemoveFeatureLayer += new OnRemoveLayerHandler(OnRemoveLayer);
     cstReadingTaskCount                   = Environment.ProcessorCount;
 }
Example #18
0
        public static bool TryToDelete(ILayerContainer container, IEnumerable <ConnectableShape> connectables, PointShape point)
        {
            foreach (var connectable in connectables)
            {
                if (connectable.Points.Contains(point))
                {
                    connectable.Points.Remove(point);
                    connectable.MarkAsDirty(true);

                    return(true);
                }
            }

            return(false);
        }
Example #19
0
        public override void DrawHelpers(object dc, ILayerContainer container, ShapeRenderer renderer, double dx, double dy)
        {
            var shapes    = container.Shapes;
            var selection = renderer;

            foreach (var shape in shapes)
            {
                if (selection.SelectedShapes.Contains(shape))
                {
                    if (Helpers.TryGetValue(shape.GetType(), out var helper))
                    {
                        helper.Draw(dc, renderer, shape, selection, dx, dy);
                    }
                }
            }
        }
Example #20
0
        private void Add(ILayerContainer layer)
        {
            if (layer == null)
            {
                return;
            }

            layer.PropertyChanged += ObserveLayer;

            if (layer.Shapes != null)
            {
                Add(layer.Shapes);
            }

            layer.InvalidateLayer += ObserveInvalidateLayer;
        }
        private T FindLayerByDataset <T>(ILayerContainer container, string workspaceConnection, string dataset) where T : Layer
        {
            var layers = container.GetLayersAsFlattenedList().OfType <T>();
            var layer  = layers
                         .Where(l => {
                if (!(l.GetDataConnection() is CIMStandardDataConnection))
                {
                    return(false);
                }
                var conn = (CIMStandardDataConnection)l.GetDataConnection();
                return(conn.WorkspaceConnectionString.Contains(workspaceConnection) && conn.Dataset == dataset);
            })
                         .FirstOrDefault();

            return(layer);
        }
Example #22
0
        private void Remove(ILayerContainer layer)
        {
            if (layer == null)
            {
                return;
            }

            layer.PropertyChanged -= ObserveLayer;

            if (layer.Shapes != null)
            {
                Remove(layer.Shapes);
            }

            layer.InvalidateLayer -= ObserveInvalidateLayer;
        }
Example #23
0
        public static void Copy(ILayerContainer container, IEnumerable <BaseShape> shapes, ISelection selection)
        {
            var shared = GetPointsCopyDict(shapes);

            foreach (var shape in shapes)
            {
                if (shape is ICopyable copyable)
                {
                    var copy = (BaseShape)copyable.Copy(shared);
                    if (copy != null && !(copy is PointShape))
                    {
                        copy.Select(selection);
                        container.Shapes.Add(copy);
                    }
                }
            }
        }
Example #24
0
        public LayerInfo[] GetLayerInfos()
        {
            ILayerContainer c = _gen.Map.LayerContainer;

            if (c.Layers == null || c.Layers.Length == 0)
            {
                return(null);
            }
            List <LayerInfo> infos = new List <LayerInfo>();

            foreach (IFeatureLayer lyr in c.Layers)
            {
                IFeatureClass fetclass = lyr.Class as IFeatureClass;
                LayerInfo     info     = new LayerInfo(lyr.Name, lyr.Id, fetclass.ShapeType);
                infos.Add(info);
            }
            return(infos.ToArray());
        }
Example #25
0
        public static bool TryToDelete(ILayerContainer container, IEnumerable <GroupShape> groups, BaseShape shape)
        {
            foreach (var group in groups)
            {
                if (group.Shapes.Contains(shape))
                {
                    group.Shapes.Remove(shape);
                    group.MarkAsDirty(true);

                    if (group.Shapes.Count <= 0)
                    {
                        container.Shapes.Remove(group);
                    }

                    return(true);
                }
            }

            return(false);
        }
Example #26
0
        public static void Delete(ILayerContainer container, ISelection selection)
        {
            var paths        = container.Shapes.OfType <PathShape>();
            var groups       = container.Shapes.OfType <GroupShape>();
            var connectables = container.Shapes.OfType <ConnectableShape>();

            foreach (var shape in selection.SelectedShapes)
            {
                if (container.Shapes.Contains(shape))
                {
                    container.Shapes.Remove(shape);
                }
                else if (container.Guides.Contains(shape))
                {
                    if (shape is LineShape guide)
                    {
                        container.Guides.Remove(guide);
                    }
                }
                else
                {
                    if (shape is PointShape point)
                    {
                        TryToDelete(container, connectables, point);
                    }

                    if (paths.Count() > 0)
                    {
                        TryToDelete(container, paths, shape);
                    }

                    if (groups.Count() > 0)
                    {
                        TryToDelete(container, groups, shape);
                    }
                }
            }
        }
Example #27
0
        private void DrawAllLabels(ILayerContainer layerContainer, Graphics g)
        {
            IOutsideIndicator outsideIndicator = null;
            int currentScale = _scale;

            //
            foreach (ILayerDrawable lyr in layerContainer.Layers)
            {
                if (!lyr.Visible)
                {
                    continue;
                }
                IFeatureLayer fetLayer = lyr as IFeatureLayer;
                if (fetLayer == null)
                {
                    continue;
                }
                //如果图层未初始化
                if (!fetLayer.IsReady)
                {
                    continue;
                }
                //判断整个图层是否在可视区域之外
                IFeatureClass fetclass = fetLayer.Class as IFeatureClass;
                if (!fetclass.FullEnvelope.IsInteractived(_viewportProjection))
                {
                    continue;
                }
                //判断几何形状是否显示,如果不显示,标注也不显示
                if (!fetLayer.VisibleAtScale(currentScale))
                {
                    continue;
                }
                //判断在当前比例尺下标注是否显示
                if (!fetLayer.LabelDef.VisibleAtScale(currentScale))
                {
                    continue;
                }
                //获取外部标识对象
                outsideIndicator = (fetLayer as ISupportOutsideIndicator).OutsideIndicator;
                if (outsideIndicator.IsOutside)
                {
                    continue;
                }
                //判断是否启用标注
                if (fetLayer.LabelDef == null || !fetLayer.LabelDef.EnableLabeling)
                {
                    continue;
                }
                //判断网格集合是否为空
                if (fetclass == null || fetclass.Grids == null || fetclass.Grids.Length == 0)
                {
                    continue;
                }
                //只对点层进行标注冲突检测
                bool conflictIsChanged = false;
                if (_conflictorForLabel != null && _conflictorForLabel.Enabled)
                {
                    conflictIsChanged = true;
                    //如果线采用注记形式,那么不做冲突检测
                    _conflictorForLabel.Enabled = !(fetclass.ShapeType == enumShapeType.Polyline && fetLayer.LabelDef.LabelSource == enumLabelSource.Annotation);
                }
                //逐网格进行标注
                int gridCount = fetclass.Grids.Length;
                for (int i = 0; i < gridCount; i++)
                {
                    if (i > gridCount - 1)
                    {
                        continue;
                    }
                    //判断网格是否可见
                    outsideIndicator = (fetclass.Grids[i] as ISupportOutsideIndicator).OutsideIndicator;
                    if (outsideIndicator.IsOutside)
                    {
                        continue;
                    }
                    //判断网格内要素是否为空
                    Feature[] fets = fetclass.Grids[i].VectorFeatures.ToArray();
                    if (fets == null || fets.Length == 0)
                    {
                        continue;
                    }
                    //解决透明背景下,绘制文本出现黑色杂点的问题
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
                    foreach (Feature fet in fets)
                    {
                        //判断要素是否可见
                        outsideIndicator = (fet as ISupportOutsideIndicator).OutsideIndicator;
                        if (outsideIndicator.IsOutside)
                        {
                            continue;
                        }
                        //画标注
                        _labelRender.Draw(_emptyRotateMatrix, g, fetLayer.LabelDef as LabelDef, fetLayer.Renderer.CurrentSymbol, fet, _quickTransfrom);
                    }
                }
                //
                if (conflictIsChanged)
                {
                    _conflictorForLabel.Enabled = true;
                }
                g.Flush(FlushIntention.Sync);
            }
        }
Example #28
0
        private void DrawAllGeometries(ILayerContainer layerContainer, Graphics g)
        {
            int currentScale = _scale;

            try
            {
                ILayer[]              layers         = layerContainer.Layers;
                IFeatureLayer         fetlyr         = null;
                List <ILayerDrawable> twostepsLayers = new List <ILayerDrawable>();
                IFeatureRenderer      preRender      = null;
                foreach (ILayerDrawable lyr in layers)
                {
                    if (!(lyr is IFeatureLayer))
                    {
                        continue;
                    }
                    fetlyr = lyr as IFeatureLayer;
                    if (preRender is IFeatureTwoStepRenderer && !(fetlyr.Renderer is IFeatureTwoStepRenderer))
                    {
                        FinishTwoStep(g, twostepsLayers);
                    }
                    preRender = fetlyr.Renderer;
                    (lyr as FeatureLayer)._isRendered = false;
                    if (!lyr.Visible)
                    {
                        continue;
                    }
                    //如果图层未初始化
                    if (!fetlyr.IsReady)
                    {
                        continue;
                    }
                    //判断整个图层是否在可视区域之外
                    IFeatureClass fetclass = fetlyr.Class as IFeatureClass;
                    if (!_viewportProjection.IsInteractived(fetclass.FullEnvelope))
                    {
                        continue;
                    }
                    //判断在当前比例尺下标注是否显示
                    if (!fetlyr.VisibleAtScale(currentScale))
                    {
                        continue;
                    }
                    //绘制几何形状
                    if (fetlyr.Renderer is IFeatureTwoStepRenderer)
                    {
                        twostepsLayers.Add(lyr);
                        //第一阶段
                        (fetlyr.Renderer as IFeatureTwoStepRenderer).StepType = enumTwoStepType.Outline;
                    }
                    //渲染几何形状
                    lyr.Render(g, _quickTransfrom);
                    (lyr as FeatureLayer)._isRendered = true;
                    //
                    g.Flush(FlushIntention.Sync);
                }
                if (twostepsLayers.Count > 0)//last layer
                {
                    FinishTwoStep(g, twostepsLayers);
                }
            }
            catch (Exception ex)
            {
                Log.WriterException(ex);
            }
        }
Example #29
0
        public void Render(RenderArgs arg)
        {
            if (_map == null || _isDisposed)
            {
                return;
            }
            ILayerContainer layerContainer = _map.LayerContainer;

            if (layerContainer.IsEmpty() || _environment.CanvasSize == Size.Empty)
            {
                return;
            }
#if DEBUG
            int time = Environment.TickCount;
#endif
            bool transformIsChanged = _preMapTransform == null || !MathHelper.MatrixIsSame(_preMapTransform, arg.Graphics.Transform);
            bool envelopeIsChanged  = _preFocusEnvelope == null || !_preFocusEnvelope.IsEquals(_environment.FocusEnvelope);
            transformIsChanged = transformIsChanged || envelopeIsChanged;
            bool needComputeViewportPrjAgain = true;
            //for web
            transformIsChanged = true;
            //
            if (transformIsChanged)
            {
                if (_transformChanged != null)
                {
                    _transformChanged(this, null, null);
                }
                UpdateViewportAndTransformMatrix();
                needComputeViewportPrjAgain = false;
            }
            Matrix oldM       = arg.Graphics.Transform;
            bool   needRember = false;
            try
            {
                arg.Graphics.Transform = _transformIdentity;
                if (_environment.UseDummyMap && _dummyBitmap != null)
                {
                    RenderUseDummyBitmap(arg);
                }
                else
                {
                    if (transformIsChanged || layerContainer.LayerIsChanged || arg.IsReRender || _dummyBitmap == null)
                    {
                        ReRender(arg, needComputeViewportPrjAgain);
                        needRember = true;
                        (layerContainer as LayerContainer).ResetLayerIsChanged();
                    }
                    else
                    {
                        RenderUseDummyBitmap(arg);
                    }
                }
            }
            finally
            {
                //画比例尺条
                if (_scaleBarArgs != null && _scaleBarArgs.Enabled)
                {
                    DrawScaleBar(arg.Graphics);
                }
                //画临时图层
                DrawHandinessLayers(arg);
                //
                arg.Graphics.Transform = oldM;
                arg.IsReRender         = false;
                arg.IsRendering        = false;
            }
            if (needRember)
            {
                RemeberPreTransform(arg);
            }
            if (envelopeIsChanged)
            {
                if (_onViewExtentChanged != null)
                {
                    _onViewExtentChanged.BeginInvoke(this, _environment.FocusEnvelope, null, null);
                }
            }
#if DEBUG
            time = Environment.TickCount - time;
            //Console.WriteLine("lost:" + time.ToString());
            //_environment.Container.FindForm().Text = time.ToString();
#endif
        }
Example #30
0
 internal void InternalInit(IProjectionTransform projectionTransform, IFeatureRenderEnvironment environment)
 {
     _mapRuntime     = environment as IMapRuntime;
     _layerContainer = new LayerContainer(projectionTransform, environment);
 }