Ejemplo n.º 1
0
 /// <summary>
 /// Converet from screen to layout coodinate
 /// </summary>
 /// <param name="pane">target pane control</param>
 /// <param name="pos">screen position</param>
 /// <returns></returns>
 public static LayoutPos From(IDrawArea pane, ScreenPos pos)
 {
     return(new LayoutPos
     {
         X = LayoutX.From(pane, pos.X),
         Y = LayoutY.From(pane, pos.Y),
     });
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Init the DirectX-Stuff here
        /// </summary>
        /// <param name="parent">parent of the DevicePanel</param>
        ///
        public void Init(IDrawArea parent)
        {
            try
            {
                _parent = parent;

                // Setup our D3D stuff
                presentParams                      = new PresentParameters();
                presentParams.Windowed             = true;
                presentParams.DeviceWindowHandle   = this.Handle;
                presentParams.BackBufferHeight     = this.Height;
                presentParams.BackBufferWidth      = this.Width;
                presentParams.PresentationInterval = PresentInterval.Immediate;
                presentParams.SwapEffect           = SwapEffect.Discard;

                direct3d = new Direct3D();
                Capabilities caps = direct3d.Adapters.First().GetCaps(DeviceType.Hardware);

                CreateFlags createFlags;

                if ((caps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)
                {
                    createFlags = CreateFlags.HardwareVertexProcessing;
                }
                else
                {
                    createFlags = CreateFlags.SoftwareVertexProcessing;
                }

                if ((caps.DeviceCaps & DeviceCaps.PureDevice) != 0 && createFlags ==
                    CreateFlags.HardwareVertexProcessing)
                {
                    createFlags |= CreateFlags.PureDevice;
                }

                _device = new Device(direct3d, 0, DeviceType.Hardware, this.Handle, createFlags, presentParams);
                _device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.None);
                _device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.None);
                _device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.None);
                _device.SetRenderState(RenderState.CullMode, false);
                _device.SetRenderState(RenderState.ZEnable, ZBufferType.DontUseZBuffer);

                if (OnCreateDevice != null)
                {
                    OnCreateDevice(this, new DeviceEventArgs(_device));
                }

                InitDeviceResources();
            }
            catch (SharpDXException ex)
            {
                throw new ArgumentException("Error initializing DirectX", ex);
            }
            catch (DllNotFoundException)
            {
                throw new Exception("Please install DirectX Redistributable June 2010");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Convert layout value to Screen coodinate
        /// </summary>
        /// <param name="pane">target pane control</param>
        /// <param name="pos">screen position</param>
        /// <returns></returns>
        public static LayoutY From(IDrawArea pane, ScreenY pos)
        {
            var ppos = pos - pane.Rect.LT.Y;

            return(new LayoutY
            {
                Ly = ppos.Sy / pane.ZoomY - pane.ScrollY,
            });
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Convert layout value to Screen coodinate
        /// </summary>
        /// <param name="pane">target pane control</param>
        /// <param name="pos">screen position</param>
        /// <returns></returns>
        public static LayoutX From(IDrawArea pane, ScreenX pos)
        {
            var ppos = pos - pane.Rect.LT.X;

            return(new LayoutX
            {
                Lx = ppos.Sx / pane.ZoomX - pane.ScrollX,
            });
        }
Ejemplo n.º 5
0
        public void Move(IDrawArea pane, ScreenSize offset)
        {
            var s0 = GetScreenPos(pane, PositionBackup);
            var s1 = s0 + offset;
            var l1 = LayoutPos.From(pane, s1);
            var cl = CoderX(l1.X, l1.Y);
            var ca = CoderY(l1.X, l1.Y);

            Location = CodePos <Distance, Angle> .From(cl, ca);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// get screen position
        /// </summary>
        /// <param name="pane"></param>
        /// <returns></returns>
        public virtual ScreenPos GetScreenPos(IDrawArea pane, CodePos <TCX, TCY> codepos)
        {
            var lpos = new LayoutPos
            {
                X = PositionerX(codepos.X, codepos.Y),
                Y = PositionerY(codepos.X, codepos.Y),
            };

            return(ScreenPos.From(pane, lpos));
        }
Ejemplo n.º 7
0
        public override float SelectingScore(IDrawArea pane, ScreenPos pos)
        {
            var width = 6.0f;
            var l     = _p0.LengthTo(_p1);
            var a     = _p0.AngleTo(_p1);
            var ml    = _p0.LengthTo(pos);
            var ma    = _p0.AngleTo(pos);

            GeoEu.Position(0, 0, ma - a, ml, out var mpx, out var mpy);

            var ret = (float)(Math.Abs(mpy) / width);

            if (ret <= 1.0f)
            {
                if (mpx < 0 || mpx > l)
                {
                    ret = float.PositiveInfinity;
                }
            }
            return(ret);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// caluclate the maximum screen rectangle of the all specified partsset
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="partsset"></param>
        /// <returns></returns>
        public static ScreenRect GetScreenPosArea(IDrawArea pane, IEnumerable <PartsBase <TCX, TCY> > partsset)
        {
            float l = float.PositiveInfinity, t = float.PositiveInfinity, r = float.NegativeInfinity, b = float.NegativeInfinity;

            foreach (var parts in partsset)
            {
                var spos = parts.GetScreenPos(pane);
                if (spos.X < l)
                {
                    l = spos.X;
                }

                if (spos.Y < t)
                {
                    t = spos.Y;
                }

                if (spos.X > r)
                {
                    r = spos.X;
                }

                if (spos.Y > b)
                {
                    b = spos.Y;
                }
            }
            if (float.IsPositiveInfinity(l))
            {
                return(ScreenRect.FromLTRB(0, 0, 0, 0));
            }
            else
            {
                return(ScreenRect.FromLTRB(l, t, r, b));
            }
        }
Ejemplo n.º 9
0
 public float SelectingScore(IDrawArea pane, ScreenPos pos)
 {
     return(Rect.IsIn(pos) ? 0f : float.PositiveInfinity);
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Get code position Y
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos"></param>
        /// <returns></returns>
        public CodeY <TCY> GetCodeY(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CoderY(lpos.X, lpos.Y));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Get code position X
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos"></param>
        /// <returns></returns>
        public CodeX <TCX> GetCodeX(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CoderX(lpos.X, lpos.Y));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Get code position from screen position
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos">screen position</param>
        /// <returns></returns>
        public CodePos <TCX, TCY> GetCodePos(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CodePos <TCX, TCY> .From(CoderX(lpos.X, lpos.Y), CoderY(lpos.X, lpos.Y)));
        }
Ejemplo n.º 13
0
 /// <summary>
 /// To Support Rectangle overlap check
 /// </summary>
 /// <param name="pane"></param>
 /// <param name="sr">check rectangle area</param>
 /// <returns>this parts is in sr</returns>
 /// <remarks>
 /// Using by FeaturePartsSelectOnRect
 /// </remarks>
 public virtual bool IsIn(IDrawArea pane, ScreenRect sr)
 {
     return(false);
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Screen position of the pane
 /// </summary>
 /// <param name="pane"></param>
 /// <returns></returns>
 public ScreenPos GetScreenPos(IDrawArea pane)
 {
     return(GetScreenPos(pane, Location));
 }
Ejemplo n.º 15
0
        /// <summary>
        /// Init the DirectX-Stuff here
        /// </summary>
        /// <param name="parent">parent of the DevicePanel</param>
        ///

        public void Init(IDrawArea parent)
        {
            try
            {
                _parent = parent;

                // Setup our D3D stuff
                presentParams            = new PresentParameters();
                presentParams.Windowed   = true;
                presentParams.SwapEffect = SwapEffect.Discard;

                Capabilities caps = direct3d.Adapters.First().GetCaps(DeviceType.Hardware);

                CreateFlags createFlags;

                if ((caps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)
                {
                    createFlags = CreateFlags.HardwareVertexProcessing;
                }
                else
                {
                    createFlags = CreateFlags.SoftwareVertexProcessing;
                }

                if ((caps.DeviceCaps & DeviceCaps.PureDevice) != 0 && createFlags ==
                    CreateFlags.HardwareVertexProcessing)
                {
                    createFlags |= CreateFlags.PureDevice;
                }


                _device = new Device(direct3d, 0, DeviceType.Hardware, this.Handle, createFlags, presentParams);
                _device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.None);
                _device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.None);
                _device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.None);
                //_device.SetRenderState(RenderState.ZWriteEnable, false);
                //_device.SetRenderState(RenderState.ZEnable, false);

                if (OnCreateDevice != null)
                {
                    OnCreateDevice(this, new DeviceEventArgs(_device));
                }



                txb = new Bitmap(1, 1);
                using (Graphics g = Graphics.FromImage(txb))
                    g.Clear(Color.White);
                hcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(hcursorb))
                    Cursors.NoMoveHoriz.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(hcursorb);

                vcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(vcursorb))
                    Cursors.NoMoveVert.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(vcursorb);

                hvcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(hvcursorb))
                    Cursors.NoMove2D.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(hvcursorb);

                InitDeviceResources();
            }
            catch (SharpDXException ex)
            {
                throw new ArgumentException("Error initializing DirectX", ex);
            }
            catch (DllNotFoundException)
            {
                throw new Exception("Please install DirectX Redistributable June 2010");
            }
        }
Ejemplo n.º 16
0
 public override ScreenPos GetScreenPos(IDrawArea pane, CodePos <Distance, Distance> codepos)
 {
     throw new NotSupportedException();
 }
Ejemplo n.º 17
0
        public void DisposeDeviceResources(int type = 0)
        {
            if (tx != null)
            {
                tx.Dispose();
                tx = null;
            }
            if (tcircle != null)
            {
                tcircle.Dispose();
                tcircle = null;
            }
            if (tecircle != null)
            {
                tecircle.Dispose();
                tecircle = null;
            }
            if (hvcursor != null)
            {
                hvcursor.Dispose();
                hvcursor = null;
            }
            if (vcursor != null)
            {
                vcursor.Dispose();
                vcursor = null;
            }
            if (hcursor != null)
            {
                hcursor.Dispose();
                hcursor = null;
            }

            if (font != null)
            {
                font.Dispose();
                font = null;
            }
            if (fontBold != null)
            {
                fontBold.Dispose();
                fontBold = null;
            }

            if (sprite != null || type == 1)
            {
                sprite.Dispose();
                sprite = null;
            }
            if (sprite2 != null || type == 1)
            {
                sprite2.Dispose();
                sprite2 = null;
            }

            if (_parent != null && type == 1)
            {
                _parent.DisposeTextures();
                _parent = null;
            }
            if (_device != null && type == 1)
            {
                _device.Dispose();
                _device = null;
            }
            if (direct3d != null && type == 1)
            {
                direct3d.Dispose();
                direct3d = null;
            }
        }
Ejemplo n.º 18
0
        public override bool IsIn(IDrawArea pane, ScreenRect sr)
        {
            var s1 = GetScreenPos(pane);

            return(sr.IsIn(s1));
        }
Ejemplo n.º 19
0
        /// <summary>
        /// selection score
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="pos"></param>
        /// <returns></returns>
        public float SelectingScore(IDrawArea pane, ScreenPos pos)
        {
            var s1 = GetScreenPos(pane);

            return((float)GeoEu.Length(s1.X.Sx, s1.Y.Sy, pos.X.Sx, pos.Y.Sy) / DotR);
        }
Ejemplo n.º 20
0
        public void Init(IDrawArea parent)
        {
            try
            {
                _parent = parent;

                // Setup our D3D stuff
                presentParams            = new PresentParameters();
                presentParams.Windowed   = true;
                presentParams.SwapEffect = SwapEffect.Discard;

                Capabilities caps = direct3d.Adapters.First().GetCaps(DeviceType.Hardware);

                CreateFlags createFlags;

                if ((caps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)
                {
                    createFlags = CreateFlags.HardwareVertexProcessing;
                }
                else
                {
                    createFlags = CreateFlags.SoftwareVertexProcessing;
                }

                if ((caps.DeviceCaps & DeviceCaps.PureDevice) != 0 && createFlags ==
                    CreateFlags.HardwareVertexProcessing)
                {
                    createFlags |= CreateFlags.PureDevice;
                }


                _device = new Device(direct3d, 0, DeviceType.Hardware, this.Handle, createFlags, presentParams);
                _device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
                _device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
                _device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point);

                if (OnCreateDevice != null)
                {
                    OnCreateDevice(this, new DeviceEventArgs(_device));
                }

                //vb = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                //    4, _device, Usage.Dynamic | Usage.WriteOnly,
                //    CustomVertex.PositionTextured.Format, Pool.Default);

                //_device.SetStreamSource(0, vb, 0);

                txb = new Bitmap(1, 1);
                using (Graphics g = Graphics.FromImage(txb))
                    g.Clear(Color.White);

                tcircleb = new Bitmap(9, 9);
                using (Graphics g = Graphics.FromImage(tcircleb))
                    g.FillEllipse(Brushes.White, new Rectangle(0, 0, 9, 9));

                tecircleb = new Bitmap(14, 14);
                using (Graphics g = Graphics.FromImage(tecircleb))
                    g.DrawEllipse(new Pen(Brushes.White), new Rectangle(0, 0, 13, 13));

                hcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(hcursorb))
                    Cursors.NoMoveHoriz.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(hcursorb);

                vcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(vcursorb))
                    Cursors.NoMoveVert.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(vcursorb);

                hvcursorb = new Bitmap(32, 32);
                using (Graphics g = Graphics.FromImage(hvcursorb))
                    Cursors.NoMove2D.Draw(g, new Rectangle(0, 0, 32, 32));
                MakeGray(hvcursorb);

                InitDeviceResources();
            }
            catch (SharpDXException ex)
            {
                throw new ArgumentException("Error initializing DirectX", ex);
            }
            catch (DllNotFoundException)
            {
                throw new Exception("Please install DirectX Redistributable June 2010");
            }
        }
Ejemplo n.º 21
0
 /// <summary>
 /// In start point or end point
 /// </summary>
 /// <param name="pane"></param>
 /// <param name="sr"></param>
 /// <returns></returns>
 public override bool IsIn(IDrawArea pane, ScreenRect sr)
 {
     return(sr.IsIn(_p0) | sr.IsIn(_p1));
 }