public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0 || editing) { return; } using (SolidBrush brushBack = styleHelper.GetBackgroundBrush((int)(opacityFactor * 128))) using (SolidBrush brushText = styleHelper.GetForegroundBrush((int)(opacityFactor * 255))) using (Font fontText = styleHelper.GetFont((float)transformer.Scale)) { // Note: recompute background size in case the font floored. SizeF textSize = canvas.MeasureString(text, fontText); Point bgLocation = transformer.Transform(background.Rectangle.Location); Size bgSize = new Size((int)textSize.Width, (int)textSize.Height); SizeF untransformed = transformer.Untransform(textSize); background.Rectangle = new RectangleF(background.Rectangle.Location, untransformed); Rectangle rect = new Rectangle(bgLocation, bgSize); RoundedRectangle.Draw(canvas, rect, brushBack, fontText.Height / 4, false, false, null); canvas.DrawString(text, fontText, brushText, rect.Location); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0) { return; } using (Pen penLine = styleHelper.GetPen(opacityFactor, transformer.Scale)) { Point[] points = transformer.Transform(pointList).ToArray(); if (!initializing) { penLine.EndCap = LineCap.Round; penLine.StartCap = LineCap.Round; if (styleHelper.PenShape == PenShape.Dash) { penLine.DashStyle = DashStyle.Dash; } canvas.DrawCurve(penLine, points, 0.5f); } else { penLine.Width = 1.0f; canvas.DrawLines(penLine, points); } } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityTrackable(trackingTimestamps, currentTimestamp); if (opacityFactor <= 0) { return; } Point start = transformer.Transform(points["a"]); Point end = transformer.Transform(points["b"]); using (Pen penEdges = styleHelper.GetPen(opacityFactor, transformer.Scale)) using (Brush brush = styleHelper.GetBrush(opacityFactor)) { if (distorter != null && distorter.Initialized) { DrawDistorted(canvas, distorter, transformer, penEdges, brush, start, end); } else { DrawStraight(canvas, transformer, penEdges, brush, start, end); } } if (trackExtraData != TrackExtraData.None) { string text = GetExtraDataText(); miniLabel.SetText(text); miniLabel.Draw(canvas, transformer, opacityFactor); } }
private void DrawStraight(Graphics canvas, IImageToViewportTransformer transformer, Pen penEdges, Point start, Point end) { if (styleHelper.LineShape == LineShape.Squiggle) { canvas.DrawSquigglyLine(penEdges, start, end); } else if (styleHelper.LineShape == LineShape.Dash) { penEdges.DashStyle = DashStyle.Dash; canvas.DrawLine(penEdges, start, end); } else { canvas.DrawLine(penEdges, start, end); } labelMeasure.SetAttach(GetMiddlePoint(), true); if (styleHelper.LineEnding == LineEnding.StartArrow || styleHelper.LineEnding == LineEnding.DoubleArrow) { ArrowHelper.Draw(canvas, penEdges, start, end); } if (styleHelper.LineEnding == LineEnding.EndArrow || styleHelper.LineEnding == LineEnding.DoubleArrow) { ArrowHelper.Draw(canvas, penEdges, end, start); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (tracking) { opacityFactor = 1.0; } if (opacityFactor <= 0) { return; } int iAlpha = (int)(opacityFactor * 255); Point c = transformer.Transform(points["0"]); using (Pen p = styleHelper.GetPen(iAlpha)) using (SolidBrush b = styleHelper.GetBrush((int)(opacityFactor * defaultBackgroundAlpha))) { canvas.DrawLine(p, c.X - defaultRadius, c.Y, c.X + defaultRadius, c.Y); canvas.DrawLine(p, c.X, c.Y - defaultRadius, c.X, c.Y + defaultRadius); canvas.FillEllipse(b, c.Box(defaultRadius + 1)); } if (ShowMeasurableInfo) { labelCoordinates.SetText(CalibrationHelper.GetPointText(new PointF(points["0"].X, points["0"].Y), true, true, infosFading.ReferenceTimestamp)); labelCoordinates.Draw(canvas, transformer, opacityFactor); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (tracking) { opacityFactor = 1.0; } if (opacityFactor <= 0) { return; } int iAlpha = (int)(opacityFactor * 255); Point c = transformer.Transform(points["0"]); using (Pen p = styleHelper.GetPen(iAlpha)) using (SolidBrush b = styleHelper.GetBrush((int)(opacityFactor * defaultBackgroundAlpha))) { canvas.DrawLine(p, c.X - defaultRadius, c.Y, c.X + defaultRadius, c.Y); canvas.DrawLine(p, c.X, c.Y - defaultRadius, c.X, c.Y + defaultRadius); canvas.FillEllipse(b, c.Box(defaultRadius + 1)); } if (trackExtraData != TrackExtraData.None) { string text = GetExtraDataText(infosFading.ReferenceTimestamp); miniLabel.SetText(text); miniLabel.Draw(canvas, transformer, opacityFactor); } }
public double AddSpot(long timestamp, GraphicsPath path, IImageToViewportTransformer transformer) { // Add the shape of this spotlight to the global mask for the frame. // The dim rectangle is added separately in Spotlights class. double opacityFactor = infosFading.GetOpacityFactor(timestamp); if (tracking) { opacityFactor = 1.0; } if (opacityFactor <= 0) { return(0); } //RescaleCoordinates(_fStretchFactor, _DirectZoomTopLeft); Point center = transformer.Transform(points["o"]); int r = transformer.Transform(radius); rescaledRect = center.Box(r); path.AddEllipse(rescaledRect); // Return the opacity factor at this spot so the spotlights manager is able to compute the global dim value. return(opacityFactor); }
public void Draw(Graphics canvas, IImageToViewportTransformer transformer, long timestamp, StyleHelper styleHelper) { double opacityFactor = infosFading.GetOpacityFactor(timestamp); if (opacityFactor <= 0) { return; } using (SolidBrush brushBack = styleHelper.GetBackgroundBrush((int)(opacityFactor * 255))) using (SolidBrush brushText = styleHelper.GetForegroundBrush((int)(opacityFactor * 255))) using (Font fontText = styleHelper.GetFont((float)transformer.Scale)) using (Pen penContour = styleHelper.GetForegroundPen((int)(opacityFactor * 255))) { // Note: recompute background size in case the font floored. string text = value.ToString(); SizeF textSize = canvas.MeasureString(text, fontText); Point bgLocation = transformer.Transform(background.Rectangle.Location); Size bgSize = new Size((int)textSize.Width, (int)textSize.Height); SizeF untransformed = transformer.Untransform(textSize); background.Rectangle = new RectangleF(background.Rectangle.Location, untransformed); penContour.Width = 2; Rectangle rect = new Rectangle(bgLocation, bgSize); RoundedRectangle.Draw(canvas, rect, brushBack, fontText.Height / 4, false, true, penContour); canvas.DrawString(text, fontText, brushText, rect.Location); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { foreach (AutoNumber number in autoNumbers) { number.Draw(canvas, transformer, currentTimestamp, styleHelper); } }
private void DrawDistorted(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, Pen penEdges, Brush brush, Point start, Point end) { List <PointF> curve = distorter.DistortLine(points["a"], points["b"]); List <Point> transformedCurve = transformer.Transform(curve); if (styleHelper.LineShape == LineShape.Squiggle) { canvas.DrawSquigglyLine(penEdges, start, end); } else if (styleHelper.LineShape == LineShape.Dash) { DashStyle oldDashStyle = penEdges.DashStyle; penEdges.DashStyle = DashStyle.Dash; canvas.DrawCurve(penEdges, transformedCurve.ToArray()); penEdges.DashStyle = oldDashStyle; } else { canvas.DrawCurve(penEdges, transformedCurve.ToArray()); } miniLabel.SetAttach(curve[curve.Count / 2], true); if (styleHelper.LineEnding == LineEnding.StartArrow || styleHelper.LineEnding == LineEnding.DoubleArrow) { ArrowHelper.Draw(canvas, penEdges, start, end); } if (styleHelper.LineEnding == LineEnding.EndArrow || styleHelper.LineEnding == LineEnding.DoubleArrow) { ArrowHelper.Draw(canvas, penEdges, end, start); } }
public int HitTest(PointF point, IImageToViewportTransformer transformer) { int result = -1; PointF topLeft = new PointF(rectangle.Left, rectangle.Top); PointF topRight = new PointF(rectangle.Right, rectangle.Top); PointF botRight = new PointF(rectangle.Right, rectangle.Bottom); PointF botLeft = new PointF(rectangle.Left, rectangle.Bottom); if (HitTester.HitTest(topLeft, point, transformer)) { result = 1; } else if (HitTester.HitTest(topRight, point, transformer)) { result = 2; } else if (HitTester.HitTest(botRight, point, transformer)) { result = 3; } else if (HitTester.HitTest(botLeft, point, transformer)) { result = 4; } else if (rectangle.Contains(point.ToPoint())) { result = 0; } return(result); }
public static bool HitTest(PointF target, PointF mouse, IImageToViewportTransformer transformer) { int radius = 10; int boxRadius = Math.Max(1, transformer.Untransform(radius)); return(target.Box(boxRadius).Contains(mouse)); }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0 || !loaded) { return; } Rectangle rect = transformer.Transform(boundingBox.Rectangle); if (finishedResizing) { finishedResizing = false; RenderAtNewScale(rect.Size, transformer.Scale); } if (svgRendered == null) { return; } fadingColorMatrix.Matrix33 = (float)opacityFactor; fadingImgAttr.SetColorMatrix(fadingColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); canvas.DrawImage(svgRendered, rect, 0, 0, svgRendered.Width, svgRendered.Height, GraphicsUnit.Pixel, fadingImgAttr); if (selected) { boundingBox.Draw(canvas, rect, penBoundingBox, brushBoundingBox, 4); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { if (!valid) { return; } double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0) { return; } Rectangle rect = transformer.Transform(boundingBox.Rectangle); fadingColorMatrix.Matrix33 = (float)opacityFactor; fadingImgAttr.SetColorMatrix(fadingColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); canvas.DrawImage(bitmap, rect, 0, 0, bitmap.Width, bitmap.Height, GraphicsUnit.Pixel, fadingImgAttr); if (selected) { boundingBox.Draw(canvas, rect, penBoundingBox, brushBoundingBox, 4); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0) { return; } int alpha = (int)(opacityFactor * 255); this.selected = selected; using (Pen p = styleHelper.GetPen(alpha, transformer.Scale)) { Rectangle boundingBox = transformer.Transform(center.Box(radius)); canvas.DrawEllipse(p, boundingBox); if (selected) { // Handler: arc in lower right quadrant. p.Color = p.Color.Invert(); canvas.DrawArc(p, boundingBox, 25, 40); } } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0) { return; } QuadrilateralF quad = transformer.Transform(quadImage); int alpha = (int)(opacityFactor * 255); using (Pen p = styleHelper.GetPen(alpha, transformer.Scale)) { p.EndCap = LineCap.Square; if (styleHelper.PenShape == PenShape.Dash) { p.DashStyle = DashStyle.Dash; } canvas.DrawLine(p, quad.A, quad.B); canvas.DrawLine(p, quad.B, quad.C); canvas.DrawLine(p, quad.C, quad.D); canvas.DrawLine(p, quad.D, quad.A); } }
private bool IsPointInObject(PointF point, IImageToViewportTransformer transformer) { // Angles, hit zones, segments. bool hit = false; foreach (AngleHelper angle in angles) { hit = angle.SweepAngle.Hit(point); if (hit) { break; } } if (hit) { return(true); } foreach (GenericPostureAbstractHitZone hitZone in genericPosture.HitZones) { hit = IsPointInHitZone(hitZone, point); if (hit) { break; } } if (hit) { return(true); } foreach (GenericPostureCircle circle in genericPosture.Circles) { hit = IsPointInsideCircle(circle, point, transformer); if (hit) { break; } } if (hit) { return(true); } foreach (GenericPostureSegment segment in genericPosture.Segments) { hit = IsPointOnSegment(segment, point, transformer); if (hit) { break; } } return(hit); }
private bool IsPointOnHandler(PointF point, IImageToViewportTransformer transformer) { using (GraphicsPath path = new GraphicsPath()) { path.AddArc(points["o"].X - radius, points["o"].Y - radius, radius * 2, radius * 2, 0, 360); return(HitTester.HitTest(path, point, 2, false, transformer)); } }
private bool IsPointInObject(PointF point, IImageToViewportTransformer transformer) { using (GraphicsPath path = new GraphicsPath()) { path.AddEllipse(points["o"].X - radius, points["o"].Y - radius, radius * 2, radius * 2); return(HitTester.HitTest(path, point, 0, true, transformer)); } }
private bool IsPointOnArc(GenericPostureCircle circle, PointF point, IImageToViewportTransformer transformer) { using (GraphicsPath path = new GraphicsPath()) { PointF center = circle.Center >= 0 ? genericPosture.PointList[circle.Center] : GetUntransformedComputedPoint(circle.Center); path.AddArc(center.Box(circle.Radius), 0, 360); return(HitTester.HitTest(path, point, circle.Width, false, transformer)); } }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { if (!Visible || imageSize == SizeF.Empty) { return; } DrawGrid(canvas, transformer); }
private void DrawCenteredCircle(Graphics canvas, IImageToViewportTransformer transformer, Pen pen, float radiusX, float radiusY) { PointF a = Map(new PointF(-radiusX, radiusY)); PointF b = Map(new PointF(radiusX, radiusY)); PointF c = Map(new PointF(radiusX, -radiusY)); RectangleF rect = new RectangleF(a.X, a.Y, b.X - a.X, c.Y - a.Y); canvas.DrawEllipse(pen, transformer.Transform(rect)); }
private bool IsPointInsideCircle(GenericPostureCircle circle, PointF point, IImageToViewportTransformer transformer) { using (GraphicsPath path = new GraphicsPath()) { PointF center = circle.Center >= 0 ? genericPosture.PointList[circle.Center] : GetUntransformedComputedPoint(circle.Center); path.AddEllipse(center.Box(circle.Radius)); return(HitTester.HitTest(path, point, 0, true, transformer)); } }
private void ComputeTextPosition(Angle angle, IImageToViewportTransformer transformer) { int imageTextDistance = transformer.Untransform(textDistance); double bissect = (angle.Start + angle.Sweep / 2) * MathHelper.DegreesToRadians; int adjacent = (int)(Math.Cos(bissect) * imageTextDistance); int opposed = (int)(Math.Sin(bissect) * imageTextDistance); TextPosition = new Point(adjacent, opposed); }
private bool IsPointInObject(PointF point, IImageToViewportTransformer transformer) { bool hit = false; using (GraphicsPath areaPath = new GraphicsPath()) { areaPath.AddEllipse(center.Box(radius + styleHelper.LineSize)); hit = HitTester.HitTest(areaPath, point, 0, true, transformer); } return(hit); }
private bool IsPointInObject(PointF point, IImageToViewportTransformer transformer) { bool hit = false; using (GraphicsPath areaPath = new GraphicsPath()) { GetHitPath(areaPath); hit = HitTester.HitTest(areaPath, point, 0, true, transformer); } return(hit); }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { if (currentTimestamp < visibleTimestamp) { return; } double opacityFactor = 1.0; if (currentTimestamp > invisibleTimestamp) { opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); } if (opacityFactor <= 0) { return; } timecode = GetTimecode(currentTimestamp); string text = timecode; using (SolidBrush brushBack = styleHelper.GetBackgroundBrush((int)(opacityFactor * 128))) using (SolidBrush brushText = styleHelper.GetForegroundBrush((int)(opacityFactor * 255))) using (Font fontText = styleHelper.GetFont((float)transformer.Scale)) { SizeF textSize = canvas.MeasureString(text, fontText); Point bgLocation = transformer.Transform(mainBackground.Rectangle.Location); Size bgSize = new Size((int)textSize.Width, (int)textSize.Height); SizeF untransformed = transformer.Untransform(textSize); mainBackground.Rectangle = new RectangleF(mainBackground.Rectangle.Location, untransformed); Rectangle rect = new Rectangle(bgLocation, bgSize); int roundingRadius = fontText.Height / 4; RoundedRectangle.Draw(canvas, rect, brushBack, roundingRadius, false, false, null); canvas.DrawString(text, fontText, brushText, rect.Location); if (showLabel && name.Length > 0) { using (Font fontLabel = styleHelper.GetFont((float)transformer.Scale * 0.5f)) { // Note: the alignment here assumes fixed margins of the rounded rectangle class. SizeF lblTextSize = canvas.MeasureString(name, fontLabel); int labelRoundingRadius = fontLabel.Height / 3; int top = rect.Location.Y - (int)lblTextSize.Height - roundingRadius - labelRoundingRadius; Rectangle lblRect = new Rectangle(rect.Location.X, top, (int)lblTextSize.Width, (int)lblTextSize.Height); RoundedRectangle.Draw(canvas, lblRect, brushBack, labelRoundingRadius, true, false, null); canvas.DrawString(name, fontLabel, brushText, lblRect.Location); } } } }
private void UpdateAngles(IImageToViewportTransformer transformer) { for (int i = 0; i < angles.Count; i++) { PointF origin = genericPosture.Points[genericPosture.Angles[i].Origin]; PointF leg1 = genericPosture.Points[genericPosture.Angles[i].Leg1]; PointF leg2 = genericPosture.Points[genericPosture.Angles[i].Leg2]; int radius = genericPosture.Angles[i].Radius; Color color = genericPosture.Angles[i].Color; angles[i].Update(origin, leg1, leg2, radius, color, CalibrationHelper, transformer); } }
public int HitTest(PointF point, long currentTimeStamp, IImageToViewportTransformer transformer) { int result = -1; double opacity = infosFading.GetOpacityFactor(currentTimeStamp); if (opacity > 0) { return(background.HitTest(point, false, 0, transformer)); } return(result); }
public override void Draw(Graphics canvas, DistortionHelper distorter, IImageToViewportTransformer transformer, bool selected, long currentTimestamp) { double opacityFactor = infosFading.GetOpacityFactor(currentTimestamp); if (opacityFactor <= 0) { return; } List <Point> screenPoints = transformer.Transform(points); using (penEdges = styleHelper.GetPen(opacityFactor, 1.0)) using (SolidBrush br = styleHelper.GetBrush(opacityFactor)) { int rows = subdivisions + 1; int cols = rows; // Rows for (int i = 0; i < rows; i++) { int row = i; List <Point> line = new List <Point>(); for (int j = 0; j < cols; j++) { int index = row * cols + j; line.Add(screenPoints[index]); } canvas.DrawCurve(penEdges, line.ToArray()); } // Columns for (int i = 0; i < cols; i++) { int col = i; List <Point> line = new List <Point>(); for (int j = 0; j < rows; j++) { int index = j * cols + col; line.Add(screenPoints[index]); } canvas.DrawCurve(penEdges, line.ToArray()); } // Handles foreach (PointF p in screenPoints) { canvas.FillEllipse(br, p.Box(4)); } } }