public static IPolygon CreateBoundsPolygon( INativeConverter nativeConverter, ICanvasFactory canvasFactory, int points) { var polygon = canvasFactory.CreatePolygon(); polygon.Points = new IPoint[points]; polygon.Lines = new ILine[points]; for (int i = 0; i < points; i++) { polygon.Points[i] = canvasFactory.CreatePoint(); var _xline = canvasFactory.CreateLine(); _xline.Stroke = canvasFactory.CreateColor(); _xline.Stroke.A = 0xFF; _xline.Stroke.R = 0x00; _xline.Stroke.G = 0xBF; _xline.Stroke.B = 0xFF; _xline.StrokeThickness = 2.0; var _nline = nativeConverter.Convert(_xline); polygon.Lines[i] = _nline; } return polygon; }
public XLineEditor( INativeConverter nativeConverter, ICanvasFactory canvasFactory, IBoundsFactory boundsFactory, ICanvas canvas) { _canvas = canvas; Name = "Line"; Key = "L"; Modifiers = ""; var moves = _canvas.Moves.Where(_ => _canvas.IsCaptured); var drags = Observable.Merge(_canvas.Downs, _canvas.Ups, moves); _downs = _canvas.Downs.Where(_ => IsEnabled).Subscribe(p => { if (_canvas.IsCaptured) { //_xline.Point2.X = p.X; //_xline.Point2.Y = p.Y; //_nline.Point2 = _xline.Point2; #if CONNECTORS ConnectPoint2(p); #endif _nline.Bounds.Hide(); _canvas.Render(null); _state = State.None; _canvas.ReleaseCapture(); } else { _xline = canvasFactory.CreateLine(); _xline.Point1.X = p.X; _xline.Point1.Y = p.Y; _xline.Point2.X = p.X; _xline.Point2.Y = p.Y; _nline = nativeConverter.Convert(_xline); _canvas.History.Snapshot(_canvas); #if CONNECTORS ConnectPoint1(p); #endif _canvas.Add(_nline); _nline.Bounds = boundsFactory.Create(_canvas, _nline); _nline.Bounds.Update(); _nline.Bounds.Show(); _canvas.Capture(); _canvas.Render(null); _state = State.End; } }); _drags = drags.Where(_ => IsEnabled).Subscribe(p => { if (_state == State.End) { _xline.Point2.X = p.X; _xline.Point2.Y = p.Y; _nline.Point2 = _xline.Point2; _nline.Bounds.Update(); _canvas.Render(null); } }); }