public ModuleConstructor(IViewLayer vl, params PointF[] addPoints) { InfoLine = new ReactiveShape<Line>(new Line { Render = new LineRender { Pen = new Pen(Color.Gray, 0.1f), IsVisible = true } }); AreaPic = new ReactiveShape<Circle>(new Circle { Radius = 10, Render = { Pen = new Pen(Color.DimGray, 0.5f), Brush = Brushes.AliceBlue, IsFulled = true } }); FillerConstraint = new Dictionary<string, Func<Polygon, bool>> { {"TriangleOrMore", polygon => polygon.Count > 2}, // треугольник или больше {"NotSelfIntersection", polygon => !polygon.IsSelfIntersection},// без самопересечений {"Clockwise", polygon => polygon.OrientedArea < 0}, // ориентирован по часовой }; ViewLayer = vl; ViewLayer.AddShape(InfoLine); ViewLayer.AddShape(Filler = CreatePolygon(addPoints)); Filler.Shape.PointMoving += filler_PointMoving; Filler.Shape.PointAdding += Filler_PointAdding; Filler.Shape.PointRemoving += Filler_PointRemoving; Filler.Shape.PointAdded += Filler_PointAdded; Filler.Shape.PointRemoved += Filler_PointRemoved; Filler.MouseSenseEnter += Filler_MouseSenseEnter; Filler.MouseSenseLeave += Filler_MouseSenseLeave; Filler.MouseSense += Filler_MouseSense; Filler.IsSenseMouse = true; Filler.ExternalDistanceSense = 10; Filler.InternalDistanceSense = 10; if (addPoints != null && addPoints.Length > 0) { Markers.AddRange(addPoints.Select(CreateMarker)); } ViewLayer.AddShape(Caption = CreateCaption()); FitchInfoPics(); ViewLayer.AddShape(AreaPic); AreaPic.MouseEnter += AreaPic_MouseEnter; AreaPic.MouseLeave += AreaPic_MouseLeave; CreateAddingPointMaker(); Filler.CommandHandlers["EndDrag"].FinishHnd += (shape, code, args) => AdjustFiller(); AdjustFiller(); }
private ReactiveShape<Polygon> CreatePolygon(params PointF[] pnts) { var filler = new ReactiveShape<Polygon>(new Polygon(pnts) { Render = new PolygonRender { Pen = new Pen(Color.DimGray, 2), Brush = Brush, IsFulled = true } }).CreateDragMoveIterationHelper(); filler.ChangedForm += filler_ChangedForm; return filler; }
private ReactiveShape<Circle> CreateMarker(PointF pnt) { var cir = new ReactiveShape<Circle>(new Circle(7) { Pen = new Pen(Color.DimGray, 0.5f), Brush = Brushes.DimGray, IsFulled = true }).ToCenterPoint(pnt); cir.CommandHandlers["EndDrag"].FinishHnd += (shape, code, args) => AdjustFiller(); cir.ChangedForm += marker_ChangedForm; cir.MouseClick += marker_MouseClick; cir.Disposing += marker_Disposing; cir.CreateGuideLine().CreateSenseGuideLine(); cir.CreateDragMoveIterationHelper(); cir.CreateChangerBrushOnHoverAndClick(Brushes.Yellow, Brushes.Green); ViewLayer.GetAboveLayer().AddShape(cir); return cir; }
/// <summary> /// /// </summary> private void CreateAddingPointMaker() { addingPointMaker = new ReactiveShape<Circle>(new Circle(7) { Pen = new Pen(Color.DimGray, 0.5f), Brush = Brushes.Lime, IsVisible = false, IsFilled = true, IsOutlining = true }); addingPointMaker.MouseDown += addingPointMaker_MouseDown; addingPointMaker.MouseClick += addingPointMaker_MouseClick; addingPointMaker.ChangedForm += addingPointMaker_ChangedForm; addingPointMaker.CreateActionOnDragHelper(10, true, ActionOnDragOnDistanceAddingMarker); ViewLayer.GetAboveLayer().AddShape(addingPointMaker); }
private ReactiveShape<Text> CreateCaption() { var txt = new ReactiveShape<Text>(new Text { String = Filler.Shape.Area.ToString("R"), Brush = Brushes.Navy, Font = new Font("Tahoma", 10), Pen = Pen, RestrictBox = false, IsFulled = true, Bounds = Filler.Bounds }) { Shape = { Format = new StringFormat(StringFormat.GenericDefault) { Alignment = StringAlignment.Near } } }; return txt; }
private static void CreateAndShowStartMenu() { var backMenu = View[1000]; backMenu.IsVisible = true; IReactiveShape logo = new ReactiveShape<Sprite>( Sprite.Create<Sprite, SpriteRender>(res.GetImage("\\loc-images\\" + Config.Locale + "\\main-logo")) ){ IsSenseMouse = true, InternalDistanceSense = 20, ExternalDistanceSense = 20 }; var lc = logo.GetCenter(); logo.Location = new PointF(-lc.X, -lc.Y); backMenu.AddShape(logo); }