Ejemplo n.º 1
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();
                        }
                    }
                }
            }
        }