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); } }
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) { } }
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) { } }
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); }
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); } }
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); }
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); } }