コード例 #1
0
        void ISelectable.DrawSelection(GaugeGraphics g, bool designTimeSelection)
        {
            if (GetGauge() == null)
            {
                return;
            }
            Stack stack = new Stack();

            for (NamedElement namedElement = GetGauge().ParentObject; namedElement != null; namedElement = (NamedElement)((IRenderable)namedElement).GetParentRenderable())
            {
                stack.Push(namedElement);
            }
            foreach (IRenderable item in stack)
            {
                g.CreateDrawRegion(item.GetBoundRect(g));
            }
            g.CreateDrawRegion(((IRenderable)GetGauge()).GetBoundRect(g));
            SetDrawRegion(g);
            Gap gap = new Gap(GetRadius());

            gap.SetOffset(Placement.Cross, Width);
            gap.SetBase();
            if (MajorTickMark.Visible)
            {
                gap.SetOffsetBase(MajorTickMark.Placement, MajorTickMark.Length);
                if (MajorTickMark.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - MajorTickMark.DistanceFromScale);
                }
                else if (MajorTickMark.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f);
                    gap.Inside  = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f);
                }
            }
            if (MinorTickMark.Visible)
            {
                gap.SetOffsetBase(MinorTickMark.Placement, MinorTickMark.Length);
                if (MinorTickMark.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - MinorTickMark.DistanceFromScale);
                }
                else if (MinorTickMark.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f);
                    gap.Inside  = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f);
                }
            }
            if (LabelStyle.Visible)
            {
                if (LabelStyle.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - LabelStyle.DistanceFromScale);
                }
                else if (LabelStyle.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f);
                    gap.Inside  = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f);
                }
            }
            float angularMargin = 4f;
            float num           = 5f;

            using (GraphicsPath graphicsPath = GetBarPath(gap.Inside + num, gap.Outside + num, angularMargin))
            {
                if (graphicsPath != null)
                {
                    PointF[] selectionMarkers = GetSelectionMarkers(g, gap.Inside + num, gap.Outside + num, angularMargin);
                    g.DrawRadialSelection(g, graphicsPath, selectionMarkers, designTimeSelection, Common.GaugeCore.SelectionBorderColor, Common.GaugeCore.SelectionMarkerColor);
                }
            }
            g.RestoreDrawRegion();
            g.RestoreDrawRegion();
            foreach (IRenderable item2 in stack)
            {
                _ = item2;
                g.RestoreDrawRegion();
            }
        }
コード例 #2
0
        private void SetScaleHitTestPath(GaugeGraphics g)
        {
            Gap gap = new Gap(GetRadius());

            gap.SetOffset(Placement.Cross, Width);
            gap.SetBase();
            if (MajorTickMark.Visible)
            {
                gap.SetOffsetBase(MajorTickMark.Placement, MajorTickMark.Length);
                if (MajorTickMark.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - MajorTickMark.DistanceFromScale);
                }
                else if (MajorTickMark.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f);
                    gap.Inside  = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f);
                }
            }
            if (MinorTickMark.Visible)
            {
                gap.SetOffsetBase(MinorTickMark.Placement, MinorTickMark.Length);
                if (MinorTickMark.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - MinorTickMark.DistanceFromScale);
                }
                else if (MinorTickMark.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f);
                    gap.Inside  = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f);
                }
            }
            if (LabelStyle.Visible)
            {
                if (LabelStyle.Placement == Placement.Outside)
                {
                    gap.Outside = Math.Max(gap.Outside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f);
                    gap.Inside  = Math.Max(gap.Inside, 0f - LabelStyle.DistanceFromScale);
                }
                else if (LabelStyle.Placement == Placement.Cross)
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f);
                    gap.Inside  = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f);
                }
                else
                {
                    gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale);
                    gap.Inside  = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f);
                }
            }
            GraphicsPath barPath = GetBarPath(gap.Inside, gap.Outside, 0f);

            Common.GaugeCore.HotRegionList.SetHotRegion(this, g.GetAbsolutePoint(GetPivotPoint()), barPath);
        }