Beispiel #1
0
        public static ISvgBrush Parsing(string text, SvgDocument doc)
        {
            while (text.Trim().EndsWith(";"))
            {
                text = text.Substring(0, text.Length - 1);
            }
            if (text.Trim().StartsWith("url"))
            {
                int     num1  = text.Trim().IndexOf("#", 0, text.Trim().Length);
                int     num2  = text.Trim().IndexOf(")", 0, text.Trim().Length);
                string  text1 = text.Trim().Substring(num1 + 1, (num2 - num1) - 1);
                XmlNode node1 = NodeFunc.GetRefNode(text1, doc);
                if (node1 != null)
                {
                    if (node1.NodeType != XmlNodeType.Element)
                    {
                        return(null);
                    }
                    XmlElement element1 = (XmlElement)node1;
                    if (element1 != null)
                    {
                        return((ISvgBrush)element1);
                    }
                }
                return(null);
            }

            return(new SolidColor(ColorFunc.ParseColor(text)));
        }
Beispiel #2
0
        public static ISvgBrush Parsing(string text, SvgDocument doc, IGraphPath path)
        {
            while (text.Trim().EndsWith(";"))
            {
                text = text.Substring(0, text.Length - 1);
            }
            if (text.Trim().StartsWith("url"))
            {
                int     num1  = text.Trim().IndexOf("#", 0, text.Trim().Length);
                int     num2  = text.Trim().IndexOf(")", 0, text.Trim().Length);
                string  text1 = text.Trim().Substring(num1 + 1, (num2 - num1) - 1);
                XmlNode node1 = NodeFunc.GetRefNode(text1, doc);
                if (node1 != null)
                {
                    if (node1.NodeType != XmlNodeType.Element)
                    {
                        return(null);
                    }
                    XmlElement element1 = (XmlElement)node1;
                    if (element1 != null)
                    {
                        return((ISvgBrush)element1);
                    }
                }
                return(null);
            }
            string text7 = "none";           // AttributeFunc.ParseAttribute("hatch-style",(SvgElement) path,false).ToString();

            if (((SvgElement)path).SvgAttributes.ContainsKey("hatch-style"))
            {
                text7 = ((SvgElement)path).SvgAttributes["hatch-style"].ToString();
            }
            if ((text7 != "") && (text7.ToLower() != "none") && (text != "none"))
            {
                Color color1 = ColorFunc.ParseColor(text);
                Color color2 = ColorFunc.ParseColor(AttributeFunc.ParseAttribute("hatch-color", (SvgElement)path, false).ToString());

                Struct.Pattern pattern = new ItopVector.Struct.Pattern(color1, (ItopVector.PatternType)Enum.Parse(typeof(ItopVector.PatternType), text7, false), color2);

                return(new RatHatchBrush(pattern));
            }

            return(new SolidColor(ColorFunc.ParseColor(text)));
        }
Beispiel #3
0
        public static string[] Linear(string startvalue, float starttime, string endvalue, float endtime, DomType domtype, int time)
        {
            int num2;
            int num5;

            char[] chArray1 = new char[2] {
                ' ', ','
            };
            string[] textArray1 = startvalue.Split(chArray1);
            char[]   chArray2   = new char[2] {
                ' ', ','
            };
            string[] textArray2 = endvalue.Split(chArray2);
            string[] textArray3 = new string[Math.Min(textArray1.Length, textArray2.Length)];
            switch (domtype)
            {
            case DomType.SvgMatrix:
            case DomType.SvgNumber:
            {
                num2 = 0;
                goto Label_0217;
            }

            case DomType.SvgString:
            {
                goto Label_0762;
            }

            case DomType.SvgColor:
            {
                if ((!startvalue.Trim().StartsWith("url") && !endvalue.Trim().StartsWith("url")) && ((endvalue != "none") && (startvalue != "none")))
                {
                    Color    color1      = ColorFunc.ParseColor(startvalue.Trim());
                    Color    color2      = ColorFunc.ParseColor(endvalue.Trim());
                    float    single5     = (float)Math.Round((double)AnimFunc.Linear((float)color1.R, starttime, (float)color2.R, endtime, (float)time), 2);
                    float    single6     = (float)Math.Round((double)AnimFunc.Linear((float)color1.G, starttime, (float)color2.G, endtime, (float)time), 2);
                    float    single7     = (float)Math.Round((double)AnimFunc.Linear((float)color1.B, starttime, (float)color2.B, endtime, (float)time), 2);
                    string[] textArray11 = new string[1];
                    string[] textArray12 = new string[7] {
                        "rgb(", single5.ToString(), ",", single6.ToString(), ",", single7.ToString(), ")"
                    };
                    textArray11[0] = string.Concat(textArray12);
                    return(textArray11);
                }
                if (time < ((starttime / 2f) + (endtime / 2f)))
                {
                    return(new string[1] {
                            startvalue
                        });
                }
                return(new string[1] {
                        endvalue
                    });
            }

            case DomType.SvgPath:
            {
                PointInfoCollection collection1 = new PointInfoCollection();
                PointInfoCollection collection2 = new PointInfoCollection();
                GraphicsPath        path1       = PathFunc.PathDataParse(startvalue, collection1);
                GraphicsPath        path2       = PathFunc.PathDataParse(endvalue, collection2);
                if (collection1.Count == collection2.Count)
                {
                    string text4 = string.Empty;
                    for (int num3 = 0; num3 < collection1.Count; num3++)
                    {
                        PointInfo info1 = collection1[num3];
                        PointInfo info2 = collection2[num3];
                        if (((info1.Command.Trim().ToLower() != info2.Command.Trim().ToLower()) || (info1.IsStart != info2.IsStart)) || (info1.IsEnd != info2.IsEnd))
                        {
                            if ((time > ((starttime + endtime) / 2f)) && (time <= endtime))
                            {
                                return(new string[1] {
                                        endvalue
                                    });
                            }
                            if ((time <= ((starttime + endtime) / 2f)) && (time >= starttime))
                            {
                                return(new string[1] {
                                        startvalue
                                    });
                            }
                            return(new string[1] {
                                    string.Empty
                                });
                        }
                        text4 = text4 + info1.Command.Trim().ToUpper();
                        string text5 = info1.Command.Trim().ToUpper();
                        if (((text5 == "C") || (text5 == "Q")) || (((text5 == "A") || (text5 == "T")) || (text5 == "S")))
                        {
                            float    single8     = AnimFunc.Linear(info1.FirstControl.X, starttime, info2.FirstControl.X, endtime, (float)time);
                            float    single9     = AnimFunc.Linear(info1.FirstControl.Y, starttime, info2.FirstControl.Y, endtime, (float)time);
                            string   text8       = text4;
                            string[] textArray19 = new string[5] {
                                text8, single8.ToString(), " ", single9.ToString(), " "
                            };
                            text4   = string.Concat(textArray19);
                            single8 = AnimFunc.Linear(info1.SecondControl.X, starttime, info2.SecondControl.X, endtime, (float)time);
                            single9 = AnimFunc.Linear(info1.SecondControl.Y, starttime, info2.SecondControl.Y, endtime, (float)time);
                            string   text9       = text4;
                            string[] textArray20 = new string[5] {
                                text9, single8.ToString(), " ", single9.ToString(), " "
                            };
                            text4 = string.Concat(textArray20);
                        }
                        float    single10    = AnimFunc.Linear(info1.MiddlePoint.X, starttime, info2.MiddlePoint.X, endtime, (float)time);
                        float    single11    = AnimFunc.Linear(info1.MiddlePoint.Y, starttime, info2.MiddlePoint.Y, endtime, (float)time);
                        string   text10      = text4;
                        string[] textArray21 = new string[5] {
                            text10, single10.ToString(), " ", single11.ToString(), " "
                        };
                        text4 = string.Concat(textArray21);
                        if (info1.IsEnd)
                        {
                            text4 = text4 + "Z";
                        }
                    }
                    return(new string[1] {
                            text4
                        });
                }
                if ((time > ((starttime + endtime) / 2f)) && (time <= endtime))
                {
                    return(new string[1] {
                            endvalue
                        });
                }
                if ((time <= ((starttime + endtime) / 2f)) && (time >= starttime))
                {
                    return(new string[1] {
                            startvalue
                        });
                }
                return(new string[1] {
                        string.Empty
                    });
            }

            case DomType.SvgPoints:
            {
                PointF[] tfArray1 = PointsFunc.PointsParse(startvalue);
                PointF[] tfArray2 = PointsFunc.PointsParse(endvalue);
                if (tfArray1.Length == tfArray2.Length)
                {
                    string text1 = string.Empty;
                    for (int num1 = 0; num1 < tfArray1.Length; num1++)
                    {
                        PointF tf1     = tfArray1[num1];
                        PointF tf2     = tfArray2[num1];
                        float  single1 = AnimFunc.Linear(tf1.X, starttime, tf2.X, endtime, (float)time);
                        float  single2 = AnimFunc.Linear(tf1.Y, starttime, tf2.Y, endtime, (float)time);
                        text1 = text1 + single1.ToString() + " " + single2.ToString();
                        if (num1 < (tfArray1.Length - 1))
                        {
                            text1 = text1 + ",";
                        }
                    }
                    return(new string[1] {
                            text1
                        });
                }
                if ((time > ((starttime + endtime) / 2f)) && (time <= endtime))
                {
                    return(new string[1] {
                            endvalue
                        });
                }
                if ((time <= ((starttime + endtime) / 2f)) && (time >= starttime))
                {
                    return(new string[1] {
                            startvalue
                        });
                }
                return(new string[1] {
                        string.Empty
                    });
            }

            default:
            {
                goto Label_0762;
            }
            }
Label_0217:
            if (num2 >= textArray3.Length)
            {
                return(textArray3);
            }
            string text2   = textArray1[num2];
            string text3   = textArray2[num2];
            float  single3 = 0f;
            float  single4 = 0f;

            try
            {
                single3 = ItopVector.Core.Func.Number.ParseFloatStr(text2);
                single4 = ItopVector.Core.Func.Number.ParseFloatStr(text3);
                double num6 = Math.Round((double)AnimFunc.Linear(single3, starttime, single4, endtime, (float)time), 2);
                textArray3[num2] = num6.ToString();
            }
            catch (Exception)
            {
            }
            num2++;
            goto Label_0217;
Label_0762:
            num5 = 0;
            while (num5 < textArray3.Length)
            {
                string text6 = textArray1[num5];
                string text7 = textArray2[num5];
                if (time >= ((endtime / 2f) + (starttime / 2f)))
                {
                    textArray3[num5] = text7;
                }
                else if (time >= starttime)
                {
                    textArray3[num5] = text6;
                }
                else
                {
                    textArray3[num5] = string.Empty;
                }
                num5++;
            }
            return(textArray3);
        }
Beispiel #4
0
        public static object GetAnimateValue(SvgElement element, string attributename, DomType domtype, object orivalue)
        {
            PointF[]     tfArray6;
            PointF[]     tfArray7;
            PointF[]     tfArray8;
            int          num8;
            Matrix       matrix1 = new Matrix();
            string       text1   = string.Empty;
            GraphicsPath path1   = null;
            string       text2   = string.Empty;

            PointF[] tfArray1 = null;
            bool     flag1    = true;

            if (element.AnimateNameValues.ContainsKey(attributename))
            {
                AnimateInfo info1      = (AnimateInfo)element.AnimateNameValues[attributename];
                object[]    objArray1  = info1.AnimateValues;
                bool[]      flagArray1 = info1.ValueAdds;
                int         num1       = 0;
                if ((domtype == DomType.SvgString) || (domtype == DomType.SvgLink))
                {
                    for (int num2 = objArray1.Length - 1; num2 >= 0; num2--)
                    {
                        if ((objArray1[num2] is string) && (objArray1[num2].ToString() != string.Empty))
                        {
                            if (element is ItopVector.Core.Figure.Image)
                            {
                                ((ItopVector.Core.Figure.Image)element).RefImage = ImageFunc.GetImageForURL(objArray1[num2].ToString(), element);
                            }
                            return(objArray1[num2].ToString());
                        }
                    }
                    return(orivalue);
                }
                object[] objArray2 = objArray1;
                for (int num10 = 0; num10 < objArray2.Length; num10++)
                {
                    PointF[]     tfArray2;
                    float        single3;
                    GraphicsPath path2;
                    PointF[]     tfArray3;
                    PointF[]     tfArray4;
                    PointF[]     tfArray5;
                    object       obj1  = objArray2[num10];
                    bool         flag2 = flagArray1[num1];
                    switch (domtype)
                    {
                    case DomType.SvgMatrix:
                    {
                        Matrix matrix2 = new Matrix();
                        if ((obj1 != null) && (obj1.ToString() != string.Empty))
                        {
                            matrix2 = ((Matrix)obj1).Clone();
                        }
                        if (flag2)
                        {
                            matrix1.Multiply(matrix2);
                            goto Label_046F;
                        }
                        matrix1 = matrix2;
                        goto Label_046F;
                    }

                    case DomType.SvgNumber:
                    {
                        single3 = 0f;
                        if ((obj1 != null) && (obj1.ToString() != string.Empty))
                        {
                            single3 = (float)obj1;
                            if (!flag2 || (text1 == string.Empty))
                            {
                                goto Label_0246;
                            }
                            float single9 = float.Parse(text1) + single3;
                            text1 = single9.ToString();
                        }
                        goto Label_046F;
                    }

                    case DomType.SvgString:
                    {
                        goto Label_046F;
                    }

                    case DomType.SvgColor:
                    {
                        string text3 = string.Empty;
                        if ((obj1 != null) && (obj1.ToString() != string.Empty))
                        {
                            text3 = (string)obj1;
                        }
                        if (text3 != string.Empty)
                        {
                            if ((flag2 && (text2 != string.Empty)) && (!text2.Trim().StartsWith("url") && !text3.Trim().StartsWith("url")))
                            {
                                Color    color1     = ColorFunc.ParseColor(text3);
                                Color    color2     = ColorFunc.ParseColor(text2);
                                int      num4       = (color1.R + color2.R) / 2;
                                int      num5       = (color1.G + color2.G) / 2;
                                int      num6       = (color1.B + color2.B) / 2;
                                string[] textArray1 = new string[7] {
                                    "rgb(", num4.ToString(), ",", num5.ToString(), ",", num6.ToString(), ")"
                                };
                                text2 = string.Concat(textArray1);
                                goto Label_046F;
                            }
                            text2 = text3;
                        }
                        goto Label_046F;
                    }

                    case DomType.SvgPath:
                    {
                        if ((obj1 != null) && (obj1.ToString() != string.Empty))
                        {
                            path2 = (GraphicsPath)obj1;
                            if (!flag2 || (path1 == null))
                            {
                                goto Label_0460;
                            }
                            tfArray3 = path2.PathPoints;
                            tfArray4 = path1.PathPoints;
                            if (tfArray3.Length == tfArray4.Length)
                            {
                                goto Label_03B5;
                            }
                        }
                        goto Label_046F;
                    }

                    case DomType.SvgPoints:
                    {
                        tfArray2 = new PointF[0];
                        if (obj1 is PointF[])
                        {
                            tfArray2 = (PointF[])obj1;
                        }
                        if (!flag2)
                        {
                            break;
                        }
                        if (tfArray1.Length == tfArray2.Length)
                        {
                            for (int num3 = 0; num3 < tfArray2.Length; num3++)
                            {
                                PointF tf1     = tfArray1[num3];
                                PointF tf2     = tfArray2[num3];
                                float  single1 = (tf1.X + tf2.X) / 2f;
                                float  single2 = (tf1.Y + tf2.Y) / 2f;
                                tfArray1[num3] = new PointF(single1, single2);
                            }
                        }
                        goto Label_046F;
                    }

                    default:
                    {
                        goto Label_046F;
                    }
                    }
                    tfArray1 = (PointF[])tfArray2.Clone();
                    goto Label_046F;
Label_0246:
                    text1 = single3.ToString();
                    goto Label_046F;
Label_03B5:
                    tfArray5 = new PointF[tfArray4.Length];
                    Array.Copy(tfArray3, tfArray1, tfArray5.Length);
                    byte[] buffer1 = path2.PathTypes;
                    byte[] buffer2 = path1.PathTypes;
                    for (int num7 = 0; num7 < Math.Min(tfArray3.Length, tfArray4.Length); num7++)
                    {
                        PointF tf3     = tfArray3[num7];
                        PointF tf4     = tfArray4[num7];
                        float  single4 = tf3.X + tf4.X;
                        float  single5 = tf3.Y + tf4.Y;
                        tfArray5[num7] = new PointF(single4, single5);
                    }
                    path1 = new GraphicsPath(tfArray5, path2.PathTypes);
                    goto Label_046D;
Label_0460:
                    path1 = (GraphicsPath)path2.Clone();
                    Label_046D :;
                    Label_046F :;
                }
                if (flagArray1.Length > 0)
                {
                    flag1 = flagArray1[flagArray1.Length - 1];
                }
            }
            switch (domtype)
            {
            case DomType.SvgMatrix:
            {
                Matrix matrix3 = new Matrix();
                if (orivalue != null)
                {
                    matrix3 = ((Matrix)orivalue).Clone();
                }
                if (flag1)
                {
                    matrix3.Multiply(matrix1);
                }
                else
                {
                    matrix3 = matrix1.Clone();
                }
                return(matrix3.Clone());
            }

            case DomType.SvgNumber:
            {
                if ((flag1 && (orivalue != null)) && (orivalue.ToString() != string.Empty))
                {
                    float single6 = (float)orivalue;
                    if (text1 == string.Empty)
                    {
                        text1 = single6.ToString();
                        break;
                    }
                    float single10 = float.Parse(text1) + single6;
                    text1 = single10.ToString();
                }
                break;
            }

            case DomType.SvgString:
            {
                return(orivalue);
            }

            case DomType.SvgColor:
            {
                if (text2 == string.Empty)
                {
                    return(orivalue);
                }
                if ((flag1 && (orivalue != null)) && (!text2.Trim().StartsWith("url") && !((string)orivalue).Trim().StartsWith("url")))
                {
                    Color    color3     = ColorFunc.ParseColor((string)orivalue);
                    Color    color4     = ColorFunc.ParseColor(text2);
                    string[] textArray2 = new string[7];
                    textArray2[0] = "rgb(";
                    int num11 = (color3.R + color4.R) / 2;
                    textArray2[1] = num11.ToString();
                    textArray2[2] = ",";
                    int num12 = (color3.G + color4.G) / 2;
                    textArray2[3] = num12.ToString();
                    textArray2[4] = ",";
                    int num13 = (color3.B + color4.B) / 2;
                    textArray2[5] = num13.ToString();
                    textArray2[6] = ")";
                    text2         = string.Concat(textArray2);
                }
                return(text2);
            }

            case DomType.SvgPath:
            {
                if (path1 == null)
                {
                    return(orivalue);
                }
                if (!flag1 || (orivalue == null))
                {
                    return(path1);
                }
                tfArray6 = ((GraphicsPath)orivalue).PathPoints;
                tfArray7 = path1.PathPoints;
                tfArray8 = new PointF[tfArray6.Length];
                Array.Copy(tfArray6, tfArray1, tfArray8.Length);
                num8 = 0;
                goto Label_0738;
            }

            case DomType.SvgPoints:
            {
                if (tfArray1.Length > 0)
                {
                    PointF[] tfArray9 = new PointF[0];
                    if (!(orivalue is PointF[]) || !flag1)
                    {
                        return(tfArray1);
                    }
                    tfArray9 = (PointF[])orivalue;
                    if (tfArray9.Length != tfArray1.Length)
                    {
                        return(tfArray1);
                    }
                    for (int num9 = 0; num9 < tfArray1.Length; num9++)
                    {
                        tfArray1[num9] = new PointF((tfArray1[num9].X + tfArray9[num9].X) / 2f, (tfArray1[num9].Y + tfArray9[num9].Y) / 2f);
                    }
                }
                return(tfArray1);
            }

            default:
            {
                return(string.Empty);
            }
            }
            if (text1 != string.Empty)
            {
                return(float.Parse(text1));
            }
            if ((orivalue.ToString() == string.Empty) || (orivalue == null))
            {
                return((float)AttributeFunc.GetDefaultValue(element, attributename));
            }
            return((float)orivalue);

Label_0738:
            if (num8 >= Math.Min(tfArray6.Length, tfArray7.Length))
            {
                return(new GraphicsPath(tfArray8, path1.PathTypes));
            }
            PointF tf5     = tfArray6[num8];
            PointF tf6     = tfArray7[num8];
            float  single7 = tf5.X + tf6.X;
            float  single8 = tf5.Y + tf6.Y;

            tfArray8[num8] = new PointF(single7, single8);
            num8++;
            goto Label_0738;
        }