Пример #1
0
        void CreateSymdef(OcadSymbol ocadSym)
        {
            int symid;

            // Version 9 allows 3 decimal digits in OCAD symbols.
            if (version >= 9)
                symid = ocadSym.Sym;
            else
                symid = (ocadSym.Sym / 10) * 1000 + (ocadSym.Sym % 10);

            string name = ocadSym.Description;
            SymDef symdef = null;

            switch (ocadSym.Otp) {
            default:
                throw new OcadFileFormatException("Invalid Otp value {0} in symbol {1}", ocadSym.Otp, symid);
            case 1:
                symdef = CreatePointSymdef(name, symid, ocadSym as OcadPointSymbol);
                break;
            case 2:
                // Line symbols.
                // FEATURE: Line Text symbols
                if (version >= 9 || ocadSym.SymTp == 0)
                    symdef = CreateLineSymdef(name, symid, ocadSym as OcadLineSymbol);
                else
                    symdef = CreateLineTextSymdef(name, symid, ocadSym as OcadLineTextSymbol);
                break;
            case 3:
                // Area symbols.
                symdef = CreateAreaSymdef(name, symid, ocadSym as OcadAreaSymbol);
                break;

            case 4:
                symdef = CreateTextSymdef(name, symid, ocadSym as OcadTextSymbol);
                break;
            case 5:
            case 7:
                symdef = CreateRectangleSymdef(name, symid, ocadSym as OcadRectSymbol);
                break;
            case 6:
                symdef = CreateLineTextSymdef(name, symid, ocadSym as OcadLineTextSymbol);
                break;
            }

            if (symdef != null) {
            #if true
                if (version == 9)
                    symdef.ToolboxImage = ConvertOcad9Icon(ocadSym.IconBits);
                else if ((ocadSym.Flags & 2) != 0)
                    symdef.ToolboxImage = ConvertCompressedOcadIcon(ocadSym.IconBits);
                else
                    symdef.ToolboxImage = ConvertOcadIcon(ocadSym.IconBits);
            #endif

                map.AddSymdef(symdef);
                symdefids[symid] = symdef;

                if (ocadSym.Status == 2) {
                    // symbol is hidden.
                    map.SetSymdefVisible(symdef, false);
                }
            }
        }
Пример #2
0
        void CreateSymdefs(OcadSymbol[] symbols)
        {
            // We need to read area symdefs after all others, because area symdefs can depend on line symdefs.
            foreach (OcadSymbol ocadSym in symbols) {
                if (ocadSym.Otp != 3)
                    CreateSymdef(ocadSym);
            }

            foreach (OcadSymbol ocadSym in symbols) {
                if (ocadSym.Otp == 3)
                    CreateSymdef(ocadSym);
            }
        }
Пример #3
0
        // Fill in common parts of the OcadSymbol class: except Size, Otp, SymTp, Extent
        void FillInCommonSymdef(OcadSymbol symbol, SymDef symdef)
        {
            symbol.Sym = ConvertSymdefId(symdef.OcadID);
            symbol.Selected = false;
            symbol.Status = 0;
            symbol.FilePos = 0;

            List<short> colorsUsed = new List<short>(2);

            foreach (SymColor symcolor in map.AllColors) {
                if (symdef.HasColor(symcolor)) {
                    int colorid = NumberOfColor(symcolor);
                    symbol.ColorSet[colorid / 8] |= (byte) (1 << (colorid % 8));

                    if (version >= 9)
                        colorsUsed.Add((short) colorid);
                }
            }

            if (version >= 9) {
                symbol.nColors = (short) colorsUsed.Count;
                symbol.ColorsUsed = colorsUsed.ToArray();
                mapSymdefToSingleColor[symdef] = (colorsUsed.Count) == 1 ? colorsUsed[0] : (short) -1;     // if this symdef is single-color, save that away for use in writing the objects.
            }

            symbol.Description = symdef.Name;
            #if false
            symbol.IconBits = new byte[version <= 8 ? 264 : 22 * 22];
            #else
            symbol.IconBits = ImageToOcadIcon(symdef.ToolboxImage, version);
            #endif
            if (version == 8)
                symbol.Flags |= 2;

            if (!map.IsSymdefVisible(symdef)) {
                // Symbol is hidden.
                symbol.Status = 2;
            }
        }