示例#1
0
        internal void Parse(CADEntityCollection cad,double pHeight,double pWidth,double setX,double setY,string layer)
        {
            layerID = layer;
            pageHeight=pHeight;
            pageWidth=pWidth;

            offsetX = setX;
            offsetY = setY;

            if(svg==null)
            {
                svg=SvgDocumentFactory.CreateDocument(new SizeF(800,600));
            }
            //svg.AcceptChanges=true;
            int totalNum;
            totalNum = cad.Count;
            svg.AcceptChanges=false;
            for(int i=0;i<cad.Count;i++)
            {
                flashwindow.RefleshStatus(string.Format("������������ģ��{0}%...{1}",(int)(i*100/totalNum),paperspace));

                if(cad[i].Layer==null)continue;
                string layerid = getLayer(cad[i]);
                if (layerid=="")continue;

                string svgType=string.Empty;
                switch(cad[i].GetType().Name)
                {
                    case "CADArc":
                    {
                        CADArc cadEntity = cad[i] as CADArc;
                        double d1 = cadEntity.Radius;
                        DPoint dPoint = cadEntity.Point;
                        dPoint.X -= d1;
                        dPoint.Y += d1;
                        double d3 = cadEntity.StartAngle;
                        double d4 = cadEntity.EndAngle;
                        if (cadEntity.EndAngle < cadEntity.StartAngle)
                        {
                            d4 = Conversion_Angle((float)d4);
                        }

                        if(d4>d3)
                        {
                            double ag=d4-d3;
                            if(d3>180 || d4>180)
                            {
                                d4=360-d4;
                            }
                            grPath.AddArc(OffSetX(dPoint.X), OffSetY(dPoint.Y), (float)d1 * 2.0F, (float)d1 * 2.0F, (float)d4, (float)ag);

                        }
                        else
                        {
                            double eg=360-d4;
                            d4+=360;
                            double ag=d4-d3;
                            grPath.AddArc(OffSetX(dPoint.X), OffSetY(dPoint.Y), (float)d1 * 2.0F, (float)d1 * 2.0F, (float)eg, (float)ag);
                        }
                        string c_path=PathFunc.GetPathString(grPath);
                        color=ColorFunc.GetColorString(getColor(cadEntity));
                        GraphPath p1=(GraphPath)svg.CreateElement("","path","");
                        p1.SetAttribute("id",CreateId("path"));
                        p1.SetAttribute("d",c_path);
            //						p1.SetAttribute("fill","none");
                        p1.SetAttribute("stroke",color);
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);
                        grPath.Reset();
                        break;
                    }
                    case "CADCircle":
                    {
                        double y=((CADCircle)(cad[i])).Point.Y;
                        svgType="circle";
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        Circle c1=(Circle)svg.CreateElement("",svgType,"");
                        c1.SetAttribute("id",CreateId(svgType));
                        c1.SetAttribute("cx", OffSetX(((CADCircle)(cad[i])).Point.X).ToString("00.00"));
                        c1.SetAttribute("cy", OffSetY(y).ToString("00.00"));
                        c1.SetAttribute("r",((CADCircle)(cad[i])).Radius.ToString("00.00"));
            //						c1.SetAttribute("fill","none");
            //						c1.SetAttribute("fill-opacity","1");
                        c1.SetAttribute("stroke",color);
            //						c1.SetAttribute("stroke-opacity","1");
                        c1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(c1.OuterXml);
                        //svg.RootElement.AppendChild(c1);
                        break;
                    }
                    case "CADEllipse":
                    {
                        double y=((CADEllipse)(cad[i])).Point.Y;
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        svgType="ellipse";
                        Ellips e1=(Ellips)svg.CreateElement("",svgType,"");
                        e1.SetAttribute("id",CreateId(svgType));
                        e1.SetAttribute("cx",OffSetX(((CADEllipse)(cad[i])).Point.X).ToString("00.00"));
                        e1.SetAttribute("cy",OffSetY(y).ToString("00.00"));
                        e1.SetAttribute("rx",((CADEllipse)(cad[i])).A.ToString("00.00"));
                        e1.SetAttribute("ry",((CADEllipse)(cad[i])).B.ToString("00.00"));
            //						e1.SetAttribute("fill","none");
                        //e1.SetAttribute("fill-opacity","1");
                        e1.SetAttribute("stroke",color);
            //						e1.SetAttribute("stroke-opacity","1");
                        e1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(e1.OuterXml);
                        break;
                    }
                    case "CADLine":
                    {
                        double y1=((CADLine)(cad[i])).Point.Y;
                        double y2=((CADLine)(cad[i])).Point1.Y;
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        svgType ="line";
                        Line l1=(Line)svg.CreateElement("","line","");
                        l1.SetAttribute("id",CreateId(svgType));
                        l1.SetAttribute("x1", OffSetX(((CADLine)(cad[i])).Point.X).ToString("00.00"));
                        l1.SetAttribute("y1", OffSetY(y1).ToString("00.00"));
                        l1.SetAttribute("x2", OffSetX(((CADLine)(cad[i])).Point1.X).ToString("00.00"));
                        l1.SetAttribute("y2", OffSetY(y2).ToString("00.00"));
            //						l1.SetAttribute("fill","none");
                        //l1.SetAttribute("fill-opacity","1");
                        l1.SetAttribute("stroke",color);
                        //l1.SetAttribute("stroke-opacity","1");
                        l1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(l1.OuterXml);
                        break;
                    }
                    case "CADLWPolyLine":
                    {
                        string pointsXY="";
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        int k=((CADPolyLine)(cad[i])).PolyPoints.Count;
                        if(((CADPolyLine)(cad[i])).IsMeshMClosed)
                        {
                            pointsXY = pointsXY + " " + OffSetX(((CADPolyLine)(cad[i])).PolyPoints[k - 1].X).ToString("00.00") + " " + OffSetY(((CADPolyLine)(cad[i])).PolyPoints[k - 1].Y ).ToString("00.00");
                        }
                        for(int m=0;m<((CADPolyLine)(cad[i])).PolyPoints.Count;m++)
                        {
                            pointsXY = pointsXY + " " + OffSetX(((CADPolyLine)(cad[i])).PolyPoints[m].X).ToString("00.00") + " " + OffSetY(((CADPolyLine)(cad[i])).PolyPoints[m].Y).ToString("00.00");
                        }
                        svgType = "polyline";
                        Polyline p1=(Polyline)svg.CreateElement("","polyline","");
                        p1.SetAttribute("id",CreateId(svgType));
                        p1.SetAttribute("points",pointsXY);
            //						p1.SetAttribute("fill","none");
                        //p1.SetAttribute("fill-opacity","1");
                        p1.SetAttribute("stroke",color);
                        //p1.SetAttribute("stroke-opacity","1");
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);
                        break;
                    }
                    case "CADPatternPolygon":
                    {
                        CADPolyPolygon graph = cad[i] as CADPolyPolygon;

                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        if(graph.Color==Color.Black)
                        {
                            int nn=0;
                            nn++;

                        }
                        int k=0;
                        ArrayList list=((CADPolyPolygon)(cad[i])).Polylines;
                        for(int n=0;n<list.Count;n++)
                        {
                            for(int m=0;m<((ArrayList)list[n]).Count;m++)
                            {
                                k=k+1;
                            }
                        }
                        PointF [] pt=new PointF[k];
                        int count=0;
                        for(int n=0;n<list.Count;n++)
                        {
                            for(int m=0;m<((ArrayList)list[n]).Count;m++)
                            {
                                pt[count].X = OffSetX(((sgHElem)((ArrayList)list[n])[m]).X);
                                pt[count].Y =OffSetY(((sgHElem)((ArrayList)list[n])[m]).Y);
                                count+=1;
                            }
                        }
                        grPath.AddPolygon(pt);
                        string c_path=PathFunc.GetPathString(grPath);
                        svgType = "path";
                        GraphPath p1=(GraphPath)svg.CreateElement("","path","");
                        p1.SetAttribute("id",CreateId(svgType));
                        p1.SetAttribute("d",c_path);
            //						p1.SetAttribute("fill",color);
                        p1.SetAttribute("stroke","none");
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);
                        grPath.Reset();
                        break;
                    }
                    case "CADPoint":
                    {
                        double y=((CADPoint)(cad[i])).Point.Y;
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        svgType = "circle";
                        Circle c1=(Circle)svg.CreateElement("","circle","");
                        c1.SetAttribute("id",CreateId(svgType));
                        c1.SetAttribute("cx", OffSetX(((CADPoint)(cad[i])).Point.X ).ToString("00.00"));
                        c1.SetAttribute("cy", OffSetY( y).ToString("00.00"));
                        c1.SetAttribute("r","1");
                        c1.SetAttribute("fill","#FFFFFF");
                        //c1.SetAttribute("fill-opacity","1");
                        c1.SetAttribute("stroke",color);
                        //c1.SetAttribute("stroke-opacity","1");
                        c1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(c1.OuterXml);
                        break;
                    }
                    case "CADSpline":
                    {
                        CADSpline cADSpline=(CADSpline)(cad[i]);
                        CADDPointCollection cADDPointCollection = cADSpline.DottedSingPts;
                        CreateIntList(cADDPointCollection, false);
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        DrawPolyPolyLine(intPoints);
                        string c_path=PathFunc.GetPathString(grPath);
                        svgType = "path";
                        GraphPath p1=(GraphPath)svg.CreateElement("","path","");
                        p1.SetAttribute("id",CreateId(svgType));
                        p1.SetAttribute("d",c_path);
            //						p1.SetAttribute("fill","none");
                        p1.SetAttribute("stroke",color);
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);
                        grPath.Reset();
                        break;
                    }

                    case "CADText":
                    {
                        CADText cadObj=(CADText)(cad[i]);
                        if (cadObj.Text.Trim()==string.Empty)continue;
                        float x = OffSetX(cadObj.Point.X);
                        float y= OffSetY( cadObj.Point.Y);
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        svgType ="text";

                        string transform =string.Empty;
                        if(Math.Abs( cadObj.rotation)>0)
                        {
                            float angle =-cadObj.rotation;
                            for(;angle<0;angle+=360){}

                            double height = cadObj.height;
                            Matrix matrix1 =new Matrix();
                            matrix1.RotateAt(angle,new PointF(x,y));
                            ItopVector.Core.Types.Transf transf = new ItopVector.Core.Types.Transf(matrix1);
                            transform = transf.ToString();
                        }

                        Text t1=(Text)svg.CreateElement("","text","");
                        t1.SetAttribute("id",CreateId(svgType));
                        t1.SetAttribute("x", x.ToString("00.00"));
                        t1.SetAttribute("y", y.ToString("00.00"));
                        if(transform!=string.Empty)
                            t1.SetAttribute("transform",transform);
                        t1.SetAttribute("font-family",cadObj.winFont?cadObj.fontName:"Arial");//((CADText)(cad[i])).fontName);
                        t1.SetAttribute("font-size",""+((cadObj.winFont || cadObj.height>5)?cadObj.height:cadObj.height -1));
                        t1.TextString=((CADText)(cad[i])).Text;

                        //t1.SetAttribute("fill","none");
                        //t1.SetAttribute("fill-opacity","1");
                        t1.SetAttribute("stroke",color);
                        //t1.SetAttribute("stroke-opacity","1");
                        t1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(t1.OuterXml);
                        break;
                    }
                    case "CADMText":
                    {
                        try
                        {
                            //if (((CADText)(cad[i])).Text.Trim()==string.Empty)continue;
                            CADMText mText = (CADMText)(cad[i]);
                            if(mText.Block!=null)
                            {
                                DPoint begin = GetPoint(mText.Point);
            #if DEBUG
                                if(mText.Block.Entities.Count>1)
                                {
                                    int nn=0;
                                    nn++;
                                }
            #endif
                                string transform =string.Empty;
                                if(Math.Abs( mText.Angle)>0)
                                {
                                    float angle =-mText.Angle;
                                    for(;angle<0;angle+=360){}

                                    double height = (mText.Block.Entities[0] as CADText).height;
                                    Matrix matrix1 =new Matrix();
                                    matrix1.RotateAt(angle,new PointF((float)begin.X,(float)(begin.Y -height)));
                                    ItopVector.Core.Types.Transf transf = new ItopVector.Core.Types.Transf(matrix1);
                                    transform = transf.ToString();
                                }

                                svgType ="text";
                                foreach(CADText obj in mText.Block.Entities)
                                {
                                    if (obj.Text.Trim()==string.Empty)continue;
                                    double y=obj.point1.Y -obj.height;
                                    color=ColorFunc.GetColorString(getColor(obj));
                                    Text t1=(Text)svg.CreateElement("","text","");
                                    t1.SetAttribute("id",CreateId(svgType));
                                    t1.SetAttribute("x", (begin.X +obj.point1.X).ToString("00.00"));
                                    t1.SetAttribute("y", (begin.Y -y).ToString("00.00"));
            //									t1.SetAttribute("rotation",mText.Angle.ToString());
                                    t1.SetAttribute("font-family",obj.winFont?obj.fontName:"Arial");//((CADText)(cad[i])).fontName);
                                    t1.SetAttribute("font-size",obj.height.ToString());
                                    t1.TextString=obj.Text;
                                    //t1.SetAttribute("fill",color);
                                    //t1.SetAttribute("fill-opacity","1");
                                    t1.SetAttribute("stroke",color);
                                    //t1.SetAttribute("stroke-opacity","1");
                                    t1.SetAttribute("layer",layerid);
                                    if(transform!=string.Empty)
                                        t1.SetAttribute("transform",transform);
                                    stw.Write("\r\n");
                                    stw.Write(t1.OuterXml);

                                }

                                break;
                            }
                            else
                            {
            //								double y=((CADMText)(cad[i])).Point.Y;
            //								color=ColorFunc.GetColorString(getColor(cad[i]));
            //								Text t1=(Text)svg.CreateElement("","text","");
            //								t1.SetAttribute("x", OffSetX(((CADMText)(cad[i])).Point.X).ToString("00.00"));
            //								t1.SetAttribute("y", OffSetY( y ).ToString("00.00"));
            //								t1.SetAttribute("rotation",((CADMText)(cad[i])).Angle.ToString("00.00"));
            //								t1.SetAttribute("font-family","Arial");
            //								t1.SetAttribute("font-size",((CADMText)(cad[i])).Height.ToString());
            //								t1.TextString=((CADMText)(cad[i])).Text.Replace("\\P","\r");
            //								t1.SetAttribute("fill",color);
            //								//t1.SetAttribute("fill-opacity","1");
            //								t1.SetAttribute("stroke","none");
            //								//t1.SetAttribute("stroke-opacity","1");
            //								t1.SetAttribute("layer",layerid);
            //								stw.Write("\r\n");
            //								stw.Write(t1.OuterXml);
                            }

                        }
                        catch{}
                        break;
                    }
                    case "CADSolid":
                    {
                        CADSolid so=((CADSolid)cad[i]);
                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        string points = OffSetX(so.Point.X).ToString() + " " + OffSetY(so.Point.Y ).ToString() + ",";
                        points = points + OffSetX(so.Point1.X).ToString() + " " + OffSetY(so.Point1.Y).ToString() + ",";
                        points = points + OffSetX(so.Point3.X).ToString() + " " + OffSetY(so.Point3.Y).ToString() + ",";
                        points = points + OffSetX(so.Point2.X).ToString() + " " + OffSetY(so.Point2.Y).ToString();

                        svgType = "polygon";
                        Polygon p1 = (Polygon)svg.CreateElement("", "polygon", "");
                        p1.SetAttribute("id",CreateId(svgType));
                        p1.SetAttribute("points",points);
            //						p1.SetAttribute("fill", color);
                        p1.SetAttribute("stroke",color);
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);
                        break;
                    }
                    case "CADInsert":
                    {
                        CADMatrix matr=((CADInsert)cad[i]).Matrix;
                        string strMatr;
                        if(matr.data[0,0]!=1)
                        {
                            strMatr="<g transform=\"matrix("+matr.data[0,0]+","+(-matr.data[0,1])+","+matr.data[1,0]+","+(-matr.data[1,1])+","+OffSetX(matr.data[3,0])+","+OffSetY(matr.data[3,1])+")\" id=\""+CreateId("group")+"\""+" layer=\""+layerid+"\">";
                        }
                        else
                        {
                            strMatr="<g transform=\"matrix("+matr.data[0,0]+","+matr.data[0,1]+","+matr.data[1,0]+","+(-matr.data[1,1])+","+OffSetX(matr.data[3,0])+","+OffSetY(matr.data[3,1])+")\" id=\""+CreateId("group")+"\""+" layer=\""+layerid+"\">";
                        }
                        stw.Write("\r\n"+strMatr);

                        CADBlock block= ((CADInsert)cad[i]).Block;
                        if(block!=null)
                            ParseInsert(block.Entities,pHeight,pWidth);
                        stw.Write("\r\n</g>");
                        break;
                    }
                    case "CADViewPort":
                    {
                        CADViewPort port1 = (CADViewPort)cad[i];
                        DRect rect1 = port1.Rect;
                        DPoint point1 = GetPoint(rect1.TopLeft);
                        DPoint point2 = GetPoint(rect1.BottomRight);
                        DPoint point3 = GetPoint(new DPoint(rect1.right, rect1.top, 0));
                        DPoint point4 = GetPoint(new DPoint(rect1.left, rect1.bottom, 0));

                        color=ColorFunc.GetColorString(getColor(cad[i]));
                        string points = point1.X.ToString() + " " + point1.Y.ToString() + ",";
                        points += point3.X.ToString() + " " + point3.Y.ToString() + ",";
                        points += point2.X.ToString() + " " + point2.Y.ToString() + ",";
                        points += point4.X.ToString() + " " + point4.Y.ToString() + ",";
                        points += point1.X.ToString() + " " + point1.Y.ToString();

                        Polyline p1 = (Polyline)svg.CreateElement("", "polyline", "");
                        p1.SetAttribute("points",points);
            //						p1.SetAttribute("fill", "none");
                        p1.SetAttribute("stroke",color);
                        p1.SetAttribute("layer",layerid);
                        stw.Write("\r\n");
                        stw.Write(p1.OuterXml);

                        break;
                    }
                }
            }
        }
示例#2
0
        private void tmLineConnect_Click(object sender, EventArgs e)
        {
            SvgElementCollection elements= tlVectorControl2.SVGDocument.SelectCollection;
            if (elements.Count == 2) {
                Polyline pl1 = elements[0] as Polyline;
                Polyline pl2 = elements[1] as Polyline;
                if (pl1 != null && pl2 != null && pl1.GetAttribute("IsLead") != "" && pl2.GetAttribute("IsLead") != "") {
                    PointF[] pfs1 = new PointF[2] { pl1.Points[0], pl1.Points[pl1.Points.Length - 1] };
                    PointF[] pfs2 = new PointF[2] { pl2.Points[0], pl2.Points[pl2.Points.Length - 1] };
                    PointF[] pfs3 = (PointF[])pl1.Points.Clone();
                    PointF[] pfs4 = (PointF[])pl2.Points.Clone();
                    pl1.Transform.Matrix.TransformPoints(pfs3);
                    pl2.Transform.Matrix.TransformPoints(pfs4);
                    ArrayList  list = new ArrayList();
                    list.AddRange(pfs3);
                    list.Reverse();
                    PointF[] pfs5 = (PointF[])list.ToArray(typeof(PointF));
                    list.Clear();
                    list.AddRange(pfs4);
                    list.Reverse();
                    PointF[] pfs6 = (PointF[])list.ToArray(typeof(PointF));

                    pl1.Transform.Matrix.TransformPoints(pfs1);
                    pl2.Transform.Matrix.TransformPoints(pfs2);

                    double[] d = new double[4];

                    d[0] = TLMath.GetPointsLen(pfs1[0], pfs2[0]);
                    d[1] = TLMath.GetPointsLen(pfs1[0], pfs2[1]);
                    d[2] = TLMath.GetPointsLen(pfs1[1], pfs2[0]);
                    d[3] = TLMath.GetPointsLen(pfs1[1], pfs2[1]);

                    int num = 0;
                    double max = d[0];

                    for (int i = 1; i < 4; i++) {
                        if (max > d[i]) {
                            num = i;
                            max = d[i];
                        }
                    }
                    list.Clear();
                    switch (num) {
                        case 0:
                            list.AddRange(pfs5);
                            list.AddRange(pfs4);
                            break;
                        case 1:
                            list.AddRange(pfs5);
                            list.AddRange(pfs6);
                            break;
                        case 2:
                            list.AddRange(pfs3);
                            list.AddRange(pfs4);
                            break;
                        case 3:
                            list.AddRange(pfs3);
                            list.AddRange(pfs6);
                            break;
                    }
                    pl1.SetAttribute("Name",pl1.Name + "连接" + pl2.Name);
                    pl1.Points = (PointF[])list.ToArray(typeof(PointF));
                    ItopVector.Core.Types.Transf transf =new ItopVector.Core.Types.Transf(new Matrix());
                    pl1.Transform = transf;
                    pl2.ParentNode.RemoveChild(pl2);
                    elements.Remove(pl2);
                }
            }
        }