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; }