コード例 #1
0
        public static XmlElement gFault(cSVGDocLayerMap svgLayer, ItemFaultLine curItemdata, List <Point> listPointView)
        {
            XmlDocument svgDoc         = svgLayer.svgDoc;
            XmlElement  svgDefs        = svgLayer.svgDefs;
            XmlElement  gPloylineFault = svgDoc.CreateElement("g");

            XmlElement gPloylineFaultPolygon = svgDoc.CreateElement("polyline");

            gPloylineFaultPolygon.SetAttribute("onclick", "getID(evt)");
            gPloylineFaultPolygon.SetAttribute("stroke-width", "5");
            gPloylineFaultPolygon.SetAttribute("stroke", "red");
            gPloylineFaultPolygon.SetAttribute("stroke-dasharray", "0");
            gPloylineFaultPolygon.SetAttribute("fill", "none");
            gPloylineFaultPolygon.SetAttribute("ill-opacity", "1");
            string _points = "";

            foreach (Point pd in listPointView)
            {
                _points += pd.X.ToString("0.0") + ',' + pd.Y.ToString("0.0") + " ";
            }
            gPloylineFaultPolygon.SetAttribute("points", _points);
            gPloylineFault.AppendChild(gPloylineFaultPolygon);

            return(gPloylineFault);
        }
コード例 #2
0
        public static XmlElement gWellPattern(cSVGDocLayerMap svgLayer, ItemLayerWellPattern itemWell, int JHFontSize, int radis, int iCirlceWidth, int DX_JHText, int DY_JHText)
        {
            XmlDocument svgDoc    = svgLayer.svgDoc;
            XmlElement  svgDefs   = svgLayer.svgDefs;
            XmlElement  gWellItem = svgDoc.CreateElement("g");

            XmlElement gWellRect = svgDoc.CreateElement("rect");

            gWellRect.SetAttribute("id", itemWell.sJH);
            gWellRect.SetAttribute("onclick", "getID(evt)");

            gWellRect.SetAttribute("x", "0");
            gWellRect.SetAttribute("y", "0");
            gWellRect.SetAttribute("width", (radis * 2).ToString());
            gWellRect.SetAttribute("height", (radis * 2).ToString());
            gWellRect.SetAttribute("style", "stroke-width:0");
            gWellRect.SetAttribute("stroke", "black");
            gWellRect.SetAttribute("fill", "none");
            gWellRect.SetAttribute("fill-opacity", "1");


            string sPatterID          = wellPatternCode(itemWell.sProperty);
            string filePathPatternSVG = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pattern", "wellChinese", "开发井", sPatterID + ".svg");

            //按照井别配置井符号填充rect
            if (File.Exists(filePathPatternSVG))//需要查找井pattern存在
            {
                cSVGoperate.addSVGpatternDefs(svgDoc, svgDefs, sPatterID, filePathPatternSVG);
                gWellRect.SetAttribute("fill", string.Format("url(#{0})", sPatterID));
            }
            else //不存在默认填充井pattern
            {
                gWellRect.SetAttribute("fill", "none");
            }
            gWellItem.AppendChild(gWellRect);

            XmlElement gJHText = svgDoc.CreateElement("text");

            gJHText.SetAttribute("x", (-DX_JHText).ToString());
            gJHText.SetAttribute("y", (+DY_JHText).ToString());
            gJHText.SetAttribute("font-size", JHFontSize.ToString());
            gJHText.SetAttribute("font-style", "normal");
            gJHText.InnerText = itemWell.sJH;
            gWellItem.AppendChild(gJHText);

            return(gWellItem);
        }
コード例 #3
0
ファイル: FormMapLayer.cs プロジェクト: xuleoBJ/oilFence
        //初始化控件当新建工程或者打开工程时

        void generateSVGfilemapByConfigxml()
        {
            //注意偏移量,偏移主要是为了好看 如果不偏移的话 就会绘到角落上,这时的偏移是整个偏移 后面的不用偏移了,相对偏移0,0
            int             idx         = 50;
            int             idy         = 50;
            cSVGDocLayerMap svgLayerMap = new cSVGDocLayerMap(PageWidth, PageHeight, idx, idy, sUnit);
            //add title
            string sTitle = Path.GetFileNameWithoutExtension(filePathLayerCss);

            svgLayerMap.addMapTitle(sTitle, 50, 20);
            XmlElement returnElemment;
            //svg文件和XML对应的问题还要思考一下
            string filePathSVGLayerMap = Path.Combine(cProjectManager.dirPathTemp, Path.GetFileNameWithoutExtension(filePathLayerCss) + ".svg");

            //这块需要处理覆盖问题。
            if (File.Exists(filePathSVGLayerMap))
            {
                File.Delete(filePathSVGLayerMap);
            }

            //如果顶层面断层数据不为空的话 应该加上断层
            //读取当前顶层的断层数据
            //List<ItemFaultLine> listFaultLine = cIOinputLayerSerier.readInputFaultFile(this.sSelectLayer);
            //foreach (ItemFaultLine line in listFaultLine)
            //{
            //    returnElemment = svgLayerMap.gFaultline(line.ltPoints, "red", 2);
            //    svgLayerMap.addgElement2BaseLayer(returnElemment);
            //}

            //解析当前的XML配置文件,根据每个Layer标签的LayerType生成id为层名的图层,添加到svgLayer中去

            XmlDocument xmlLayerMap = new XmlDocument();

            xmlLayerMap.Load(filePathLayerCss);

            //XmlNode xnBaseLayer = xmlLayerMap.SelectSingleNode("/LayerMapConfig/BaseLayer");
            //returnElemment = svgLayerMap.gWellsPositionFromXML(xnBaseLayer,"井");
            //svgLayerMap.addgElement2BaseLayer(returnElemment);

            XmlNodeList xnList = xmlLayerMap.SelectNodes("/LayerMapConfig/Layer");

            //或许Layer标签的节点
            foreach (XmlNode xn in xnList)
            {
                string sID = xn.Attributes["id"].Value;
                //建立新层
                XmlElement gXMLLayer = svgLayerMap.gLayerElement(sID);
                svgLayerMap.addgLayer(gXMLLayer, 0, 0);
                ////井位图层
                //if (xn.Attributes["LayerType"].Value ==TypeLayer.LayerPosition.ToString())
                //    returnElemment = svgLayerMap.gWellsPositionFromXML(xn,sID);
                //地质熟悉数据图层
                if (xn.Attributes["LayerType"].Value == TypeLayer.LayerGeoProperty.ToString())
                {
                    returnElemment = svgLayerMap.gLayerWellsGeologyPropertyFromXML(xn, sID);
                }
                //水平井图层
                if (xn.Attributes["LayerType"].Value == TypeLayer.LayerHorizonalInterval.ToString())
                {
                    returnElemment = svgLayerMap.gHorizonalWellIntervelFromXML(xn, sID);
                }
                ////日产
                //if (xn.Attributes["LayerType"].Value == TypeLayer.LayerDailyProduct.ToString())
                //    returnElemment = svgLayerMap.gDailyProductFromXML(xn, sID, listWellsStatic, listLayersDataCurrentLayerDynamic);
                ////累产饼图图层
                //if (xn.Attributes["LayerType"].Value == TypeLayer.LayerSumProduct.ToString())
                //    returnElemment = svgLayerMap.gSumProductFromXML(xn, sID, listWellsStatic, listLayersDataCurrentLayerDynamic);
                //井位柱状图图层
                if (xn.Attributes["LayerType"].Value == TypeLayer.LayerBarGraph.ToString())
                {
                    returnElemment = svgLayerMap.gWellBarGraphFromXML(xn, sID, listWellsStatic);
                }
                ////井位饼图图层
                //if (xn.Attributes["LayerType"].Value == TypeLayer.LayerPieGraph.ToString())
                //    returnElemment = cXMLLayerMapWellPieGraph.gWellPieGraphFromXML(xn, sID, listWellsStatic);
                //新层加内容
                //svgLayerMap.addgElement2Layer(gXMLLayer, returnElemment);
            }

            //add voi
            //if (this.cbxVoi.Checked == true)
            //{
            //    XmlElement gVoronoiLayer = svgLayerMap.gLayerElement("voronoi");
            //    svgLayerMap.addgLayer(gVoronoiLayer, svgLayerMap.offsetX_gSVG,svgLayerMap.offsetY_gSVG);
            //    List<itemWellLayerVoi> listVoi = cIOVoronoi.read2Struct();
            //    foreach (itemWellLayerVoi well in listVoi.FindAll(p => p.sXCM == sSelectLayer))
            //    {
            //        returnElemment = svgLayerMap.gVoronoiPolygon(well.sJH, well.ltdpVertex, "red", 2);
            //        svgLayerMap.addgElement2Layer(gVoronoiLayer, returnElemment);
            //    }
            //}

            //add connect
            //if (this.cbxConnect.Checked == true)
            //{
            //    XmlElement gConnectLayer = svgLayerMap.gLayerElement("Connect");
            //    svgLayerMap.addgLayer(gConnectLayer,0,0);
            //    List<ItemConnectInjPro> listConnect = cIODicInjProCon.read2Struct(sSelectYM , sSelectLayer);
            //    foreach (ItemConnectInjPro connect in listConnect)
            //    {
            //        //需要定到层位
            //        ItemWellMapPosition wellInj = listWellsStatic.Find(p => p.sJH == connect.sJHinj);
            //        ItemWellMapPosition wellPro = listWellsStatic.Find(p => p.sJH == connect.sJHpro);
            //        PointD p1 = new PointD(wellInj.dbX, wellInj.dbY);
            //        PointD p2 = new PointD(wellPro.dbX, wellPro.dbY);
            //        returnElemment = svgLayerMap.gConnectLine(p1, p2, "blue", 2);
            //        svgLayerMap.addgElement2Layer(gConnectLayer, returnElemment);
            //    }

            //}



            XmlElement gLayerCompass = svgLayerMap.gLayerElement("指南针");

            svgLayerMap.addgLayer(gLayerCompass, svgLayerMap.offsetX_gSVG, svgLayerMap.offsetY_gSVG);
            svgLayerMap.addgElement2Layer(gLayerCompass, svgLayerMap.gCompass(300, 100));

            svgLayerMap.makeSVGfile(filePathSVGLayerMap);
            this.webBrowserSVG.Navigate(new Uri(filePathSVGLayerMap));
        }
コード例 #4
0
        public static string generateLayerMap(string filePathLayerOperate, string sCurrentLayer)
        {
            //注意偏移量,偏移主要是为了好看 如果不偏移的话 就会绘到角落上,这时的偏移是整个偏移 后面的不用偏移了,相对偏移0,0

            //svg文件和XML对应的问题还要思考一下
            string dirPathLayer        = Path.Combine(cProjectManager.dirPathLayerDir, sCurrentLayer);
            string filePathSVGLayerMap = Path.Combine(dirPathLayer, Path.GetFileNameWithoutExtension(filePathLayerOperate) + ".svg");

            //这块需要处理覆盖问题。
            if (File.Exists(filePathSVGLayerMap))
            {
                File.Delete(filePathSVGLayerMap);
            }

            //解析当前的XML配置文件,根据每个Layer标签的LayerType生成id为层名的图层,添加到svgLayer中去

            XmlDocument xmlLayerMap = new XmlDocument();

            xmlLayerMap.Load(filePathLayerOperate);
            //获取基本的页面信息及基础配置文件信息

            //获取井位List
            XmlNodeList xnWellDataList = xmlLayerMap.SelectNodes("/LayerMapConfig/DataDicStatic/data/item");
            List <ItemWellMapPosition> listWellLayerMap = new List <ItemWellMapPosition>();

            foreach (XmlNode xn in xnWellDataList)
            {
                ItemWellMapPosition item = ItemWellMapPosition.parseLine(xn.Attributes["LayerDataDicText"].Value);
                listWellLayerMap.Add(item);
            }

            //根据配置文件,读取页面基本配置信息
            cXELayerPage curPage = new cXELayerPage(xmlLayerMap);

            int             idx         = 200;
            int             idy         = 200;
            int             PageWidth   = curPage.iPageWidth;
            int             PageHeight  = curPage.iPageHeight;
            string          sUnit       = "mm";
            cSVGDocLayerMap svgLayerMap = new cSVGDocLayerMap(PageWidth, PageHeight, idx, idy, sUnit);
            //add title
            string sTitle = Path.GetFileNameWithoutExtension(filePathLayerOperate);

            svgLayerMap.addMapTitle(sTitle, PageWidth / 2, 20);
            XmlElement returnElemment;

            cXEWellCss wellCss = new cXEWellCss(xmlLayerMap);

            //从配置文件中 读取图层列表,根据配置绘制图层
            XmlNode xnLayerList = xmlLayerMap.SelectSingleNode("/LayerMapConfig/LayerList");

            //或许Layer标签的节点
            foreach (XmlNode xn in xnLayerList.ChildNodes)
            {
                string sIDLayer      = xn.Attributes["id"].Value;
                string sLayerType    = xn.Attributes["layerType"].Value;
                string sLayerVisible = xn["visible"].InnerText;
                //建立新层
                XmlElement gNewLayer = svgLayerMap.gLayerElement(sIDLayer);
                svgLayerMap.addgLayer(gNewLayer, idx, idy);

                #region  测井曲线图层
                if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerLog.ToString())
                {
                    LayerDataLog layerDataLog = new LayerDataLog(xn);
                    foreach (ItemWellMapPosition itemWell in listWellLayerMap)
                    {
                        Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(itemWell.dbX, itemWell.dbY, curPage.xRef, curPage.yRef, curPage.dfscale);
                        returnElemment = cXMLLayerMapWellLog.gLayerWellLog(svgLayerMap, itemWell, layerDataLog);
                        //新层加内容
                        int xViewStart = PViewWell.X;
                        int yViewStart = PViewWell.Y;
                        //如果左值小于右值,就把曲线坐班绘制
                        if (layerDataLog.iLeftDraw == 1)
                        {
                            xViewStart = xViewStart - layerDataLog.iTrackWidth;
                        }
                        svgLayerMap.addgElement2Layer(gNewLayer, returnElemment, xViewStart, yViewStart);
                    }
                }
                #endregion

                #region 小层SectionLayer图层。
                if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerSection.ToString())
                {
                    //建立新层
                    XmlElement gWellLayer = svgLayerMap.gLayerElement("LayerSection");
                    svgLayerMap.addgLayer(gWellLayer, 0, 0);
                    for (int i = 0; i < listWellLayerMap.Count; i++)
                    {
                        string sCurJH     = listWellLayerMap[i].sJH;
                        string sCurXCM    = listWellLayerMap[i].sXCM;
                        string dirLayerJH = Path.Combine(cProjectManager.dirPathLayerDir, sCurXCM, sCurJH);
                        string filePathSecitonTemplatOper     = Path.Combine(dirLayerJH, sCurJH + "_" + sCurXCM + ".xml");
                        string filePathSecitonLayerSectionSVG = Path.Combine(dirLayerJH, sCurJH + "_" + sCurXCM + ".svg");

                        //斜井模式
                        double fVscaleLayerSection = 50;

                        makeWellLayerSectionGraph(filePathSecitonTemplatOper, listWellLayerMap[i].dbTop, listWellLayerMap[i].dbBot, fVscaleLayerSection);
                        Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(listWellLayerMap[i].dbX, listWellLayerMap[i].dbY, curPage.xRef, curPage.yRef, curPage.dfscale);
                        //新层加内容
                        int xViewStart = PViewWell.X;
                        int yViewStart = PViewWell.Y;
                        //这块应该改成相对路径
                        string pathLayerSectionRelative = Path.Combine(sCurJH, sCurJH + "_" + sCurXCM + ".svg");
                        if (File.Exists(filePathSecitonLayerSectionSVG))
                        {
                            svgLayerMap.addgSVG2Layer(gNewLayer, filePathSecitonLayerSectionSVG, xViewStart, yViewStart);
                        }
                    }
                }
                #endregion

                #region 断层图层。
                if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerFaultLine.ToString())
                {
                    XmlNode dataLine = xn.SelectSingleNode("dataList");

                    if (dataLine != null)
                    {
                        XmlNodeList dataItem = dataLine.SelectNodes("dataItem");
                        foreach (XmlNode faultItem in dataItem)
                        {
                            ItemFaultLine curItemdata   = new ItemFaultLine(faultItem);
                            List <Point>  listPointView = new List <Point>();
                            foreach (PointD pd in curItemdata.ltPoints)
                            {
                                Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(pd.X, pd.Y, curPage.xRef, curPage.yRef, curPage.dfscale);
                                listPointView.Add(PViewWell);
                            }
                            returnElemment = cXMLLayerMapStatic.gFault(svgLayerMap, curItemdata, listPointView);
                            //新层加内容
                            svgLayerMap.addgElement2Layer(gNewLayer, returnElemment);
                        }
                    }
                }
                #endregion

                #region 井位图层。
                if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerWellPosition.ToString())
                {
                    XmlNode dataList = xn.SelectSingleNode("dataList");

                    if (dataList != null)
                    {
                        XmlNodeList dataItem = dataList.SelectNodes("dataItem");
                        foreach (XmlNode xnWell in dataItem)
                        {
                            ItemLayerWellPattern itemWell = new ItemLayerWellPattern(xnWell);
                            Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(itemWell.X, itemWell.Y, curPage.xRef, curPage.yRef, curPage.dfscale);
                            returnElemment = cXMLLayerMapStatic.gWellPattern(svgLayerMap, itemWell, 10, 5, 5, 5, 5);

                            //新层加内容
                            svgLayerMap.addgElement2Layer(gNewLayer, returnElemment, PViewWell.X, PViewWell.Y);
                        }
                    }
                }
                #endregion

                #region 井位饼图图层
                if (sLayerType == TypeLayer.LayerPieGraph.ToString())
                {
                    returnElemment = cXMLLayerMapWellPieGraph.gWellPieGraphFromXML(svgLayerMap.svgDoc, xn, sIDLayer, listWellLayerMap, curPage);
                    //新层加内容
                    svgLayerMap.addgElement2Layer(gNewLayer, returnElemment);
                }
                #endregion


                //由于井位图是底图,造成被压在最下面一层。这个问题要解决一下。
                returnElemment = cSVGLayerWellPosition.gWellsPosition(xmlLayerMap, listWellLayerMap, "井位", wellCss, curPage);
                svgLayerMap.addgElement2BaseLayer(returnElemment);

                #region 比例尺
                if (curPage.iShowScaleRuler == 1)
                {
                    XmlElement gLayerScaleRuler = svgLayerMap.gLayerElement("比例尺");
                    svgLayerMap.addgLayer(gLayerScaleRuler, svgLayerMap.offsetX_gSVG, svgLayerMap.offsetY_gSVG);
                    returnElemment = svgLayerMap.gScaleRuler(0, 0, curPage.dfscale);
                    svgLayerMap.addgElement2Layer(gLayerScaleRuler, returnElemment, 100, 100);
                }
                #endregion

                #region 页面网格及标志
                if (curPage.iShowMapFrame == 1)
                {
                    returnElemment = svgLayerMap.gMapFrame(curPage);
                    svgLayerMap.addgElement2BaseLayer(returnElemment);
                }
                #endregion

                #region 指南针
                if (curPage.iShowCompass == 1)
                {
                    XmlElement gLayerCompass = svgLayerMap.gLayerElement("指南针");
                    svgLayerMap.addgLayer(gLayerCompass, svgLayerMap.offsetX_gSVG, svgLayerMap.offsetY_gSVG);
                    svgLayerMap.addgElement2Layer(gLayerCompass, svgLayerMap.gCompass(300, 100));
                }
                #endregion
            } //end of 所有图层的绘制

            svgLayerMap.makeSVGfile(filePathSVGLayerMap);
            return(filePathSVGLayerMap);
        }