/// <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), }); }
/// <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"); } }
/// <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, }); }
/// <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, }); }
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); }
/// <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)); }
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); }
/// <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)); } }
public float SelectingScore(IDrawArea pane, ScreenPos pos) { return(Rect.IsIn(pos) ? 0f : float.PositiveInfinity); }
/// <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)); }
/// <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)); }
/// <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))); }
/// <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); }
/// <summary> /// Screen position of the pane /// </summary> /// <param name="pane"></param> /// <returns></returns> public ScreenPos GetScreenPos(IDrawArea pane) { return(GetScreenPos(pane, Location)); }
/// <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"); } }
public override ScreenPos GetScreenPos(IDrawArea pane, CodePos <Distance, Distance> codepos) { throw new NotSupportedException(); }
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; } }
public override bool IsIn(IDrawArea pane, ScreenRect sr) { var s1 = GetScreenPos(pane); return(sr.IsIn(s1)); }
/// <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); }
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"); } }
/// <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)); }