コード例 #1
0
        internal static void OpenProfilesSetIn3D(ArcSceneArguments layers, IActiveView map)
        {
            OpenArcScene();

            try
            {
                UpdateTemporaryDataStorage();

                IObjectFactory objFactory = m_application as IObjectFactory;
                var            document   = (IBasicDocument)m_application.Document;

                _zFactor = layers.ZFactor;
                _map     = map;

                var baseSurface = AddBaseLayers(layers, objFactory, document);
                AddVisibilityLayers(layers.VisibilityResultsInfo, objFactory, document, baseSurface);
                AddExtraLayers(layers.AdditionalLayers, objFactory, document, baseSurface);

                if (!String.IsNullOrEmpty(layers.DraperyLayer))
                {
                    AddDraperyLayer(layers.DraperyLayer, objFactory, baseSurface, document);
                }

                var surfaceLayer = EsriTools.GetLayer(_demLayerName, document.ActiveView.FocusMap);

                if (surfaceLayer != null)
                {
                    SetSceneView(document, surfaceLayer as IRasterLayer);
                }
            }
            catch (Exception ex)
            {
                logger.ErrorEx(ex.Message);
            }
        }
コード例 #2
0
        internal static void OpenProfilesSetIn3D(ArcSceneArguments layers)
        {
            OpenArcScene();

            try
            {
                IObjectFactory objFactory = m_application as IObjectFactory;

                Type   rasterLayerType   = typeof(RasterLayerClass);
                string typeRasterLayerID = rasterLayerType.GUID.ToString("B");

                IRasterLayer elevationRasterLayer = (IRasterLayer)objFactory.Create(typeRasterLayerID);
                elevationRasterLayer.CreateFromFilePath(layers.DemLayer);
                ILayer layer = (ILayer)elevationRasterLayer;

                var line3DLayer    = CreateLayer(layers.Line3DLayer, objFactory);
                var point3DLayer   = CreateLayer(layers.Point3DLayer, objFactory);
                var polygon3DLayer = CreateLayer(layers.Polygon3DLayer, objFactory);

                var polygonLayerEffects = (ILayerEffects)polygon3DLayer;
                polygonLayerEffects.Transparency = 50;

                IBasicDocument document = (IBasicDocument)m_application.Document;

                document.AddLayer(layer);
                document.AddLayer(line3DLayer);
                document.AddLayer(point3DLayer);
                document.AddLayer(polygon3DLayer);

                document.UpdateContents();
            }
            catch (Exception ex) { }
        }
コード例 #3
0
        internal static void OpenProfilesSetIn3D(ArcSceneArguments layers)
        {
            OpenArcScene();

            try
            {
                IObjectFactory objFactory = m_application as IObjectFactory;

                Type   rasterLayerType   = typeof(RasterLayerClass);
                string typeRasterLayerID = rasterLayerType.GUID.ToString("B");

                var elevationRasterLayer = (IRasterLayer)objFactory.Create(typeRasterLayerID);
                elevationRasterLayer.CreateFromFilePath(layers.DemLayer);
                var layer = (ILayer)elevationRasterLayer;

                var surface = (IRasterSurface)objFactory.Create("esrianalyst3d.RasterSurface");
                surface.PutRaster(elevationRasterLayer.Raster, 0);
                var functionalSurface = (IFunctionalSurface)surface;

                var line3DLayer    = CreateLayer(layers.Line3DLayer, objFactory);
                var point3DLayer   = CreateLayer(layers.Point3DLayer, objFactory);
                var polygon3DLayer = CreateLayer(layers.Polygon3DLayer, objFactory);

                var polygonLayerEffects = (ILayerEffects)polygon3DLayer;
                polygonLayerEffects.Transparency = 50;

                var document = (IBasicDocument)m_application.Document;

                SetSurface3DProperties(layer, objFactory, functionalSurface);
                SetLine3DProperties(line3DLayer, objFactory, functionalSurface);
                SetFeatures3DProperties(point3DLayer, objFactory);
                SetFeatures3DProperties(polygon3DLayer, objFactory);


                document.AddLayer(layer);

                document.AddLayer(line3DLayer);
                document.AddLayer(point3DLayer);
                document.AddLayer(polygon3DLayer);

                foreach (var extraLayer in layers.AdditionalLayers)
                {
                    var featureLayer = CreateLayerCopy((IFeatureLayer)extraLayer, objFactory);

                    document.AddLayer(featureLayer);
                }

                document.UpdateContents();

                document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                                   VisibilityColorsRender(line3DLayer, objFactory), document.ActiveView.Extent);

                document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                                   VisibilityColorsRender(polygon3DLayer, objFactory), document.ActiveView.Extent);

                document.UpdateContents();
            }
            catch (Exception ex) { }
        }
コード例 #4
0
        private static IFunctionalSurface AddBaseLayers(ArcSceneArguments layers, IObjectFactory objFactory, IBasicDocument document)
        {
            var preparedLayers = GetLayers(layers, objFactory);

            var surface     = (IRasterSurface)objFactory.Create("esrianalyst3d.RasterSurface");
            var rasterLayer = (IRasterLayer)preparedLayers[LayerTypeEnum.Raster];

            SetFromMapRendererToRasterLayer(rasterLayer, objFactory, rasterLayer.Name);

            surface.PutRaster(rasterLayer.Raster, 0);
            var functionalSurface = (IFunctionalSurface)surface;

            _demLayerName = rasterLayer.Name;

            SetSurface3DProperties(preparedLayers[LayerTypeEnum.Raster], objFactory, functionalSurface);

            if (preparedLayers.Count > 1)
            {
                SetFeatures3DProperties((IFeatureLayer)preparedLayers[LayerTypeEnum.LineFeature], objFactory, functionalSurface);
                SetHightFeatures3DProperties((IFeatureLayer)preparedLayers[LayerTypeEnum.PointFeature], objFactory);
                SetHightFeatures3DProperties((IFeatureLayer)preparedLayers[LayerTypeEnum.PolygonFeature], objFactory);

                _viewCalcLayers.Add(preparedLayers[LayerTypeEnum.LineFeature]);
                _layersWithDefaultRenderer.AddRange(preparedLayers.Values.Select(layer => layer.Name));
            }

            foreach (var layer in preparedLayers)
            {
                try
                {
                    document.AddLayer(layer.Value);
                }
                catch (Exception ex)
                {
                    logger.ErrorEx(ex.Message);
                }
            }

            document.UpdateContents();

            if (preparedLayers.Count > 1)
            {
                document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                                   VisibilityColorsRender((IFeatureLayer)preparedLayers[LayerTypeEnum.LineFeature], objFactory), document.ActiveView.Extent);

                document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                                   PointsRender((IFeatureLayer)preparedLayers[LayerTypeEnum.PointFeature], new RgbColor()
                {
                    Red = 255, Blue = 24, Green = 198
                }, objFactory), document.ActiveView.Extent);

                document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                                   VisibilityColorsRender((IFeatureLayer)preparedLayers[LayerTypeEnum.PolygonFeature], objFactory), document.ActiveView.Extent);
            }

            return(functionalSurface);
        }
コード例 #5
0
ファイル: Feature3DManager.cs プロジェクト: VsPun/DPP
        internal static ArcSceneArguments Get3DFeatures(string demLayer, List <ProfileSession> profileSessions)
        {
            var arcSceneArguments = new ArcSceneArguments();

            var polylines          = new Dictionary <IPolyline, bool>();
            var visibilityPolygons = new Dictionary <IPolygon, bool>();
            var observerPoints     = new List <IPoint>();

            var layers = ArcMap.Document.ActiveView.FocusMap.Layers;

            var layer = layers.Next();

            while (layer.Name != demLayer)
            {
                layer = layers.Next();
            }

            var rasterLayer = layer as IRasterLayer;

            arcSceneArguments.DemLayer = rasterLayer.FilePath;

            try
            {
                foreach (var profilesSet in profileSessions)
                {
                    var segmentsGeoPoints = DataPreparingHelper.GetSegmentsGeoPoints(DataPreparingHelper.GetLinesSegments(profilesSet));
                    var setPolylines      = DataPreparingHelper.GetPolylinesSegments(segmentsGeoPoints);

                    foreach (var polyline in setPolylines)
                    {
                        polylines.Add(polyline.Key, polyline.Value);
                    }

                    observerPoints.Add(DataPreparingHelper.GetObserverPoint(profilesSet.ObserverHeight, profilesSet.ProfileSurfaces[0].ProfileSurfacePoints[0]));

                    var setPolygons = (DataPreparingHelper.GetVisibilityPolygons(observerPoints.Last(), segmentsGeoPoints));
                    foreach (var polygon in setPolygons)
                    {
                        visibilityPolygons.Add(polygon.Key, polygon.Value);
                    }
                }

                arcSceneArguments.Line3DLayer    = GdbAccess.Instance.AddProfileLinesTo3D(polylines);
                arcSceneArguments.Point3DLayer   = GdbAccess.Instance.AddProfilePointsTo3D(observerPoints);
                arcSceneArguments.Polygon3DLayer = GdbAccess.Instance.AddPolygonTo3D(visibilityPolygons);

                return(arcSceneArguments);
            }
            catch (Exception ex)
            {
                //TODO: Log erros
                return(null);
            }
        }
コード例 #6
0
        private static Dictionary <LayerTypeEnum, ILayer> GetLayers(ArcSceneArguments layers, IObjectFactory objFactory)
        {
            var preparedLayers = new Dictionary <LayerTypeEnum, ILayer>();

            Type   rasterLayerType   = typeof(RasterLayerClass);
            string typeRasterLayerID = rasterLayerType.GUID.ToString("B");

            var elevationRasterLayer = (IRasterLayer)objFactory.Create(typeRasterLayerID);

            elevationRasterLayer.CreateFromFilePath(layers.DemLayer);
            preparedLayers.Add(LayerTypeEnum.Raster, elevationRasterLayer);

            Type   factoryType   = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
            string typeFactoryID = factoryType.GUID.ToString("B");

            IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)objFactory.Create(typeFactoryID);
            IWorkspace2       workspace        = (IWorkspace2)workspaceFactory.OpenFromFile(_profileGdb, 0);

            if (!string.IsNullOrEmpty(layers.Line3DLayer))
            {
                preparedLayers.Add(LayerTypeEnum.LineFeature, CreateFeatureLayer(layers.Line3DLayer, workspace, objFactory));
                preparedLayers.Add(LayerTypeEnum.PointFeature, CreateFeatureLayer(layers.Point3DLayer, workspace, objFactory));

                var polygon3DLayer = CreateFeatureLayer(layers.Polygon3DLayer, workspace, objFactory);


                var polygonLayerEffects = (ILayerEffects)polygon3DLayer;
                polygonLayerEffects.Transparency = 50;

                preparedLayers.Add(LayerTypeEnum.PolygonFeature, polygon3DLayer);
            }

            Marshal.ReleaseComObject(workspaceFactory);

            return(preparedLayers);
        }
コード例 #7
0
        internal static ArcSceneArguments Get3DFeatures(string demLayer, List <ProfileSession> profileSessions)
        {
            var arcSceneArguments = new ArcSceneArguments();

            var polylines          = new Dictionary <IPolyline, bool>();
            var visibilityPolygons = new Dictionary <IPolygon, bool>();
            var observerPoints     = new List <IPoint>();

            var layers = ArcMap.Document.ActiveView.FocusMap.Layers;

            var layer = layers.Next();

            while (layer.Name != demLayer)
            {
                layer = layers.Next();
            }

            var rasterLayer = layer as IRasterLayer;

            arcSceneArguments.DemLayer = rasterLayer.FilePath;

            try
            {
                foreach (var profilesSet in profileSessions)
                {
                    if (profilesSet == null || profilesSet.ProfileLines == null)
                    {
                        continue;
                    }

                    var segments = new List <ProfileSurface>();

                    if (profilesSet.DefinitionType == ProfileSettingsTypeEnum.Primitives)
                    {
                        segments = DataPreparingHelper.GetPrimitiveSegments(profilesSet);
                    }
                    else
                    {
                        segments = new List <ProfileSurface> {
                            profilesSet.ProfileSurfaces[0]
                        };
                    }

                    foreach (var segment in segments)
                    {
                        Dictionary <ProfileSurface, bool> segmentsSurfaces;

                        if (profilesSet.DefinitionType == ProfileSettingsTypeEnum.Primitives)
                        {
                            segmentsSurfaces = DataPreparingHelper.GetLinesSegmentsForPrimitive(segment);
                        }
                        else
                        {
                            segmentsSurfaces = DataPreparingHelper.GetLinesSegments(profilesSet);
                        }

                        var segmentsGeoPoints = DataPreparingHelper.GetSegmentsGeoPoints(segmentsSurfaces);
                        var setPolylines      = DataPreparingHelper.GetPolylinesSegments(segmentsGeoPoints);

                        foreach (var polyline in setPolylines)
                        {
                            polylines.Add(polyline.Key, polyline.Value);
                        }

                        observerPoints.Add(DataPreparingHelper.GetObserverPoint(profilesSet.ObserverHeight, segment.ProfileSurfacePoints[0]));

                        var setPolygons = (DataPreparingHelper.GetVisibilityPolygons(observerPoints.Last(), segmentsGeoPoints));
                        foreach (var polygon in setPolygons)
                        {
                            visibilityPolygons.Add(polygon.Key, polygon.Value);
                        }
                    }
                }

                if (polylines != null && polylines.Count > 0)
                {
                    arcSceneArguments.Line3DLayer    = GdbAccess.Instance.AddProfileLinesTo3D(polylines);
                    arcSceneArguments.Point3DLayer   = GdbAccess.Instance.AddProfilePointsTo3D(observerPoints);
                    arcSceneArguments.Polygon3DLayer = GdbAccess.Instance.AddPolygonTo3D(visibilityPolygons);
                }

                return(arcSceneArguments);
            }
            catch (Exception ex)
            {
                logger.ErrorEx(ex.Message);
                return(null);
            }
        }