Example #1
0
        private void WriteGradientDefs(List <GradientFill> gradients)
        {
            WriteTag(VexDrawTag.GradientFillList);
            WriteBits(0, 5);             // note: no nBits here, just padding
            WriteBits(gradients.Count, 11);
            for (int index = 0; index < gradients.Count; index++)
            {
                GradientFill gf = gradients[index];
                // first type - all non radial will be solid
                // use 8 bits for future expansion and to keep semi aligned
                int type = (gf.FillType == FillType.Radial) ? 1 : 0;
                WriteBits(type, 3);

                float[] tltr   = DrawObject.GetGradientLine(gf);
                int[]   values = new int[4];
                for (int i = 0; i < tltr.Length; i++)
                {
                    values[i] = (int)(tltr[i] * DrawObject.twips);
                }
                WriteFourNBitValues(values);

                // new argb colors
                List <Color> colors    = new List <Color>(gf.Fills);
                List <float> positions = new List <float>(gf.Stops);
                if (gf.FillType == FillType.Radial)
                {
                    gf.ReverseStops(colors, positions);
                }

                // stops and ratios [[col,rat],[col,rat]...]
                int stopCount = colors.Count;
                if (stopCount > 8)
                {
                    stopCount = 8;
                    Console.WriteLine("*Flash only supports 8 colors max in gradients");
                }

                uint[] wCols = new uint[stopCount];
                for (int i = 0; i < stopCount; i++)
                {
                    wCols[i] = colors[i].AFlipRGB;
                }
                uint colBits = MinBits(wCols);
                WriteNBitsCount(colBits);

                int[] ratios = new int[positions.Count];
                for (int i = 0; i < stopCount; i++)
                {
                    ratios[i] = (int)(positions[i] * 255);
                }
                uint ratioBits = MinBits(ratios);
                WriteNBitsCount(ratioBits);

                WriteBits(stopCount, 11);

                for (int i = 0; i < stopCount; i++)
                {
                    WriteBits(wCols[i], colBits);
                    WriteBits(ratios[i], ratioBits);
                }
            }
            FlushTag();
        }
Example #2
0
        public void ToJson(StringBuilder sb)
        {
            sb.Append("\n{\n");

            // Definition Names
            sb.Append("\"definitionNameTable\":[");
            string comma = "";

            foreach (uint id in definitionNames.Keys)
            {
                sb.Append(comma + "[" + id + ",\"" + definitionNames[id] + "\"]");
                comma = ",";
            }
            sb.Append("],\n");

            // Instance Names
            sb.Append("\"instanceNameTable\":[");
            comma = "";
            foreach (uint id in instanceNames.Keys)
            {
                sb.Append(comma + "[" + id + ",\"" + instanceNames[id] + "\"]");
                comma = ",";
            }
            sb.Append("],\n");


            // strokes
            sb.Append("\"strokes\":[");
            //sb.Append("\\\\ strokes\n[");
            comma = "";
            foreach (SolidStroke ss in strokes)
            {
                sb.Append(comma + ss.LineWidth.ToString("0.##") + ",");
                sb.Append(ss.Color.AFlipRGB.ToString());
                comma = ",";
            }
            sb.Append("],\n");


            // solid fills
            sb.Append("\"fills\":[\n");
            //sb.Append("[\n\\\\ solid fills\n");
            comma = "";
            bool inGradients = false;

            foreach (FillStyle fs in fills)
            {
                if (fs.FillType == FillType.Solid)
                {
                    SolidFill sf = (SolidFill)fs;
                    sb.Append(comma + sf.Color.AFlipRGB.ToString());
                    comma = ",";
                }
                else
                {
                    if (!inGradients)
                    {
                        sb.Append(",\n");
                        //sb.Append(",\n\\\\ gradients\n");
                        comma = "";
                    }
                    inGradients = true;

                    GradientFill gf = (GradientFill)fs;

                    sb.Append(comma + "[");
                    sb.Append(gf.GradientType == GradientType.Linear ? "\"L\"," : "\"R\",");
                    sb.Append("[" + GetGradientLineString(gf) + "],");

                    // new argb colors
                    List <Color> colors    = new List <Color>(gf.Fills);
                    List <float> positions = new List <float>(gf.Stops);
                    if (gf.FillType == FillType.Radial)
                    {
                        gf.ReverseStops(colors, positions);
                    }

                    string comma2 = "";
                    sb.Append("[");
                    for (int i = 0; i < colors.Count; i++)
                    {
                        Color c = colors[i];
                        sb.Append(comma2 + c.AFlipRGB.ToString() + ",");
                        sb.Append(positions[i].ToString("0.##"));
                        comma2 = ",";
                    }
                    sb.Append("]]");
                    comma = ",\n";
                }
            }
            sb.Append("\n],\n");

            sb.Append("\"images\":[\n");
            comma = "";
            foreach (DrawImage image in drawImages)
            {
                sb.Append(comma);
                image.ToJson(sb);
                comma = ",\n";
            }
            sb.Append("\n],\n");


            sb.Append("\"symbols\":[\n");
            comma = "";
            foreach (DrawSymbol symbol in drawSymbols)
            {
                sb.Append(comma);
                symbol.ToJson(sb);
                comma = ",\n";
            }
            sb.Append("\n],\n");

            sb.Append("\"timelines\":[\n");
            comma = "";
            foreach (DrawTimeline tl in drawTimelines)
            {
                sb.Append(comma);
                tl.ToJson(sb);
                comma = ",\n";
            }
            sb.Append("\n]\n");


            sb.Append("\n}\n");
        }