Beispiel #1
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);
            }
        }
Beispiel #2
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;
        }
Beispiel #3
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);
            }
        }
Beispiel #4
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);
        }