Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="g"></param>
        /// <param name="canvasWidth">画布宽度</param>
        /// <param name="centerMileage">中心里程</param>
        /// <param name="radiusMileage">里程半径</param>
        private void draw2DProjects(Graphics g, float canvasWidth, double centerMileage, double radiusMileage)
        {
            // 如果视点距离过近,视野半径只有20米,不再绘制
            if (radiusMileage < 10)
            {
                return;
            }
            g.DrawString("济青高铁", defaultFont, Brushes.Red, new PointF(canvasWidth - 100, Cap1StartY));

            //float titleHeight = 30;
            float scaleX;

            //float width = panel1.Size.Width;

            Matrix m = getTransM((float)centerMileage, (float)radiusMileage, canvasWidth, out scaleX, 50);

            //Matrix im = getInvTransM((float)centerMileage, (float)radiusMileage, canvasWidth, 50);

            // 左右50个像素空白
            PointF[] sd        = { new PointF(50, MileageAxisStartY), new PointF(canvasWidth / 2, MileageAxisStartY), new PointF(canvasWidth - 50, MileageAxisStartY) }; // 窗口
            double[] sdMileage = { centerMileage - radiusMileage, centerMileage, centerMileage + radiusMileage };
            //im.TransformPoints(sdMileage);
            string dkcode;
            double dkm;

            RectangleF areaf;


            //绘制里程坐标
            g.DrawLine(roundPen, sd[0], sd[1]);
            g.DrawLine(roundPen, sd[1], sd[2]);
            string str;

            // 写里程坐标
            for (int i = 0; i < 3; i++)
            {
                mRWScene.mMainPath.getDKCodebyPathMileage(sdMileage[i], out dkcode, out dkm);

                str = CRailwayLineList.CombiDKCode(dkcode, dkm);
                if (i == 1)
                {
                    str = "当前里程" + str;
                    if (string.IsNullOrEmpty(mDesc))
                    {
                        areaf = new RectangleF(sd[i].X - 60, MileageAxisStartY + 5, 250, 20);
                    }
                    else
                    {
                        str  += "。 下一目标:" + mDesc;
                        areaf = new RectangleF(sd[i].X - 60, MileageAxisStartY + 5, 520, 20);
                    }
                    g.DrawString(str, defaultFont, Brushes.Black, areaf);
                }
                else
                {
                    areaf = new RectangleF(sd[i].X - 40, MileageAxisStartY + 5, 80, 20);
                    g.DrawString(str, defaultFont, Brushes.Black, areaf, centerFormat);
                }
            }

            //myGraphics.Transform = m;
            foreach (CRailwayTunnel t in mRWScene.mTunnelList)
            {
                draw_TunnelFX(g, t, 60, canvasWidth, m, scaleX);
            }
            foreach (CRailwayRoad r in mRWScene.mRoadList)
            {
                draw_RoadFX(g, r, 60, canvasWidth, m, scaleX);
            }
            foreach (CRailwayBridge b in mRWScene.mBridgeList)
            {
                draw_BridgeFX(g, b, 60, canvasWidth, m, scaleX);
            }
            foreach (CContBeam cb in mRWScene.mContBeamList)
            {
                draw_ContBeam(g, cb, 60, canvasWidth, m, scaleX);
            }
            foreach (CHotSpot hs in mRWScene.mConsSpotList)
            {
                draw_ConsSpot(g, hs, 60, canvasWidth, m, scaleX);
            }
            //draw_TunnelFX(myGraphics, ls, ld, width, m, 5000, -1000, 100,  scaleX);
            //draw_TunnelFX(myGraphics, ls, ld, width, m, 5000, 1500, 10,  scaleX);
            //draw_TunnelFX(myGraphics, ls, ld, width, m, 7500, -1000, 100, scaleX);
            //PointF[] sd = { new PointF(4000, 100), new PointF(6000, 100) }; // 窗口
            //m.TransformPoints(sd);
            //Console.WriteLine(sd[0]);
            //Console.WriteLine(sd[1]);
            //im.TransformPoints(sd);
            //Console.WriteLine(sd[0]);
            //Console.WriteLine(sd[1]);

            //float scale = wh / 2 / vw;
            //Matrix rm = new Matrix();
            //rm.Scale(2, 1);
            //rm.Translate(-50, -150);
            //rm.TransformPoints(sd);
        }
Beispiel #2
0
        private void Sgworld_OnObjectAction(string ObjectID, IAction66 Action)
        {
            double d;

            if (Action.Code == ActionCode.AC_WAYPOINT_REACHED)
            {
                string strObjID = sgworld.ProjectTree.GetItemName(ObjectID);

                if (strObjID.Equals("TrainObj0"))
                {
#if DEBUG
                    Console.WriteLine("计数:" + mTrainWayPointCount + " of " + mTrainWayPointTotal);
#endif

                    mTrainWayPointCount = Math.Min(mTrainWayPointCount, mTrainWayPointTotal - 1);

                    if (mTrainWayPointCount % 15 == 14)
                    {
                        RandomFollow();
                    }

                    //double dis = CoordinateConverter.getUTMDistance(mDynamicTrain[0].Position.X, mDynamicTrain[0].Position.Y, mNavigationList[mNavNextIndex].Longitude, mNavigationList[mNavNextIndex].Latitude);
                    //根据GPS确定里程,
                    mSceneData.mMainPath.getPathMileagebyGPS(rx[mTrainWayPointCount], ry[mTrainWayPointCount], out mMainMileage, out d);
                    //mDynamicTrain[0].Waypoints[mTrainWayPointTotal- mTrainWayPointCount]
                    //mCurrentMileage = rm[mTrainWayPointCount];
                    mDistoNext = rm[mTrainWayPointTotal - 1] - rm[mTrainWayPointCount];

//#if DEBUG
//                    if (Math.Abs(mDistoNext - dis) > 100)
//                        Console.WriteLine("Something wrong in " + mTrainWayPointCount + " dis " + mDistoNext + " vs " + dis);
//#endif

                    string dkcode;
                    double dkm;
                    mSceneData.mMainPath.getDKCodebyPathMileage(mMainMileage, out dkcode, out dkm);

                    string str = mNavigationList[mNavNextIndex].ObjectRef.ToString();

                    // 更新显示面板
                    panelInfo.mtotalProj   = mNavigationList.Count;
                    panelInfo.mcurrentProj = mNavNextIndex;
                    panelInfo.mdkCode      = CRailwayLineList.CombiDKCode(dkcode, dkm);
                    panelInfo.mdistance    = Math.Round(mDistoNext, 2);
                    panelInfo.mnextProj    = str;
                    panelInfo.mconsLog     = mSceneData.GetStrConsByGPS(rx[mTrainWayPointCount], ry[mTrainWayPointCount], 5000);
                    panelInfo.updatePanel();

                    // 更新2D进度
                    panel2D.update2DPanel(mMainMileage, 500);

                    if (mDistoNext < 500) // 可能
                    {
                        ReachOnePlace();

                        //double dis = CoordinateConverter.getUTMDistance(mDynamicTrain[0].Position.X, mDynamicTrain[0].Position.Y, mNavigationList[mNavIndex + 1].Longitude, mNavigationList[mNavIndex + 1].Latitude);
//#if DEBUG
//                        Console.WriteLine("计数:" + mTrainWayPointCount + " of " + mTrainWayPointTotal + "count dis "+ mDistoNext + "\t gis dis" + dis);
//#endif
//                        if (mTrainWayPointTotal - mTrainWayPointCount <= 1)
//                        {
//#if DEBUG

//                            ModelInfo.Helper.LogHelper.WriteLog(mNavIndex + ":train到达 " + mNavigationList[mNavIndex].ObjectRef.ToString() );
//#endif
//                            //for (int j = 0; j < mDynamicTrain.Length; j++)
//                            //{
//                            //    mDynamicTrain[j].Pause = true;
//                            //}

//                            //mDistoNext = 0;

//                        }
                    }
                    mTrainWayPointCount++;
                }
                else if (strObjID.Equals("VirtualObj"))
                {
                    mVirtualWayPointCount--;

                    if (isOnOneWay && mVirtualOnly)
                    {
                        double dis = CoordinateConverter.getUTMDistance(mVirtualObj.Position.X, mVirtualObj.Position.Y, mNavigationList[mNavNextIndex].Longitude, mNavigationList[mNavNextIndex].Latitude);

                        if (dis < 100 || mVirtualWayPointCount == 0)
                        {
#if DEBUG
                            ModelInfo.Helper.LogHelper.WriteLog(mNavIndex + "virtual到达 " + mNavigationList[mNavNextIndex].ObjectRef.ToString() + " 距离为 " + dis);
#endif
                            //sgworld.OnObjectAction -= Sgworld_OnObjectAction;
                            ReachOnePlace();
                        }
                    }
                }
            }
        }