private IElement Get3DElementAirplane(IElement element, IGeometry elementGeometry, ICurve curvePath, double markerSize) { if (string.IsNullOrEmpty(fileName3DElement)) { return(null); } // IElement element = new MarkerElement(); IMarker3DSymbol pMarker3DSymbol = new Marker3DSymbol(); pMarker3DSymbol.CreateFromFile(fileName3DElement); pMarker3DSymbol.UseMaterialDraping = true; //pMarker3DSymbol. IMarker3DPlacement pM3DP = (IMarker3DPlacement)pMarker3DSymbol; // pM3DP.Width = markerSize ; pM3DP.Units = esriUnits.esriMeters; pM3DP.Angle = GetAngle(curvePath); pM3DP.MaintainAspectRatio = true; pM3DP.Size = markerSize; //pM3DP.Width = 83; //pM3DP.Depth = 73; IGraphicTrackerSymbol gts = Elements2D.m_graphicTracker3D.CreateSymbol(null, pMarker3DSymbol as ISymbol); GlobalValues.id3D = Elements2D.m_graphicTracker3D.Add(elementGeometry, gts); ((IMarkerElement)element).Symbol = (IMarkerSymbol)pMarker3DSymbol; element.Geometry = (IPoint)elementGeometry; return(element); }
private IElement GetElement(IGeometry geometry, double size, esriSimple3DMarkerStyle simple3DMarkerStyle) { IElement element; IMarkerElement markerElement = new MarkerElementClass(); element = markerElement as IElement; ISimpleMarker3DSymbol simpleMarker3DSymbol = new SimpleMarker3DSymbolClass(); simpleMarker3DSymbol.Style = simple3DMarkerStyle; simpleMarker3DSymbol.ResolutionQuality = GetResolutionQuality(); IMarkerSymbol markerSymbol = simpleMarker3DSymbol as IMarkerSymbol; markerSymbol.Color = ColorSelection.GetColor(); markerSymbol.Size = size; IMarker3DPlacement marker3DPlacement = markerSymbol as IMarker3DPlacement; SetMarker3DPlacement(marker3DPlacement, markerSymbol.Size); element.Geometry = geometry; markerElement.Symbol = markerSymbol; return(element); }
public static IElement ConstructPointElement(IGeometry geometry, IColor color, esriSimple3DMarkerStyle style, double size) { ISimpleMarker3DSymbol simpleMarker3DSymbol = new SimpleMarker3DSymbolClass(); simpleMarker3DSymbol.Style = style; simpleMarker3DSymbol.ResolutionQuality = HighResolution; IMarkerSymbol markerSymbol = simpleMarker3DSymbol as IMarkerSymbol; markerSymbol.Color = color; markerSymbol.Size = size; IMarker3DPlacement marker3DPlacement = markerSymbol as IMarker3DPlacement; marker3DPlacement.Units = Units; IMarkerElement markerElement = new MarkerElementClass(); markerElement.Symbol = markerSymbol; IElement element = markerElement as IElement; element.Geometry = geometry; return(element); }
private void SetMarker3DPlacement(IMarker3DPlacement marker3DPlacement, double size) { const double XOffset = 0; const double YOffset = 0; marker3DPlacement.XOffset = XOffset; marker3DPlacement.YOffset = YOffset; marker3DPlacement.ZOffset = size / 2; }
private void RotateGeometry(IMarker3DSymbol pSymbol, IVector3D pAxis, double dDegree) { if ((pAxis != null) && (dDegree != 0.0)) { IMarker3DPlacement placement = pSymbol as IMarker3DPlacement; IGeometry shape = placement.Shape; IEnvelope envelope = shape.Envelope; IPoint point = new PointClass { X = envelope.XMin + (envelope.XMax - envelope.XMin), Y = envelope.YMin + (envelope.YMax - envelope.YMin), Z = envelope.ZMin + (envelope.ZMax - envelope.ZMin) }; double rotationAngle = this.DegreesToRadians(dDegree); ITransform3D transformd = shape as ITransform3D; transformd.Move3D(-point.X, -point.Y, -point.Z); transformd.RotateVector3D(pAxis, rotationAngle); transformd.Move3D(point.X, point.Y, point.Z); } }
private void ReAngleElements(IElement element2D, IElement element3D, double newAngle) { if (element2D != null) { IMarkerElement markerElement; markerElement = element2D as IMarkerElement; IPictureMarkerSymbol pictureMarkerSymbol = (IPictureMarkerSymbol)markerElement.Symbol; pictureMarkerSymbol.Angle = newAngle; markerElement.Symbol = pictureMarkerSymbol; } if (element3D != null) { IMarkerElement markerElement; markerElement = element3D as IMarkerElement; IMarker3DSymbol pMarker3DSymbol = (IMarker3DSymbol)markerElement.Symbol; IMarker3DPlacement pM3DP = (IMarker3DPlacement)pMarker3DSymbol; pM3DP.Angle = newAngle; markerElement.Symbol = (ESRI.ArcGIS.Display.IMarkerSymbol)pMarker3DSymbol; } }
private void btn3D_Click(object sender, EventArgs e) { try { IGraphicsContainer3D graphicsContainer3D = pSceneControl.Scene.ActiveGraphicsLayer as IGraphicsContainer3D; graphicsContainer3D.DeleteAllElements(); pSceneControl.Scene.SceneGraph.RefreshViewers(); //屏幕大小 double PageX = pSceneControl.SceneGraph.Extent.Envelope.XMax; double PageY = pSceneControl.SceneGraph.Extent.Envelope.YMax; double PageZ = pSceneControl.SceneGraph.Extent.Envelope.ZMax; double PageXmin = pSceneControl.SceneGraph.Extent.Envelope.XMin; double pMarkerSize = (PageX - PageXmin) / 10; IMarkerElement pMarkerElement = new MarkerElementClass(); //正北方向 IMarker3DSymbol pMarker3DSymbolNorth = new Marker3DSymbolClass(); string NorthPath = ClsGDBDataCommon.GetParentPathofExe() + @"Resource\BMP\NorthArrow.3DS"; pMarker3DSymbolNorth.CreateFromFile(NorthPath); IMarker3DPlacement pMarker3DPlacement = pMarker3DSymbolNorth as IMarker3DPlacement; pMarker3DPlacement.Size = pMarkerSize; pMarker3DPlacement.SetRotationAngles(-90, 0, 0); //IRgbColor pRgbColorNorth = new RgbColorClass(); //pRgbColorNorth.Red = Color.Black.R; //pRgbColorNorth.Green = Color.Black.G; //pRgbColorNorth.Blue = Color.Black.B; pMarker3DPlacement.Color = ClsGDBDataCommon.ColorToIColor(Color.Black); //太阳方向 IMarker3DSymbol pMarker3DSymbolSun = new Marker3DSymbolClass(); string SunPath = ClsGDBDataCommon.GetParentPathofExe() + @"Resource\BMP\SunArrow.3DS"; pMarker3DSymbolSun.CreateFromFile(SunPath); IMarker3DPlacement pMarker3DPlacement1 = pMarker3DSymbolSun as IMarker3DPlacement; pMarker3DPlacement1.Size = pMarkerSize; double SunAngleX = SunIncli.Value - 90; double SunAngleY = 0; double SunAngleZ = 0 - SunAzimuth.Value; pMarker3DPlacement1.SetRotationAngles(SunAngleX, SunAngleY, SunAngleZ); //IRgbColor pRgbColorSun = new RgbColorClass(); //pRgbColorSun.Red = Color.Red.R; //pRgbColorSun.Green = Color.Red.G; //pRgbColorSun.Blue = Color.Red.B; pMarker3DPlacement1.Color = ClsGDBDataCommon.ColorToIColor(Color.Red); //地球方向 IMarker3DSymbol pMarker3DSymbolEarth = new Marker3DSymbolClass(); string EarthPath = ClsGDBDataCommon.GetParentPathofExe() + @"Resource\BMP\EarthArrow.3DS"; pMarker3DSymbolEarth.CreateFromFile(EarthPath); IMarker3DPlacement pMarker3DPlacement2 = pMarker3DSymbolEarth as IMarker3DPlacement; pMarker3DPlacement2.Size = pMarkerSize; double EarthAngleX = EarIncli.Value - 90; double EarthAngleY = 0; double EarthAngleZ = 0 - EarAzimuth.Value; pMarker3DPlacement2.SetRotationAngles(EarthAngleX, EarthAngleY, EarthAngleZ); //IRgbColor pRgbColorEarth = new RgbColorClass(); //pRgbColorEarth.Red = Color.BlueViolet.R; //pRgbColorEarth.Green = Color.BlueViolet.G; //pRgbColorEarth.Blue = Color.BlueViolet.B; pMarker3DPlacement2.Color = ClsGDBDataCommon.ColorToIColor(Color.BlueViolet); //合并成一个整体 IMultiLayerMarkerSymbol pMultiLayerMarkerSymbol = new MultiLayerMarkerSymbolClass(); pMultiLayerMarkerSymbol.AddLayer(pMarker3DSymbolNorth as IMarkerSymbol); pMultiLayerMarkerSymbol.AddLayer(pMarker3DSymbolSun as IMarkerSymbol); pMultiLayerMarkerSymbol.AddLayer(pMarker3DSymbolEarth as IMarkerSymbol); pMarkerElement.Symbol = pMultiLayerMarkerSymbol; IElement pElement = pMarkerElement as IElement; //确定添加位置 IPoint pPoint = new PointClass(); pPoint.X = PageX; pPoint.Y = PageY; pPoint.Z = PageZ + PageZ / 10; IZAware zAware = pPoint as IZAware; zAware.ZAware = true; IGeometry pointGeometry = pPoint as IGeometry; pointGeometry.SpatialReference = pSceneControl.Scene.SpatialReference; pElement.Geometry = pointGeometry; graphicsContainer3D.AddElement(pElement); pSceneControl.Scene.SceneGraph.RefreshViewers(); } catch { MessageBox.Show(e.ToString()); } this.Close(); }