Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 /// <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);
 }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
        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);

        }