Exemple #1
0
        public void SetCircle3Points(Point[] p)
        {
            PointDbl[] dblArray = new PointDbl[3];
            PointDbl   dbl3     = new PointDbl(p[0]);

            dblArray[0] = dbl3;
            PointDbl dbl2 = new PointDbl(p[1]);

            dblArray[1] = dbl2;
            PointDbl dbl = new PointDbl(p[2]);

            dblArray[2] = dbl;
            CircleInfo info = CGM2SVGMath.FindCircleBy3Points(dblArray);

            if (info.R >= 0.0)
            {
                this.center.X = new decimal(info.Center.X);
                this.center.Y = new decimal(info.Center.Y);
                this.SetCircleDiameters(info.R, Math2.CompareAngles(Convert.ToDouble(decimal.Subtract(p[2].X, p[0].X)), Convert.ToDouble(decimal.Subtract(p[2].Y, p[0].Y)), Convert.ToDouble(decimal.Subtract(p[1].X, p[0].X)), Convert.ToDouble(decimal.Subtract(p[1].Y, p[0].Y))) < 0.0);
                this.v1.X = decimal.Subtract(p[0].X, this.center.X);
                this.v1.Y = decimal.Subtract(p[0].Y, this.center.Y);
                this.v2.X = decimal.Subtract(p[2].X, this.center.X);
                this.v2.Y = decimal.Subtract(p[2].Y, this.center.Y);
            }
            else
            {
                this.collinearCoords = true;
                this.center          = p[1];
                this.SetCircleDiameters(Math2.Distance(Convert.ToDouble(decimal.Subtract(p[0].X, this.center.X)), Convert.ToDouble(decimal.Subtract(p[2].X, this.center.X))), false);
                this.v1.X = decimal.Subtract(p[0].X, this.center.X);
                this.v1.Y = decimal.Subtract(p[0].Y, this.center.Y);
                this.v2.X = decimal.Subtract(p[2].X, this.center.X);
                this.v2.Y = decimal.Subtract(p[2].Y, this.center.Y);
            }
        }
Exemple #2
0
        public void UpdateSVG(XmlTextWriter doc, SVGContext context)
        {
            this.center = context.fxy(this.center);
            this.cd1    = context.fxy(this.cd1);
            this.cd2    = context.fxy(this.cd2);
            double  introduced4 = Convert.ToDouble(decimal.Subtract(this.cd1.X, this.center.X));
            double  num2        = Math2.Distance(introduced4, Convert.ToDouble(decimal.Subtract(this.cd1.Y, this.center.Y)));
            double  introduced5 = Convert.ToDouble(decimal.Subtract(this.cd2.X, this.center.X));
            double  num3        = Math2.Distance(introduced5, Convert.ToDouble(decimal.Subtract(this.cd2.Y, this.center.Y)));
            decimal introduced6 = decimal.Subtract(this.cd1.Y, this.center.Y);
            double  num         = Math.Atan(Convert.ToDouble(decimal.Divide(introduced6, decimal.Subtract(this.cd1.X, this.center.X)))) * 57.295779513082323;

            doc.WriteStartElement("ellipse");
            doc.WriteAttributeString("cx", this.center.X.ToString());
            doc.WriteAttributeString("cy", this.center.Y.ToString());
            doc.WriteAttributeString("rx", num2.ToString());
            doc.WriteAttributeString("ry", num3.ToString());
            doc.WriteAttributeString("transform", "rotate(" + num.ToString() + " " + this.center.X.ToString() + " " + this.center.Y.ToString() + ")");
            context.PrintEdge(doc);
            doc.WriteAttributeString("fill", context.fill);
            if (context.isClip & !String.IsNullOrEmpty(context.CurrClipID))//if (context.isClip & (StringType.StrCmp(context.CurrClipID, "", false) != 0))
            {
                doc.WriteAttributeString("clip-path", "url(#" + context.CurrClipID + ")");
            }
            doc.WriteFullEndElement();
        }
Exemple #3
0
        public void updatesvg(XmlTextWriter doc)
        {
            Bitmap bitmap = new Bitmap(this.nx, this.ny, PixelFormat.Format24bppRgb);
            int    num4   = this.nx - 1;

            for (int i = 0; i <= num4; i++)
            {
                int num3 = this.ny - 1;
                for (int j = 0; j <= num3; j++)
                {
                    bitmap.SetPixel((this.nx - 1) - i, j, this.cellarray[i, j]);
                }
            }
            MemoryStream stream = new MemoryStream();

            PNGMaker.Convert((Image)bitmap, (Stream)stream);
            stream.Close();
            doc.WriteStartElement("image");
            doc.WriteAttributeString("x", (this.mycontext.fx(Convert.ToDouble(decimal.Compare(this.p.X, this.r.X) < 0 ? this.p.X : this.r.X))).ToString());
            doc.WriteAttributeString("y", (this.mycontext.fy(Convert.ToDouble(decimal.Compare(this.p.Y, this.q.Y) > 0 ? this.p.Y : this.q.Y))).ToString());
            double introduced6 = Convert.ToDouble(this.p.X);
            double introduced7 = Convert.ToDouble(this.r.X);

            doc.WriteAttributeString("width", (this.mycontext.fscale(Math2.Distance(introduced6, Convert.ToDouble(this.p.Y), introduced7, Convert.ToDouble(this.r.Y)))).ToString());
            double introduced8 = Convert.ToDouble(this.r.X);
            double introduced9 = Convert.ToDouble(this.q.X);

            doc.WriteAttributeString("height", (this.mycontext.fscale(Math2.Distance(introduced8, Convert.ToDouble(this.r.Y), introduced9, Convert.ToDouble(this.q.Y)))).ToString());
            doc.WriteAttributeString("href", "http://www.w3.org/1999/xlink", "data:;base64," + Convert.ToBase64String(stream.ToArray()));
            if (this.mycontext.isClip & !String.IsNullOrEmpty(mycontext.CurrClipID)) //if (this.mycontext.isClip & (StringType.StrCmp(this.mycontext.CurrClipID, "", false) != 0))
            {
                doc.WriteAttributeString("clip-path", "url(#" + this.mycontext.CurrClipID + ")");
            }
            doc.WriteEndElement();
        }
        public static double[,] FindEllipseTransformToHorizontal(PointDbl p, PointDbl p1, PointDbl p2)
        {
            double num  = Math2.Distance(p1.X - p.X, p1.Y - p.Y);
            double num2 = Math2.Distance(p2.X - p.X, p2.Y - p.Y);

            return(new double[, ] {
                { ((p2.X - p.X) / num2), ((p1.X - p.X) / num), p.X }, { ((p2.Y - p.Y) / num2), ((p1.Y - p.Y) / num), p.Y }, { 0.0, 0.0, 1.0 }
            });
        }
        // Methods
        public static CircleInfo FindCircleBy3Points(PointDbl[] p)
        {
            CircleInfo info = new CircleInfo();//TODO

            if (Math2.IsNul(Math2.CompareAngles(p[0].X - p[1].X, p[0].Y - p[1].Y, p[2].X - p[1].X, p[2].Y - p[1].Y)))
            {
                info.R = -1.0;
                return(info);
            }
            double[] numArray = Math2.SolveSystem2(new double[, ] {
                { 2.0 * (p[0].X - p[2].X), 2.0 * (p[0].Y - p[2].Y) }, { 2.0 * (p[1].X - p[2].X), 2.0 * (p[1].Y - p[2].Y) }
            }, new double[] { (((p[0].X * p[0].X) - (p[2].X * p[2].X)) + (p[0].Y * p[0].Y)) - (p[2].Y * p[2].Y), (((p[1].X * p[1].X) - (p[2].X * p[2].X)) + (p[1].Y * p[1].Y)) - (p[2].Y * p[2].Y) });
            info.Center.X = numArray[0];
            info.Center.Y = numArray[1];
            info.R        = Math2.Distance(p[0].X - numArray[0], p[0].Y - numArray[1]);
            return(info);
        }
Exemple #6
0
        // Methods
        public string GetPath(SVGContext context)
        {
            this.center = context.fxy(this.center);
            this.cd1    = context.fxy(this.cd1);
            this.cd2    = context.fxy(this.cd2);
            double  introduced6 = Convert.ToDouble(decimal.Subtract(this.cd1.X, this.center.X));
            double  num2        = Math2.Distance(introduced6, Convert.ToDouble(decimal.Subtract(this.cd1.Y, this.center.Y)));
            double  introduced7 = Convert.ToDouble(decimal.Subtract(this.cd2.X, this.center.X));
            double  num3        = Math2.Distance(introduced7, Convert.ToDouble(decimal.Subtract(this.cd2.Y, this.center.Y)));
            decimal introduced8 = decimal.Subtract(this.cd1.Y, this.center.Y);
            double  num         = Math.Atan(Convert.ToDouble(decimal.Divide(introduced8, decimal.Subtract(this.cd1.X, this.center.X)))) * 57.295779513082323;
            string  str         = " M" + (Convert.ToDouble(this.center.X) - num2).ToString() + "," + this.center.Y.ToString();

            str = ((str + " A" + num2.ToString() + "," + num3.ToString()) + " 0 0 1 ") + (Convert.ToDouble(this.center.X) + num2).ToString() + "," + this.center.Y.ToString();
            str = str + " M" + (Convert.ToDouble(this.center.X) + num2).ToString() + "," + this.center.Y.ToString();
            str = (((str + " A" + num2.ToString() + "," + num3.ToString()) + " 0 0 1 ") + (Convert.ToDouble(this.center.X) - num2).ToString() + "," + this.center.Y.ToString()) + "Z";
            context.newregion = true;
            return(str);
        }
        public static SVGEllipseArc FindSVGArc(PointDbl p, PointDbl p1, PointDbl p2, PointDbl Δstart, PointDbl Δend)
        {
            SVGEllipseArc arc2 = new SVGEllipseArc();

            arc2.RadiusX        = Math2.Distance(p.X, p.Y, p2.X, p2.Y);
            arc2.RadiusY        = Math2.Distance(p.X, p.Y, p1.X, p1.Y);
            double[,] a         = FindEllipseTransformToHorizontal(p, p1, p2);
            double[,] numArray2 = SpecialInvertMatrix(a);
            PointDbl dbl3         = new PointDbl(Δstart.X + p.X, Δstart.Y + p.Y);
            PointDbl dbl2         = TransformPoint(numArray2, dbl3);
            double   introduced10 = Math2.Sqr(dbl2.X / arc2.RadiusX);
            double   num          = Math.Sqrt(introduced10 + Math2.Sqr(dbl2.Y / arc2.RadiusY));

            dbl2.X /= num;
            dbl2.Y /= num;
            dbl3    = new PointDbl(Δend.X + p.X, Δend.Y + p.Y);
            PointDbl dbl          = TransformPoint(numArray2, dbl3);
            double   introduced11 = Math2.Sqr(dbl.X / arc2.RadiusX);
            double   num2         = Math.Sqrt(introduced11 + Math2.Sqr(dbl.Y / arc2.RadiusY));

            dbl.X /= num2;
            dbl.Y /= num2;
            if (Math2.Is90DegIntersection(p1.X - p.X, p1.Y - p.Y, p2.X - p.X, p2.Y - p.Y))
            {
                arc2.AngleX    = Math.Atan2(a[1, 0], a[0, 0]);
                arc2.StartP    = TransformPoint(a, dbl2);
                arc2.EndP      = TransformPoint(a, dbl);
                arc2.CenterP   = p;
                arc2.SweepFlag = Math2.CompareAngles(p1.X - p.X, p1.Y - p.Y, p2.X - p.X, p2.Y - p.Y) < 0.0;
                arc2.LargeArc  = Math2.CompareAngles(dbl2.X, dbl2.Y, dbl.X, dbl.Y) < 0.0;
                return(arc2);
            }
            arc2.Transform = a;
            arc2.AngleX    = 0.0;
            arc2.StartP    = dbl2;
            arc2.EndP      = dbl;
            dbl3           = new PointDbl(0.0, 0.0);
            arc2.CenterP   = dbl3;
            arc2.SweepFlag = false;
            arc2.LargeArc  = Math2.CompareAngles(dbl2.X, dbl2.Y, dbl.X, dbl.Y) < 0.0;
            return(arc2);
        }