Beispiel #1
0
        private static void SetSceneView(IBasicDocument document, IRasterLayer surface)
        {
            IEnvelope unionEnvelope = new EnvelopeClass();

            foreach (var layer in _viewCalcLayers)
            {
                IEnvelope envelope = null;

                try
                {
                    envelope = EsriTools.GetLayerExtent(layer, document.ActiveView);
                }
                catch (Exception ex)
                {
                    logger.WarnEx($"Cannot to get envelope from {layer.Name} layer");
                }

                if (envelope != null)
                {
                    unionEnvelope.Union(envelope);
                }
            }

            var pSxDoc = document as ISxDocument;
            var camera = pSxDoc.Scene.SceneGraph.ActiveViewer.Camera;

            var centerPoint = EsriTools.GetCenterPoint(unionEnvelope);

            centerPoint.AddZCoordinate(surface.Raster);

            camera.Target = centerPoint;

            var observerPoint = unionEnvelope.LowerRight.Clone();

            observerPoint.AddZCoordinate(surface.Raster);
            observerPoint.Z += 1000;

            camera.Observer = observerPoint;
            camera.Zoom(-2);

            camera.RecalcUp();
            pSxDoc.Scene.SceneGraph.RefreshViewers();
        }