示例#1
0
文件: OcadImport.cs 项目: jonc/carto
        Glyph CreateGlyph(OcadSymbolElt[] elts)
        {
            if (elts == null)
                return null;

            Glyph glyph = new Glyph();

            foreach (OcadSymbolElt elt in elts) {
                SymColor color = GetColor(elt.stColor);

                switch (elt.stType) {
                case 1: // line
                    glyph.AddLine(color, CreateSymPath(elt.stCoords), ToWorldDimensions(elt.stLineWidth), ImportLineStyle((short) elt.stFlags));
                    break;
                case 2: // area
                    SymPathWithHoles areaPath = CreateAreaSymPath(elt.stCoords);
                    glyph.AddArea(color, areaPath);
                    break;
                case 3: // circle
                    float width = ToWorldDimensions(elt.stLineWidth);
                    float diameter = ToWorldDimensions(elt.stDiameter);
                    if (version > 8)
                        diameter += width;              // diameter is from middle of line in OCAD 9+, from outer edges in OCAD 6-8.
                    glyph.AddCircle(color, PointFromOcadCoord(elt.stCoords[0]), width, diameter);
                    break;
                case 4:
                    glyph.AddFilledCircle(color, PointFromOcadCoord(elt.stCoords[0]), ToWorldDimensions(elt.stDiameter));
                    break;
                default:
                    throw new OcadFileFormatException("Invalid symbol element kind {0}", elt.stType);
                }
            }

            glyph.ConstructionComplete();

            return glyph;
        }