Ejemplo n.º 1
0
        private void RenderPolylinePrimitive(Graphics g, PolylineRecord polyline)
        {
            // this line cap size and scaling was accomplished after a lot of tinkering
            // and working around limitations of the System.Drawing library that does
            // things weird when the pen width is less than 2 pixels
            var penWidth    = ScaleLineWidth(polyline.LineWidth);
            var scaleStroke = Math.Max(1.0f, (polyline.LineShapeSize + 1));
            var scaleFill   = Math.Max(1.0f, (polyline.LineShapeSize + 1));

            if (polyline.LineWidth == 0)
            {
                // if line width is 0 (hairline) then here we use 1 pixel as things go badly
                // if the pen width is close to zero
                scaleStroke *= ScaleLineWidth(LineWidth.Small);
                scaleFill   *= ScaleLineWidth(LineWidth.Small) * 0.5f;
                penWidth     = 1.0f;
            }
            else if (penWidth < 2.0f)
            {
                scaleStroke *= 1.0f;
                scaleFill   *= ScaleLineWidth(LineWidth.Small) * 0.5f;
            }

            using (var pen = CreatePen(polyline.Color, penWidth))
            {
                pen.DashCap = DashCap.Round;
                switch (polyline.LineStyle)
                {
                case LineStyle.Dashed:
                    pen.DashStyle = DashStyle.Dash;
                    break;

                case LineStyle.Dotted:
                    pen.DashStyle = DashStyle.Dot;
                    break;

                default:
                    pen.DashStyle = DashStyle.Solid;
                    break;
                }

                if (polyline.StartLineShape != LineShape.None)
                {
                    pen.StartCap       = LineCap.Custom;
                    pen.CustomStartCap = GetLineShapeCap(polyline.StartLineShape, scaleFill, scaleStroke);
                }

                if (polyline.EndLineShape != LineShape.None)
                {
                    pen.EndCap       = LineCap.Custom;
                    pen.CustomEndCap = GetLineShapeCap(polyline.EndLineShape, scaleFill, scaleStroke);
                }

                var points = polyline.Location.Select(loc => ScreenFromWorld(loc)).ToArray();
                g.DrawLines(pen, points);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Instantiates a record according to its record type number.
        /// </summary>
        /// <param name="recordType">Integer representing the record type.</param>
        /// <returns>A new empty instance of a record primitive.</returns>
        private SchPrimitive CreateRecord(int recordType)
        {
            SchPrimitive record;

            switch (recordType)
            {
            case 1:
                record = new SchComponent();
                break;

            case 2:
                record = new PinRecord();
                break;

            case 3:
                record = new SymbolRecord();
                break;

            case 4:
                record = new TextStringRecord();
                break;

            case 5:
                record = new BezierRecord();
                break;

            case 6:
                record = new PolylineRecord();
                break;

            case 7:
                record = new PolygonRecord();
                break;

            case 8:
                record = new EllipseRecord();
                break;

            case 9:
                record = new PieChartRecord();
                break;

            case 10:
                record = new RoundedRectangleRecord();
                break;

            case 11:
                record = new EllipticalArcRecord();
                break;

            case 12:
                record = new ArcRecord();
                break;

            case 13:
                record = new LineRecord();
                break;

            case 14:
                record = new RectangleRecord();
                break;

            case 28:
            case 209:
                record = new TextFrameRecord();
                break;

            case 30:
                record = new ImageRecord();
                break;

            case 34:
                record = new Record34();
                break;

            case 41:
                record = new Record41();
                break;

            case 44:
                record = new Record44();
                break;

            case 45:
                record = new Record45();
                break;

            case 46:
                record = new Record46();
                break;

            case 48:
                record = new Record48();
                break;

            default:
                EmitWarning($"Record {recordType} not supported");
                record = new SchPrimitive();
                break;
            }

            return(record);
        }