示例#1
0
        private void initPrjPier(CRailwayProject rp)
        {
            mls1.Images.Clear();
            listView1.Items.Clear();
            if (rp is CContBeam)
            {
                int       i  = 0;
                CContBeam cb = rp as CContBeam;

                foreach (CRailwayPier p in cb.mPierList)
                {
                    mls1.Images.Add(CGeneralHelpers.generate2DCode(@"http://jqmis.cn/S/" + p.mSerialNo));
                    ListViewItem lvi = new ListViewItem();
                    lvi.Text       = p.DWName + "#墩";
                    lvi.Font       = defaultFont;
                    lvi.ImageIndex = i++;
                    listView1.Items.Add(lvi);
                }
                listView1.View = View.LargeIcon;

                listView1.LargeImageList = mls1;
            }
            listView1.Size     = new Size(175 * listView1.Items.Count, 200);
            listView1.Location = new Point((panel1.Width - listView1.Width) / 2, listView1.Location.Y);
        }
示例#2
0
        private void polylineMiddleLine(CRailwayProject rw, IColor66 lineColor, SGWorld66 sgworld, string branch)
        {
            ITerrainPolyline66 polyline;

            //double[] x, y, z, dir;
            double[] mArray;
            int      count = rw.getSubLine(out mArray);

            //mSceneData.mMiddleLines.getSubLineByDKCode(rw.Mileage_Start_Discription, rw.Mileage_End_Discription, 10, out x, out y, out z, out dir);
            //double[] mArray = new double[count * 3];
            //for (int i = 0; i < count; i++)
            //{
            //     mArray[3 * i] = x[i];
            //     mArray[3 * i + 1] = y[i];
            //     mArray[3 * i + 2] = z[i] + 1;

            //}
            if (count > 1)
            {
                polyline        = sgworld.Creator.CreatePolylineFromArray(mArray, lineColor, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, branch, rw.ProjectName);
                polyline.Spline = true;
                polyline.Visibility.MaxVisibilityDistance = 10000000;
                polyline.Visibility.MinVisibilityDistance = 1000;
                polyline.LineStyle.Width = -5.0;
                polyline.Visibility.Show = true;
            }
        }
示例#3
0
        public bool initPrjDetail(CRailwayProject rp)
        {
            if (rp == null)
            {
                return(false);
            }
            if (rp == this.propertyGridEx1.Tag)
            {
                return(false);
            }

            propertyGridEx1.Tag            = rp;
            propertyGridEx1.SelectedObject = rp;
            if (rp.FXProgress.Count >= 3)
            {
                showOneFX(propertyGridEx2, rp.FXProgress[rp.selectedFXid[0]], 0);
                showOneFX(propertyGridEx3, rp.FXProgress[rp.selectedFXid[1]], 1);
                showOneFX(propertyGridEx4, rp.FXProgress[rp.selectedFXid[2]], 2);
            }

            initPrjPier(rp);
            mImageUrl = rp.mPhotoUrl;
            //initPrjPhoto(rp);
            return(true);
        }
示例#4
0
        private void dgvRoad_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            CRailwayProject p     = null;
            string          sname = (sender as DevComponents.DotNetBar.Controls.DataGridViewX).Name;

            switch (sname)
            {
            case "dgvRoad":
                p = dgvRoad.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvBridge":
                p = dgvBridge.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvTunnel":
                p = dgvTunnel.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvStation":
                p = dgvStation.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvOther":
                p = dgvOther.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            default:
                return;
            }

            sgworld.Navigate.FlyTo(sgworld.Creator.CreatePosition(p.mLongitude_Mid, p.mLatitude_Mid, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, 0, -65.0, 0, 1500));
        }
示例#5
0
 private void draw_RoadFX(Graphics myGraphics, CRailwayProject road, float winHeight, float winWidth, Matrix pm, float scaleX, float unitM = 100)
 {
     //float sy = prjStartY + 25;
     //float unitPixelLength = unitM * scaleX;
     //Pen p = defaultPen;
     draw_PrjFX(myGraphics, road, "路", winHeight, winWidth, pm, scaleX, true, unitM);
 }
示例#6
0
        public CTEObject showTEObject(CHotSpot hs1, CHotSpot hs2, bool isStopping = false)
        {
            CTEObject obj = null;

            switch (hs1.ObjectType)
            {
            case "Project":
                CRailwayProject rp = (CRailwayProject)(hs1.ObjectRef);

                //string s = "当前位置: " + rp.ToString() + "\t\t";

                //labelRoll2.Text = s;
                //labelRoll2.Refresh();

                obj = showTEProject(rp, isStopping);


                break;

            case "Firm":
                CRailwayFirm rf = (CRailwayFirm)(hs1.ObjectRef);
                obj = showTEFirms(rf, isStopping);
                break;

            case "Cons":
                ConsLocation cl = (ConsLocation)(hs1.ObjectRef);
                obj = showTECons(cl, isStopping);
                break;
            }
            return(obj);
        }
示例#7
0
        public void setProject(CRailwayProject rp)
        {
            if (rp == null || rp == this.propertyGridEx1.Tag || !(rp is CRailwayProject))
            {
                return;
            }
            mProject = rp;

            this.Text = rp.ProjectName;

            if (!string.IsNullOrEmpty(rp.mPhotoUrl))
            {
                mImageUrl = @"http://" + CGisDataSettings.gCurrentProject.projectUrl + rp.mPhotoUrl;
                webBrowser1.Navigate(mImageUrl);
            }
            else
            {
                mImageUrl = null;
            }

            propertyGridEx1.Tag            = rp;
            propertyGridEx1.SelectedObject = rp;
            if (rp.FXProgress.Count >= 3)
            {
                showOneFX(propertyGridEx2, rp.FXProgress[rp.selectedFXid[0]], 0);
                showOneFX(propertyGridEx3, rp.FXProgress[rp.selectedFXid[1]], 1);
                showOneFX(propertyGridEx4, rp.FXProgress[rp.selectedFXid[2]], 2);
            }
            initPrjPier(rp);
        }
示例#8
0
        public static CRailwayProject findProjectByCoor(double x, double y)
        {
            CRailwayProject p = null;
            double          meters;

            meters = mMiddleLine.findMeterbyCoor(x, y);
            p      = findProjectByMeter(meters);
            return(p);
        }
示例#9
0
        private void dgvRoad_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            CRailwayProject p = null;

            if (e.RowIndex < 0)
            {
                return;
            }
            string sname = (sender as DevComponents.DotNetBar.Controls.DataGridViewX).Name;

            switch (sname)
            {
            case "dgvRoad":
                p = dgvRoad.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvBridge":
                p = dgvBridge.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvTunnel":
                p = dgvTunnel.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvConsBeam":
                p = dgvConsBeam.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvOther":
                p = dgvOther.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            default:
                return;
            }
            // http://railmis.imwork.net/jqmis/webservice/ProjectService.asmx
            sgworld.Navigate.FlyTo(sgworld.Creator.CreatePosition(p.CenterLongitude, p.CenterLatitude, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, 0, -35.0, 0, 800));
            string urlstr = "http://" + CGisDataSettings.gCurrentProject.projectUrl + "/APP/ProjectMng.aspx?f=detail&shownav=1&sn=" + p.mSerialNo +
                            "&uacc=" + CGisDataSettings.gCurrentProject.userName + "&upwd=" + CGisDataSettings.gCurrentProject.userPSD;//&showtab=1

            //ProjectService.ProjectServiceSoapClient ws = new ProjectService.ProjectServiceSoapClient();
            //Console.WriteLine(p.mProjectName +  ws.ws_Get_ProjectProgressRate(p.mSerialNo));
            //DataTable dt;
            //dt = ws.ws_Bind_ProjectProgress_HistoryRate_DataTable(p.mSerialNo);
            //foreach (DataRow dr in dt.Rows)
            //{
            //    Console.WriteLine((string)dr["Date"] + "\t" + (double)dr["Rate"]);
            //}
            advPropertyGrid1.SelectedObject = p;
            pnlTrain.Expanded = true;
            //mainContainer.Panel2Collapsed = false;
            //webBrowser1.Navigate(urlstr);
        }
示例#10
0
        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
            if (PanelSelectClicked != null)
            {
                //int fxid;
                CRailwayProject p   = null;
                CRailwayDWProj  dwp = null;

                getGlobalPos(panel1.Size.Width, mileageCenter, mileageViewRadius, e.X, e.Y, out p, out dwp);
                PanelSelectClicked(p, dwp);
            }
        }
示例#11
0
        private void addItem(string s1, string s2, int s3, CRailwayProject p, DataGridView dgv)
        {
            DataGridViewRow dr = new DataGridViewRow();

            foreach (DataGridViewColumn c in dgv.Columns)
            {
                dr.Cells.Add(c.CellTemplate.Clone() as DataGridViewCell);
            }
            dr.Cells[0].Value = s1;
            dr.Cells[1].Value = s2;
            dr.Cells[2].Value = s3;
            //dr.Cells[3].Value = s4;
            dr.Tag = p;
            dgv.Rows.Add(dr);
        }
示例#12
0
        private void dgvRoad_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            CRailwayProject p = null;

            if (e.RowIndex < 0)
            {
                return;
            }
            string sname = (sender as DevComponents.DotNetBar.Controls.DataGridViewX).Name;

            switch (sname)
            {
            case "dgvRoad":
                p = dgvRoad.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvBridge":
                p = dgvBridge.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvTunnel":
                p = dgvTunnel.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvConsBeam":
                p = dgvConsBeam.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvOther":
                //p = dgvOther.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            default:
                return;
            }
            //if (GlobalVar.gCurrentPro != null && GlobalVar.gCurrentPro.mPolyline != null)
            //{
            //    GlobalVar.gCurrentPro.mPolyline.Visibility.Show = false;
            //}
            ////if (p.mPolyline != null)
            ////    p.mPolyline.Visibility.Show = true;
            //GlobalVar.gCurrentPro = p;
            //sgworld.Navigate.FlyTo(sgworld.Creator.CreatePosition(p.mLongitude_Mid, p.mLatitude_Mid, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, p.mDirection + 90, -35.0, 0, 800));
            sgworld.Navigate.FlyTo(sgworld.Creator.CreatePosition(p.CenterLongitude, p.CenterLatitude, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, 0, -35.0, 0, 800));
            advPropertyGrid1.SelectedObject = p;
        }
示例#13
0
        private void showProjectProgress(CRailwayProject item)
        {
            if (item.mMileage_End - item.mMileage_Start > 15)
            {
                double[] x;
                double[] y;
                double[] z;
                int      pointNum = CRailwayScene.mMiddleLine.getSubLine(item.mMileage_Start, item.mMileage_End, 1, out x, out y, out z);
                if (pointNum > 1)
                {
                    double[] cVerticesArray = new double[pointNum * 3];

                    int i;
                    for (i = 0; i < pointNum; i++)
                    {
                        cVerticesArray[3 * i]     = x[i];
                        cVerticesArray[3 * i + 1] = y[i];
                        cVerticesArray[3 * i + 2] = 20;
                    }
                    try
                    {
                        var sgworld = new SGWorld66();
                        var branch = sgworld.ProjectTree.FindItem("MiddleLine");
                        int r, g, b;
                        HslToRgb(10, 1 - item.mAvgProgress, 1, out r, out g, out b);

                        item.mPolyline = sgworld.Creator.CreatePolylineFromArray(cVerticesArray, sgworld.Creator.CreateColor(r, g, b, 255),
                                                                                 AltitudeTypeCode.ATC_TERRAIN_RELATIVE, branch, "Middle Line" + item.mProjectName);
                        item.mPolyline.Visibility.MinVisibilityDistance = 1250;
                        item.mPolyline.Spline          = true;
                        item.mPolyline.LineStyle.Width = -5;
                        //item.mPolyline.
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Creation Failed" + item.mProjectName);
                    }
                }
            }
        }
示例#14
0
        private CTEObject showTEProject(CRailwayProject rp, bool isStopping = false)
        {
            CTEProject tp = mTEProjList.Find(
                delegate(CTEProject tpp) { return(tpp.proj == rp); });  //findTEProject(rp);

            if (tp != null)
            {
                //double x, y, z, d;
                //tp.proj.getSpecialPoint(1, out x, out y, out z, out d);
                //CTEPointNav.showPoint(sgworld, x, y, z, d);
                if (isStopping) // && prjInfoForm.ws == WorkingStatus.Working
                {
                    prjInfoForm.interruptShow();
                }
                else
                {
                    prjInfoForm.setProject(rp);
                    prjInfoForm.preShow();
                }
            }
            return(tp);
        }
示例#15
0
        public static CRailwayProject findProjectByMeter(double meter)
        {
            meter /= 1000.0;
            CRailwayProject p2 = null;

            foreach (CRailwayProject p in mProjectList)
            {
                if (meter >= p.mMileage_Start & meter <= p.mMileage_End)
                {
                    if (p2 == null)
                    {
                        p2 = p;
                    }
                    else
                    {
                        p2 = Math.Abs(p2.mMileage_Mid - meter) > Math.Abs(p.mMileage_Mid - meter) ? p : p2;
                    }
                    //break;
                }
            }
            return(p2);
        }
示例#16
0
        private void dgvRoad_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            CRailwayProject p     = null;
            string          sname = (sender as DevComponents.DotNetBar.Controls.DataGridViewX).Name;

            switch (sname)
            {
            case "dgvRoad":
                p = dgvRoad.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvBridge":
                p = dgvBridge.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvTunnel":
                p = dgvTunnel.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvStation":
                p = dgvStation.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            case "dgvOther":
                p = dgvOther.Rows[e.RowIndex].Tag as CRailwayProject;
                break;

            default:
                return;
            }
            sgworld.Navigate.FlyTo(sgworld.Creator.CreatePosition(p.mLongitude_Mid, p.mLatitude_Mid, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, 0, -65.0, 0, 1500));
            string urlstr = "http://" + GlobalVar.gUserIP + "/MNMIS/APP/ProjectMng.aspx?f=detail&sn=" + p.mSerialNo +
                            "&uacc=" + GlobalVar.gUserName + "&upwd=" + GlobalVar.gUserPWD;

            mainContainer.Panel2Collapsed = false;
            webBrowser1.Navigate(urlstr);
        }
示例#17
0
        private void draw_ContBeam(Graphics myGraphics, CRailwayProject bridge, float winHeight, float winWidth, Matrix pm, float scaleX, float unitM = 8)
        {
            if (bridge.mPierList.Count < 2)
            {// FIXME xu
                //Console.WriteLine("连续梁无桥墩错误" + bridge.ProjectName);
                return;
            }
            float sy = prjStartY + 25;
            float unitPixelLength = unitM * scaleX;
            Pen   p = defaultPen;

            if (draw_PrjFX(myGraphics, bridge, "连", winHeight, winWidth, pm, scaleX, false, unitM))
            {
                try
                {
                    PointF[]         pls  = new PointF[bridge.mPierList.Count];
                    CRailwayDWProj[] dwls = new CRailwayDWProj[bridge.mPierList.Count];
                    int ii = 0;
                    foreach (CRailwayDWProj dwp in bridge.mPierList)
                    {
                        if (dwp.mIsValid)
                        {
                            pls[ii]  = new PointF((float)dwp.mMainMileage, 0);
                            dwls[ii] = dwp;
                            ii++;
                        }
                    }
                    pm.TransformPoints(pls);
                    //List<int> tls = new List<int> { 4, 2, 4 };
                    for (int j = 0; j < ii; j++)
                    {
                        if (pls[j].X <0 || pls[j].X> winWidth)
                        {
                            continue;
                        }
                        drawOnePier(myGraphics, pls[j].X, sy + 10, unitPixelLength, (CRailwayPier)dwls[j]);

                        // 绘制连续墩的梁
                        int beamCount;
                        if (j + 1 < ii && ((CRailwayPier)dwls[j + 1]).mBeamDone.Count > 0)// 0号墩台和最后一个墩台不会向两边架梁,n+1个墩,n个梁
                        {
                            beamCount = ((CRailwayPier)dwls[j + 1]).mBeamDone.Count;
                            float w   = pls[j + 1].X - pls[j].X;
                            float uw  = w / beamCount;
                            float ssx = pls[j].X;
                            for (int i = 0; i < beamCount; i++)
                            {
                                if (((CRailwayPier)dwls[j + 1]).mBeamDone[i])
                                {
                                    p = redPen;
                                }
                                else
                                {
                                    p = defaultPen;
                                }

                                myGraphics.DrawRectangle(p, ssx, sy, uw, 10);
                                ssx += uw;
                            }
                        }
                        myGraphics.DrawString(dwls[j].DWName, defaultFont, Brushes.Black, pls[j].X - unitPixelLength, sy + 70);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(bridge.ProjectName + "绘制异常,连续梁");
                }
                //myGraphics.DrawRectangle(Pens.Black, pls[j].X, sy, pls[j + 1].X - pls[j].X - 1, 10);
            }
        }
示例#18
0
        private void getGlobalPos(float panelwidth, double centerMileage, double radiusMileage, int mx, int my, out CRailwayProject prj, out CRailwayDWProj dwp)
        {
            //float titleHeight = 30;
            //float scaleX;
            float height = 60;

            prj = null;
            dwp = null;
            Pen p = new Pen(Color.Black, 2);

            p.StartCap = LineCap.RoundAnchor;
            p.EndCap   = LineCap.RoundAnchor;

            //Matrix m = getTransM((float)centerMileage, (float)radiusMileage, width, out scaleX, 50);
            Matrix im = getInvTransM((float)centerMileage, (float)radiusMileage, panelwidth, 50);

            PointF[] sd = { new PointF(0, 0) }; // 窗口
            sd[0].X = mx;
            sd[0].Y = my;
            im.TransformPoints(sd);
            int FXindex = (int)(sd[0].Y / height * 3);

            //Console.WriteLine("Click x=" + mx + " y= " + my + "\t global mileage = " + sd[0].X + " FXindex =" + FXindex);
            if (FXindex >= 2)
            {
                dwp = mRWScene.GetPierByMileage(sd[0].X);

                //if (rp == null)
                //    return;
                //skinAnimator1.WaitAllAnimations();
                //skinAnimator1.Hide(advPropertyGrid1);

                //pictureBox2.Image = generate2DCode(@"http://jqmis.cn/S/" + rp.mSerialNo);
                //advPropertyGrid1.SelectedObject = rp;
                //showProjectDetail(rp);
                //skinAnimator1.WaitAllAnimations();
                //skinAnimator1.Show(advPropertyGrid1);
            }
            if (dwp == null)
            {
                prj = mRWScene.GetProjectByMileage(sd[0].X);
                //if (rp == null)

                //skinAnimator1.WaitAllAnimations();
                //skinAnimator1.Hide(advPropertyGrid1);

                //pictureBox2.Image = generate2DCode(@"http://jqmis.cn/S/" + rp.mSerialNo);
                //advPropertyGrid1.SelectedObject = rp;
                //skinAnimator1.WaitAllAnimations();
                //skinAnimator1.Show(advPropertyGrid1);
            }
            //gRWScene.GetAllNavPathbyMileage
            //return sd[0].X;
        }
示例#19
0
        private void draw_BridgeFX(Graphics myGraphics, CRailwayProject bridge, float winHeight, float winWidth, Matrix pm, float scaleX, float unitM = 8)
        {
            float sy = prjStartY + 25;
            float unitPixelLength = unitM * scaleX;
            Pen   p = defaultPen;

            if (draw_PrjFX(myGraphics, bridge, "桥", winHeight, winWidth, pm, scaleX, false, unitM))
            {
                try
                {
                    // 绘制桥墩
                    if (bridge.mPierList != null && bridge.mPierList.Count > 0)
                    {
                        PointF[]         pls  = new PointF[bridge.mPierList.Count];
                        CRailwayDWProj[] dwls = new CRailwayDWProj[bridge.mPierList.Count];
                        int ii = 0;
                        foreach (CRailwayDWProj dwp in bridge.mPierList)  // 遍历里程合法的桥墩
                        {
                            if (dwp.mIsValid)
                            {
                                pls[ii]  = new PointF((float)dwp.mMainMileage, 0);
                                dwls[ii] = dwp;
                                ii++;
                            }
                        }
                        pm.TransformPoints(pls);
                        List <int> tls = new List <int> {
                            4, 4
                        };
                        for (int j = 0; j < ii; j++)
                        {
                            if (pls[j].X <0 || pls[j].X> winWidth)
                            {
                                continue;
                            }
                            drawOnePier(myGraphics, pls[j].X, sy + 10, unitPixelLength, (CRailwayPier)dwls[j]);

                            myGraphics.DrawString(dwls[j].DWName, defaultFont, Brushes.Black, pls[j].X - unitPixelLength, sy + 70);
                        }
                    }

                    //绘制梁
                    if (bridge.mBeamList != null && bridge.mBeamList.Count > 0)
                    {
                        PointF[]         pls  = new PointF[bridge.mBeamList.Count];
                        PointF[]         ple  = new PointF[bridge.mBeamList.Count];
                        CRailwayDWProj[] dwls = new CRailwayDWProj[bridge.mBeamList.Count];
                        int ii = 0;
                        foreach (CRailwayDWProj dwp in bridge.mBeamList)  // 遍历里程合法的梁
                        {
                            if (dwp.mIsValid)
                            {
                                pls[ii]  = new PointF((float)dwp.mMainMileage, 0);
                                ple[ii]  = new PointF((float)(dwp.mMainMileage + dwp.mLength), 0);
                                dwls[ii] = dwp;
                                ii++;
                            }
                        }
                        pm.TransformPoints(pls);
                        pm.TransformPoints(ple);

                        for (int j = 0; j < ii; j++)
                        {
                            if (pls[j].X <0 || pls[j].X> winWidth)
                            {
                                continue;
                            }

                            if (dwls[j].mIsDone)
                            {
                                p = redPen;
                            }
                            else
                            {
                                p = defaultPen;
                            }
                            if (j + 1 < ii)
                            {
                                myGraphics.DrawRectangle(p, pls[j].X, sy, Math.Abs(pls[j + 1].X - pls[j].X), 10);
                            }
                            else
                            {
                                myGraphics.DrawRectangle(p, pls[j].X, sy, Math.Abs(ple[j].X - pls[j].X), 10);
                            }

                            //myGraphics.DrawString(dwls[j].DWName, defaultFont, Brushes.Black, pls[j].X - unitPixelLength, sy + 70);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(bridge.ProjectName + "绘制异常,桥梁");
                }
            }
            //myGraphics.DrawRectangle(Pens.Black, pls[j].X, sy, pls[j + 1].X - pls[j].X - 1, 10);
        }
示例#20
0
        private void loadProjectsFromDB()
        {
            #region init Items

            OleDbConnection conn = null;


            OleDbDataAdapter myCommand = null;
            DataSet          ds        = null;

            string ProjectSQL;

            string projectName, professionalName;
            string projectCatCode;
            //double meters = 0;
            CRailwayProject sItem = null;
            GlobalVar.useLocalDB = true;
            try
            {
                if (!GlobalVar.useLocalDB)
                {
                    ProjectSQL = @"SELECT SerialNo,ShorName,ProfessionalName,  "
                                 + @"ProjectName,ProjectName_en_us ,ProfessionalCategoryCode, Mileage_Start, Mileage_End,"
                                 + @"UpdateTime, avgProgress, direction FROM vw_ProjectInfo WHERE ProfessionalCategoryCode like '-1-42-%'"
                                 + @"OR ProfessionalCategoryCode like '-1-43-%' OR ProfessionalCategoryCode like '-1-87-%';";
                    conn = new OleDbConnection(GlobalVar.gConnectStr);
                    conn.Open();

                    myCommand = new OleDbDataAdapter(ProjectSQL, conn);
                    ds        = new DataSet();
                    myCommand.Fill(ds, "table1");
                }
            }catch (Exception ex) {
                Console.WriteLine(ex.Message.ToString());
                MessageBox.Show("Can't Connect Server, use local database instead. ");
                GlobalVar.useLocalDB = true;
            }
            try {
                if (GlobalVar.useLocalDB)
                {
                    ProjectSQL = @"SELECT SerialNo,ShorName,ProfessionalName,  "
                                 + @"ProjectName,ProjectName_en_us ,ProfessionalCategoryCode, Mileage_Start, Mileage_End,"
                                 + @"UpdateTime, avgProgress, direction FROM vw_ProjectInfo WHERE ProfessionalCategoryCode like '-1-42-%'"
                                 + @"OR ProfessionalCategoryCode like '-1-43-%' OR ProfessionalCategoryCode like '-1-87-%';";
                    string fileName = GlobalVar.gDataPath + @"mn\vw_ProjectInfo.xlsx";
                    string strConn;
                    if (System.IO.Path.GetExtension(fileName) == ".xls")
                    {
                        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
                    }
                    else
                    {
                        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
                    }

                    conn = new OleDbConnection(strConn);
                    conn.Open();
                    myCommand = new OleDbDataAdapter(ProjectSQL, conn);
                    ds        = new DataSet();
                    myCommand.Fill(ds, "table1");
                }
                int count = ds.Tables["table1"].Rows.Count;
                mProjectList = new List <CRailwayProject>(count);
                mStationList = new List <CRailwayProject>();
                mBridgeList  = new List <CRailwayProject>();
                mRoadList    = new List <CRailwayProject>();
                mTunnelList  = new List <CRailwayProject>();
                mOtherList   = new List <CRailwayProject>();

                foreach (DataRow dataReader in ds.Tables["table1"].Rows)
                {
                    try
                    {
                        projectCatCode = (string)dataReader["ProfessionalCategoryCode"];
                        projectName    = (string)dataReader["ProjectName_en_us"];
                        if (projectName == null || projectName == "")
                        {
                            projectName = (string)dataReader["ProjectName"];
                        }

                        professionalName = (string)dataReader["ProfessionalName"];

                        // 统一以米为单位
                        if (!GlobalVar.useLocalDB)
                        {
                            sItem = new CRailwayProject((string)dataReader["SerialNo"], professionalName, projectName, (string)dataReader["ShorName"],
                                                        Decimal.ToDouble((decimal)dataReader["Mileage_Start"]) * 1000, Decimal.ToDouble((decimal)dataReader["Mileage_End"]) * 1000,
                                                        (DateTime)dataReader["UpdateTime"], Decimal.ToDouble((decimal)dataReader["avgProgress"]), Decimal.ToDouble((decimal)dataReader["direction"]));
                        }
                        else
                        {
                            sItem = new CRailwayProject((string)dataReader["SerialNo"], professionalName, projectName, (string)dataReader["ShorName"],
                                                        (double)dataReader["Mileage_Start"] * 1000, (double)dataReader["Mileage_End"] * 1000,
                                                        (DateTime)dataReader["UpdateTime"], (double)dataReader["avgProgress"], (double)dataReader["direction"]);
                        }
                        mProjectList.Add(sItem);
                        if (projectCatCode.StartsWith("-1-42-26-"))
                        {
                            mBridgeList.Add(sItem);
                        }
                        else if (projectCatCode.StartsWith("-1-42-28-"))
                        {
                            mRoadList.Add(sItem);
                        }
                        else if (projectCatCode.StartsWith("-1-42-74-"))
                        {
                            mTunnelList.Add(sItem);
                        }
                        else if (projectCatCode.StartsWith("-1-43-33-"))
                        {
                            mStationList.Add(sItem);
                        }
                        else
                        {
                            mOtherList.Add(sItem);
                        }
                    }//(string)dataReader["UpdateTime"],
                    catch (System.Exception ex)
                    {
                        Console.WriteLine((string)dataReader["ProjectName"] + " invalid");
                    }
                }
                //System.Console.WriteLine("readok");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
            finally
            {
                //dataReader.Close();
                conn.Close();
            }

            #endregion
        }
示例#21
0
        /// <summary>
        /// 绘制分项工程进度
        /// </summary>
        /// <param name="myGraphics"></param>
        /// <param name="tunnel"></param>
        /// <param name="winHeight"> 隧道绘制宽度(像素),一般60</param>
        /// <param name="winWidth">窗口panel的宽度(像素),包围盒,用于判断是否该图形越界</param>
        /// <param name="pm">变换矩阵</param>
        /// <param name="scaleX">x方向上 里程长度 * scaleX = 像素长度</param>
        /// <param name="unitM">单位里程(米)</param>

        private bool draw_PrjFX(Graphics myGraphics, CRailwayProject prj, string prjType, float winHeight, float winWidth, Matrix pm, float scaleX, bool fxOnly = true, float unitM = 8)
        {
            bool  needDrawDetails = false;
            float prjLength       = (float)prj.Length;
            float prjPixelLength  = prjLength * scaleX;
            float done;

            bool  isReverse = prj.mMileage_End < prj.mMileage_Start;
            float sx, ex;

            if (isReverse)
            {
                sx = (float)prj.mMainMileageE;
                ex = (float)prj.mMainMileageS;
            }
            else
            {
                sx = (float)prj.mMainMileageS;
                ex = (float)prj.mMainMileageE;
            }


            PointF[] sd = { new PointF(0, 100), new PointF(0, 100) }; // 窗口
            sd[0].X = (float)sx;
            sd[1].X = (float)ex;
            pm.TransformPoints(sd);
            if (sd[1].X <0 || sd[0].X> winWidth)   // 如果桥梁不在绘制区域,返回false,也不需要绘制细节
            {
                return(needDrawDetails);
            }

            float unitPixelLength = unitM * scaleX;
            float startPixelX     = sd[0].X;
            float endPixelX       = sd[1].X;
            float actualPixelS    = Math.Max(startPixelX, 0);
            float actualPixelE    = Math.Min(endPixelX, winWidth); // 屏幕内的起始终止位置
            float unitHeight      = (winHeight / 3);

            Pen p = defaultPen;

            RectangleF areaf;
            float      sy = prjStartY + 25;

            // 1、绘制左右边界,上方线,以及工程名
            areaf = new RectangleF(actualPixelS, prjStartY, actualPixelE - actualPixelS, 20);
            if (prj.mAvgProgress > 0)
            {
                myGraphics.DrawLine(p, endPixelX, prjStartY, endPixelX, prjEndY);
                myGraphics.DrawLine(p, startPixelX, 47, endPixelX, 47);
                myGraphics.DrawLine(p, startPixelX, prjStartY, startPixelX, prjEndY);
                if (areaf.Width > 200)
                {
                    if (isReverse)
                    {
                        myGraphics.DrawString("<<< " + prj.ProjectName, defaultFont, Brushes.Black, areaf, centerFormat);
                    }
                    else
                    {
                        myGraphics.DrawString(prj.ProjectName + ">>>", defaultFont, Brushes.Black, areaf, centerFormat);
                    }
                }
                else if (areaf.Width > 20)
                {
                    myGraphics.DrawString(prjType, defaultFont, Brushes.Black, areaf, centerFormat);
                }
            }

            // 如果8米对应3个像素以内,逐条绘制分项工程
            if (fxOnly || unitPixelLength < 4)
            {
                if (!(prj.FXProgress == null || prj.FXProgress.Count == 0))
                {
                    for (int i = 0; i < 3; i++) //road.FXProgress.Count, FIXME 选3项绘制
                    {
                        int sIndex = prj.selectedFXid[i];
                        if (sIndex < 0)
                        {
                            continue;
                        }
                        CFXProj proj      = prj.FXProgress[sIndex];
                        int     lastIndex = proj.doneAmount.Count - 1;
                        done = (float)(proj.doneAmount[lastIndex] / proj.TotalAmount);
                        //areaf = new RectangleF(sx, sy, tunnelLength, unitHeight);
                        myGraphics.DrawRectangle(Pens.Black, startPixelX, sy, prjPixelLength, unitHeight);


                        if (isReverse)
                        {
                            myGraphics.FillRectangle(notDoneB, startPixelX, sy + 1, prjPixelLength * (1 - done), unitHeight - 2);
                            myGraphics.FillRectangle(backBrush[i], startPixelX + prjPixelLength * (1 - done) + 1, sy + 1, prjPixelLength * done, unitHeight - 2);
                        }
                        else
                        {
                            myGraphics.FillRectangle(backBrush[i], startPixelX, sy + 1, prjPixelLength * done, unitHeight - 2);
                            myGraphics.FillRectangle(notDoneB, startPixelX + prjPixelLength * done + 1, sy + 1, prjPixelLength * (1 - done), unitHeight - 2);
                        }


                        areaf = new RectangleF(actualPixelS, sy, actualPixelE - actualPixelS, unitHeight);
                        if (areaf.Width > 100)
                        {
                            myGraphics.DrawString(Math.Round(done, 3) * 100 + "%", defaultFont, Brushes.Black, areaf, centerFormat);
                        }
                        sy += unitHeight;
                    }
                }
                return(false);
            }

            needDrawDetails = true;
            return(needDrawDetails);
        }
示例#22
0
        public CTEProject(CRailwayProject p, CRailwayScene s, CTEScene ss)
            : base(s, ss)
        {
            proj = p;

            if (!proj.mIsValid)
            {
                return;
            }
            double lat, lon, z, dir;

            //double cx, cy;

            sgworld = new SGWorld66();
            double[] cVerticesArray = null;
            //double[] cVA2 = null;
            int count;

            proj.getSpecialPoint(1, out lon, out lat, out z, out dir);
            //double[] xx,yy,zz,ddir;

            //CoordinateConverter.LatLonOffest(lat, lon, dir, 90, 20, out cy, out cx);

            var cPos2 = sgworld.Creator.CreatePosition(lon, lat, 0, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, 0, -75, 0, 2000);

            //sgworld.Creator.CreateCircle(cPos2, 140, sgworld.Creator.CreateColor(127, 127, 127, 127), sgworld.Creator.CreateColor(127, 127, 127, 127), mGroupIDStatic);
            labelSign = sgworld.Creator.CreateTextLabel(cPos2, proj.ProjectName, CRWTEStandard.mLabelStyleL3, mGroupIDDynamic, "Prj|" + proj.ProjectName);
            //ilabel.Message = sgworld.Creator.CreateMessage();
            labelSign.ImageFileName = CGisDataSettings.gDataPath + @"Common\progress\Pie" + proj.AvgProgress + ".png";
            labelSign.Visibility.MaxVisibilityDistance = 20000;
            labelSign.Style.LineToGround = true;
            //labelSign.Message.MessageID = sgworld.Creator.CreateMessage(MsgTargetPosition.MTP_POPUP, proj.ToString(), MsgType.TYPE_TEXT, true).ID;

            if (proj.mAvgProgress < 0.01)
            {
                return;
            }

            //count = proj.getSubLine(out cVerticesArray);
            double[] xx, yy, zz;
            count          = proj.getMiddleLine(out xx, out yy, out zz);
            cVerticesArray = getVerArray(xx, yy, zz);
            //proj.getMiddleLine(out cVA2);

            if (count > 1)
            {
                polylineDone = sgworld.Creator.CreatePolylineFromArray(cVerticesArray, sgworld.Creator.CreateColor((int)(255 * proj.mAvgProgress), (int)(255 - 255 * proj.mAvgProgress), 0, 255),
                                                                       AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, mGroupIDDynamic, "Done" + proj.ProjectName);
                //sgworld.Creator.CreatePolylineFromArray(cVA2, sgworld.Creator.CreateColor((int)(255 ), (int)(255 ), 255, 255),
                //    AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, mGroupIDDynamic, "Middle" + proj.ProjectName);
                polylineDone.Spline = true;
                polylineDone.Visibility.MaxVisibilityDistance = 10000000;
                polylineDone.Visibility.MinVisibilityDistance = 100000;
                if (proj is CContBeam)
                {
                    polylineDone.LineStyle.Width = -5;
                }
                else
                {
                    polylineDone.LineStyle.Width = -2;
                }
            }
            //count = proj.getSubLine(out cVerticesArray);

            //polylineTodo = sgworld.Creator.CreatePolylineFromArray(cVerticesArray, sgworld.Creator.CreateColor(255, 255, 0, 255),
            //    AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, mGroupIDDynamic, "ToDo" + proj.ProjectName);
            //polylineTodo.Spline = true;
            //polylineTodo.Visibility.MaxVisibilityDistance = 10000000;
            //polylineTodo.Visibility.MinVisibilityDistance = 10;
            //polylineTodo.LineStyle.Width = -2;
        }
示例#23
0
        private void polylineMiddleLine(CRailwayProject rw, SGWorld66 sgworld, string branch, Dictionary <string, double> m)
        {
            ITerrainPolyline66 polyline1;
            ITerrainPolyline66 polyline2;
            ITerrainPolyline66 polyline3;
            ITerrainPolyline66 polyline4;
            IColor66           lineColor1 = sgworld.Creator.CreateColor(242, 174, 17, 255);
            IColor66           lineColor2 = sgworld.Creator.CreateColor(32, 183, 81, 255);
            IColor66           lineColor3 = sgworld.Creator.CreateColor(183, 9, 9, 255);
            IColor66           lineColor4 = sgworld.Creator.CreateColor(50, 50, 50, 255);

            double[] x, y, z, dir;
            int      count = mSceneData.mMiddleLines.getSubLineByDKCode(rw.Mileage_Start_Discription, rw.Mileage_End_Discription, 10, out x, out y, out z, out dir);

            double[] mArray1 = new double[count * 3];
            double[] mArray2 = new double[count * 3];
            double[] mArray3 = new double[count * 3];
            double[] mArray4 = new double[count * 3];
            for (int i = 0; i < count; i++)
            {
                mArray1[3 * i]     = x[i];
                mArray1[3 * i + 1] = y[i];
                mArray1[3 * i + 2] = z[i] + 10;

                mArray2[3 * i]     = x[i];
                mArray2[3 * i + 1] = y[i];
                mArray2[3 * i + 2] = z[i] + 20;

                mArray3[3 * i]     = x[i];
                mArray3[3 * i + 1] = y[i];
                mArray3[3 * i + 2] = z[i] + 30;

                mArray4[3 * i]     = x[i];
                mArray4[3 * i + 1] = y[i];
                mArray4[3 * i + 2] = z[i] + 40;
            }
            if (m.Count >= 4)
            {
                KeyValuePair <string, double> kvp = m.ElementAt(0);
                polyline1        = sgworld.Creator.CreatePolylineFromArray(mArray1, lineColor1, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, branch, rw.ProjectName + "-" + kvp.Key);
                polyline1.Spline = true;
                polyline1.Visibility.MaxVisibilityDistance = 10000000;
                polyline1.Visibility.MinVisibilityDistance = 150;
                polyline1.LineStyle.Width = 50.0;
                polyline1.Visibility.Show = true;
                polyline1.LineStyle.Color.SetAlpha(kvp.Value);

                kvp              = m.ElementAt(1);
                polyline2        = sgworld.Creator.CreatePolylineFromArray(mArray2, lineColor2, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, branch, rw.ProjectName + "-" + kvp.Key);
                polyline2.Spline = true;
                polyline2.Visibility.MaxVisibilityDistance = 10000000;
                polyline2.Visibility.MinVisibilityDistance = 150;
                polyline2.LineStyle.Width = 30.0;
                polyline2.Visibility.Show = true;
                polyline2.LineStyle.Color.SetAlpha(kvp.Value);
                kvp              = m.ElementAt(2);
                polyline3        = sgworld.Creator.CreatePolylineFromArray(mArray3, lineColor3, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, branch, rw.ProjectName + "-" + kvp.Key);
                polyline3.Spline = true;
                polyline3.Visibility.MaxVisibilityDistance = 10000000;
                polyline3.Visibility.MinVisibilityDistance = 150;
                polyline3.LineStyle.Width = 15.0;
                polyline3.Visibility.Show = true;
                polyline3.LineStyle.Color.SetAlpha(kvp.Value);
                kvp              = m.ElementAt(3);
                polyline4        = sgworld.Creator.CreatePolylineFromArray(mArray4, lineColor4, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, branch, rw.ProjectName + "-" + kvp.Key);
                polyline4.Spline = true;
                polyline4.Visibility.MaxVisibilityDistance = 10000000;
                polyline4.Visibility.MinVisibilityDistance = 150;
                polyline4.LineStyle.Width = 5;
                polyline4.Visibility.Show = true;
                polyline4.LineStyle.Color.SetAlpha(kvp.Value);
            }
        }