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);
        }
Beispiel #2
0
        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;
        }
Beispiel #5
0
 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;
            }
        }
Beispiel #7
0
        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();
        }
        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;
        }