SymDef CreateTextSymdef(string name, int ocadID, OcadTextSymbol ocadSym) { SymColor fontColor; bool bold, italic; TextSymDef symdef; float fontSize; float paraSpacing; float firstIndent, restIndent; float charSpacing, wordSpacing; float[] tabs; TextSymDefAlignment fontAlign; fontColor = GetColor(ocadSym.FontColor); italic = ocadSym.Italic; bold = (ocadSym.Weight >= 500); if (ocadSym.Alignment == 1) fontAlign = TextSymDefAlignment.Center; else if (ocadSym.Alignment == 2) fontAlign = TextSymDefAlignment.Right; else if (ocadSym.Alignment == 3) fontAlign = TextSymDefAlignment.Justified; else fontAlign = TextSymDefAlignment.Left; // ocadSym.FontSize is in 10ths of a point. Convert to mm. fontSize = ocadSym.FontSize / 720F * 25.4F; paraSpacing = ToWorldDimensions(ocadSym.ParaSpace); // paragraph spacing in mm. firstIndent = ToWorldDimensions(ocadSym.IndentFirst); // indent first line in mm. restIndent = ToWorldDimensions(ocadSym.IndentOther); // indent rest lines in mm. charSpacing = ocadSym.CharSpace / 100F; wordSpacing = ocadSym.WordSpace / 100F; if (ocadSym.LBOn) { paraSpacing += ToWorldDimensions(ocadSym.LBDist + ocadSym.LBWidth); // underlining counts in paragraph spacing. } tabs = null; if (ocadSym.nTabs > 0) { tabs = new float[ocadSym.nTabs]; for (int i = 0; i < ocadSym.nTabs; ++i) tabs[i] = ToWorldDimensions(ocadSym.Tabs[i]); } symdef = new TextSymDef(name, ocadID); symdef.SetFont(ocadSym.FontName, fontSize, bold, italic, fontColor, fontSize * ocadSym.LineSpace / 100F, paraSpacing, firstIndent, restIndent, tabs, charSpacing, wordSpacing, fontAlign); // handle framing. ReadFraming(ocadSym.FrMode, ocadSym.FrFlags, ocadSym.FrColor, ocadSym.FrWidth, ocadSym.FrSize, ocadSym.FrOfX, ocadSym.FrOfY, ocadSym.FrLeft, ocadSym.FrTop, ocadSym.FrRight, ocadSym.FrBottom, symdef); if (ocadSym.LBOn) { TextSymDef.Underlining underline = new TextSymDef.Underlining(); underline.underlineOn = true; underline.underlineColor = GetColor(ocadSym.LBColor); underline.underlineDistance = ToWorldDimensions(ocadSym.LBDist); underline.underlineWidth = ToWorldDimensions(ocadSym.LBWidth); symdef.SetUnderline(underline); } return symdef; }
SymDef CreateLineTextSymdef(string name, int ocadID, OcadLineTextSymbol ocadSym) { SymColor fontColor; bool bold, italic; TextSymDef symdef; float fontSize; float charSpacing; float wordSpacing; TextSymDefAlignment fontAlign; fontColor = GetColor(ocadSym.FontColor); italic = ocadSym.Italic; bold = (ocadSym.Weight >= 500); if (ocadSym.Alignment == 1) fontAlign = TextSymDefAlignment.Center; else if (ocadSym.Alignment == 2) fontAlign = TextSymDefAlignment.Right; else if (ocadSym.Alignment == 3) fontAlign = TextSymDefAlignment.Justified; else fontAlign = TextSymDefAlignment.Left; // ocadSym.FontSize is in 10ths of a point. Convert to mm. fontSize = ocadSym.FontSize / 720F * 25.4F; charSpacing = ocadSym.CharSpace / 100F; wordSpacing = ocadSym.WordSpace / 100F; symdef = new TextSymDef(name, ocadID); symdef.SetFont(ocadSym.FontName, fontSize, bold, italic, fontColor, fontSize, 0F, 0F, 0F, null, charSpacing, wordSpacing, fontAlign); // handle framing. ReadFraming(ocadSym.FrMode, ocadSym.FrFlags, ocadSym.FrColor, ocadSym.FrWidth, ocadSym.FrSize, ocadSym.FrOfX, ocadSym.FrOfY, 0, 0, 0, 0, symdef); return symdef; }
// If a rectangle symbol include a grid, then we create extra line and text symbols // to handle the grid and numbers in the grid. void CreateRectangleGridSymdefs(string name, SymColor color, out LineSymDef lineSymdef, out TextSymDef textSymdef) { // UNDONE: Really should check that a real // UNDONE: symbol isn't using these ids, or that there aren't already synthetic symbols that match. lineSymdef = new LineSymDef(name + " grid lines", ocadIdNext++, color, 0.15F, LineStyle.Beveled); textSymdef = new TextSymDef(name + " grid text", ocadIdNext++); textSymdef.SetFont("Arial", 15F / 72F * 25.4F, true, false, color, 0, 0, 0, 0, null, 0, 1F, TextSymDefAlignment.Left); map.AddSymdef(lineSymdef); map.AddSymdef(textSymdef); }