Example #1
0
        /// <summary>
        /// Find ALL the GUI stuff needed for the sensor GUI to work
        /// </summary>
        private void FindElements()
        {
            tabStateMachine = Auxiliary.FindGameObject("Tabs").GetComponent <StateMachine>();

            canvas        = GameObject.Find("Canvas");
            sensorManager = GameObject.Find("SensorManager").GetComponent <SensorManager>();
            dynamicCamera = GameObject.Find("Main Camera").GetComponent <DynamicCamera>();
            toolkit       = GetComponent <Toolkit>();

            //For Sensor position and attachment configuration
            configureSensorPanel = Auxiliary.FindObject(canvas, "SensorConfigurationPanel");
            sensorConfigHeader   = Auxiliary.FindObject(configureSensorPanel, "SensorConfigHeader");

            //For Sensor angle configuration
            sensorAnglePanel = Auxiliary.FindObject(canvas, "SensorAnglePanel");
            xAngleEntry      = Auxiliary.FindObject(sensorAnglePanel, "xAngleEntry");
            yAngleEntry      = Auxiliary.FindObject(sensorAnglePanel, "yAngleEntry");
            zAngleEntry      = Auxiliary.FindObject(sensorAnglePanel, "zAngleEntry");

            //For range configuration
            sensorRangePanel = Auxiliary.FindObject(canvas, "RangePanel");
            RangeEntry       = Auxiliary.FindObject(sensorRangePanel, "RangeEntry");

            sensorOutputPanel = Auxiliary.FindObject(canvas, "SensorOutputBorder");
            robotCameraGUI    = GetComponent <RobotCameraGUI>();
        }
Example #2
0
        /// <summary>
        /// Start the sensor configuration
        /// </summary>
        public void StartConfiguration()
        {
            if (configureSensorPanel.activeSelf)
            {
                configureSensorPanel.SetActive(false);
            }
            if (currentSensor.sensorType.Equals("Gyro"))
            {
                configureSensorPanel = Auxiliary.FindObject(canvas, "GyroConfigurationPanel");
                sensorConfigHeader   = Auxiliary.FindObject(configureSensorPanel, "SensorConfigHeader");
            }
            else if (configureSensorPanel.name.Equals("GyroConfigurationPanel"))
            {
                configureSensorPanel = Auxiliary.FindObject(canvas, "SensorConfigurationPanel");
                sensorConfigHeader   = Auxiliary.FindObject(configureSensorPanel, "SensorConfigHeader");
            }
            HideInvisibleSensors();
            currentSensor.ChangeVisibility(true);
            SyncHideSensorButton();
            configureSensorPanel.SetActive(true);
            sensorConfigHeader.GetComponentInChildren <Text>().text = currentSensor.name;

            if (preConfigState == null)
            {
                preConfigState = UnityEngine.Camera.main.transform.GetComponent <DynamicCamera>().ActiveState;
            }
            dynamicCamera.SwitchCameraState(new DynamicCamera.ConfigurationState(dynamicCamera, currentSensor.gameObject));
        }
            ///// <summary>
            ///// 构造函数,自定义椭球
            ///// </summary>
            ///// <param name="a">椭球元素a</param>
            ///// <param name="b">椭球元素b</param>
            // public CoordinateTrans(double a, double b)
            //{
            //    ep = new Ellipsoid(a, b);
            //}

            /// <summary>
            /// 大地到子午面坐标系
            /// </summary>
            /// <param name="B">大地纬度</param>
            /// <returns></returns>
            public _2D_Point B2Xy(double B)
            {
                double x = ep.data.a * Math.Cos(B) / Auxiliary.GetW(ep.data.e_2, B),
                       y = ep.data.a / Auxiliary.GetV(ep.data.e2_2, B) * Math.Sin(B);

                return(new _2D_Point(x, y));
            }
Example #4
0
        // Use this for initialization
        private void Start()
        {
            canvas           = GameObject.Find("Canvas");
            sensorManagerGUI = GetComponent <SensorManagerGUI>();

            //Ruler Objects
            rulerStartPoint = GameObject.Find("RulerStartPoint");
            rulerEndPoint   = GameObject.Find("RulerEndPoint");
            rulerWindow     = Auxiliary.FindObject(canvas, "RulerPanel");
            rulerText       = Auxiliary.FindObject(canvas, "RulerText").GetComponent <Text>();
            rulerXText      = Auxiliary.FindObject(canvas, "RulerXAxisText").GetComponent <Text>();
            rulerYText      = Auxiliary.FindObject(canvas, "RulerYAxisText").GetComponent <Text>();
            rulerZText      = Auxiliary.FindObject(canvas, "RulerZAxisText").GetComponent <Text>();

            //Stopwatch Objects
            stopwatchWindow          = Auxiliary.FindObject(canvas, "StopwatchPanel");
            stopwatchText            = Auxiliary.FindObject(canvas, "StopwatchText").GetComponent <Text>();
            stopwatchStartButtonText = Auxiliary.FindObject(canvas, "StopwatchStartText").GetComponent <Text>();

            //Stats Objects
            statsWindow          = Auxiliary.FindObject(canvas, "StatsPanel");
            speedEntry           = Auxiliary.FindObject(statsWindow, "SpeedEntry");
            speedUnit            = Auxiliary.FindObject(speedEntry, "Unit").GetComponent <Text>();
            accelerationEntry    = Auxiliary.FindObject(statsWindow, "AccelerationEntry");
            accelerationUnit     = Auxiliary.FindObject(accelerationEntry, "Unit").GetComponent <Text>();
            angularVelocityEntry = Auxiliary.FindObject(statsWindow, "AngularVelocityEntry");
            weightEntry          = Auxiliary.FindObject(statsWindow, "WeightEntry");
            weightUnit           = Auxiliary.FindObject(weightEntry, "Unit").GetComponent <Text>();
        }
            private Geodetic_Point Iteration(_3D_Point XYZ)
            {
                _3D_Point blh = new _3D_Point();

                //var l = _2D_Point.Get_PAngle(new _2D_Point(0, 0), new _2D_Point(XYZ.X, XYZ.Y));
                blh.Y = Auxiliary.Get_L(XYZ.X, XYZ.Y);
                double dis = _2D_Point.Get_Norm(new _2D_Point(0, 0), new _2D_Point(XYZ.X, XYZ.Y));
                double t0  = XYZ.Z / dis,
                       p   = ep.data.c * ep.data.e_2 / dis,
                       k   = 1 + ep.data.e2_2,
                       t1  = t0,
                       t2  = t0;

                do
                {
                    t1 = t2;
                    t2 = t0 + p * t1 / Math.Sqrt(k + t1 * t1);
                }while (Math.Abs(Angle.ChangeToAngle(t2 - t1).Miao) > 0.0001);
                blh.X = Angle.ChangeToAngle(t2 = Math.Atan(t2)).ChangeToRad();
                double W  = Auxiliary.GetW(ep.data.e_2, t2),
                       N  = ep.data.a / W;
                double h1 = XYZ.Z - N * (1 - ep.data.e_2) * Math.Sin(t2),
                       h2 = dis - N * Math.Cos(t2);
                double h  = Math.Sqrt(h1 * h1 + h2 * h2);

                if (h1 / Math.Sin(t2) < 0 || h2 / Math.Cos(t2) < 0)
                {
                    h = -h;
                }
                blh.Z = h;
                return(new Geodetic_Point(false, blh.X, blh.Y, blh.Z));
            }
            private Geodetic_Point Direct(_3D_Point XYZ)
            {
                double e_2  = ep.data.e_2,
                       e2_2 = ep.data.e2_2,
                       a    = ep.data.a,
                       b    = ep.data.b;
                double r    = _2D_Point.Get_Norm(new _2D_Point(0, 0), new _2D_Point(XYZ.X, XYZ.Y)),
                       u0   = Math.Atan(XYZ.Z / r * Math.Sqrt(1 + e2_2)),
                       tgB  = (XYZ.Z + b * e2_2 * Math.Sin(u0) * Math.Sin(u0)) /
                              (r - a * e_2 * Math.Cos(u0) * Math.Cos(u0)),
                       B      = Math.Atan(XYZ.Z / r + a * e_2 * tgB / r / Math.Sqrt(1 + (1 - e_2) * tgB * tgB));
                _3D_Point blh = new _3D_Point();

                //blh.X = Angle.ChangeToAngle(B).ChangeToDouble();
                blh.X = B;

                //var l = _2D_Point.Get_PAngle(new _2D_Point(0, 0), new _2D_Point(XYZ.X, XYZ.Y));
                //blh.Y = l.ChangeToDouble();
                blh.Y = Auxiliary.Get_L(XYZ.X, XYZ.Y);

                double W  = Auxiliary.GetW(e_2, B),
                       N  = a / W;
                double h1 = XYZ.Z - N * (1 - e_2) * Math.Sin(B),
                       h2 = r - N * Math.Cos(B);
                double h  = Math.Sqrt(h1 * h1 + h2 * h2);

                if (h1 / Math.Sin(B) < 0 || h2 / Math.Cos(B) < 0)
                {
                    h = -h;
                }
                blh.Z = h;
                return(new Geodetic_Point(false, blh.X, blh.Y, blh.Z));
            }
Example #7
0
        /// <summary>
        /// Help button and menu text
        /// </summary>
        public void OnHelpButtonPressed()
        {
            helpMenu.SetActive(true);

            // To change the help menu texts within the simulator, most are configured by calling the
            // the following component.
            helpBodyText.GetComponent <Text>().text = "\n\nTutorials: bxd.autodesk.com" +
                                                      "\n\nHome Tab: Main simulator functions" +
                                                      "\n\nDriver Practice Tab: Gamepiece setup and interaction" +
                                                      "\n\nScoring Tab: Match play" +
                                                      "\n\nSensors Tab: Robot camera and sensors";

            Auxiliary.FindObject(helpMenu, "Type").GetComponent <Text>().text = "MainToolbar";
            overlay.SetActive(true);
            tabs.transform.Translate(new Vector3(300, 0, 0));
            foreach (Transform t in toolbar.transform)
            {
                if (t.gameObject.name != "HelpButton")
                {
                    t.Translate(new Vector3(300, 0, 0));
                }
                else
                {
                    t.gameObject.SetActive(false);
                }
            }

            if (PlayerPrefs.GetInt("analytics") == 1)
            {
                Analytics.CustomEvent("Main Toolbar Help Button Pressed", new Dictionary <string, object> //for analytics tracking
                {
                });
            }
        }
Example #8
0
        /// <summary>
        /// Reset robot dropdown callback. Note: Dropdowns register with "On...Clicked"
        /// naming conventions.
        /// </summary>
        /// <param name="i"></param>
        public void OnResetRobotDropdownClicked(int i)
        {
            switch (i)
            {
            case 1:
                State.BeginRobotReset();
                State.EndRobotReset();
                resetDropdown.GetComponent <Dropdown>().value = 0;
                break;

            case 2:
                GameObject.Destroy(GameObject.Find("Dropdown List"));
                EndOtherProcesses();
                resetDropdown.GetComponent <Dropdown>().value = 0;
                State.BeginRobotReset();
                break;

            case 3:
                Auxiliary.FindObject(canvas, "ResetRobotDropdown").SetActive(false);
                Auxiliary.FindObject(canvas, "LoadingPanel").SetActive(true);
                SceneManager.LoadScene("Scene");
                resetDropdown.GetComponent <Dropdown>().value = 0;
                break;
            }
        }
Example #9
0
        public void OpenGoalManager()
        {
            InitializeDisplay();
            goalWindow.SetActive(true);
            Auxiliary.FindObject(goalWindow, "AddGoalButton").GetComponentInChildren <Text>().text = "New " + color + " Goal";
            //set goal color
            if (color.Equals("Red"))
            {
                redButton.GetComponent <Button>().image.color   = Color.red;
                redButton.GetComponent <Button>().interactable  = false;
                blueButton.GetComponent <Button>().interactable = true;
                blueButton.GetComponent <Button>().image.color  = Color.black;
            }
            else
            {
                blueButton.GetComponent <Button>().image.color  = Color.blue;
                blueButton.GetComponent <Button>().interactable = false;
                redButton.GetComponent <Button>().interactable  = true;
                redButton.GetComponent <Button>().image.color   = Color.black;
            }
            CreateTabs();

            AnalyticsManager.GlobalInstance.LogEventAsync(AnalyticsLedger.EventCatagory.ScoringTab,
                                                          AnalyticsLedger.EventAction.Clicked,
                                                          "Score Zones",
                                                          AnalyticsLedger.getMilliseconds().ToString());
        }
Example #10
0
        public JsonResult UpdateUserInfo(int userId, string realName, string phone, string idCard, string bankName, string bankNumber, string pwd)
        {
            bool     result   = false;
            string   msg      = "修改失败!";
            UserInfo userInfo = new UserInfo();

            userInfo = _userBll.GetUserInfoById(userId);
            if (userInfo != null)
            {
                userInfo.Phone      = phone;
                userInfo.RealName   = realName;
                userInfo.BankName   = bankName;
                userInfo.BankNumber = bankNumber;
                if (string.IsNullOrEmpty(pwd))
                {
                    result = false;
                    msg    = "密码不能为空!";
                }
                if (pwd != userInfo.Pwd)
                {
                    userInfo.Pwd = Auxiliary.Md5Encrypt(pwd);
                }


                result = _userBll.UpdateUserInfo(userInfo);
            }
            if (result)
            {
                msg = "修改成功";
            }
            return(Json(new { result = result, msg = msg }));
        }
Example #11
0
 void Update()
 {
     if (index == Globe.selectMailIndex)
     {
         iconSprite.spriteName = "banzixuanzhong";
     }
     else
     {
         iconSprite.spriteName = "";
     }
     if (index == 0)
     {
         mailStateIcon.spriteName = "yidu";
     }
     if (mailItem.EndTime > Auxiliary.GetNowTime())
     {
         TimeSpan residueTime = PropertyManager.ConvertIntDateTime(mailItem.EndTime) - PropertyManager.ConvertIntDateTime(Auxiliary.GetNowTime());
         if (residueDay > residueTime.Days)
         {
             residueDay = residueTime.Days;
             if (residueDay <= 0)
             {
                 deleteDate.text = "1天后过期";
             }
             else
             {
                 deleteDate.text = residueDay + "天后过期";
             }
         }
     }
     else//邮件结束时间大于当前系统时间删除本地邮件 服务器处理方式是:再次去获取全部邮件的时候才触发删除到期邮件
     {
         playerData.GetInstance().RemoveSingleMailItem(mailItem.Id);
     }
 }
Example #12
0
        /// <summary>
        /// Find all robot camera related GUI elements in the canvas
        /// </summary>
        private void FindGUIElements()
        {
            canvas           = GameObject.Find("Canvas");
            sensorManagerGUI = GetComponent <SensorManagerGUI>();

            //For robot camera view window
            robotCameraView       = Resources.Load("Images/Old Assets/RobotCameraView") as RenderTexture;
            robotCameraViewWindow = Auxiliary.FindObject(canvas, "RobotCameraPanelBorder");

            //For robot camera manager
            robotCameraListObject = GameObject.Find("RobotCameraList");
            robotCameraManager    = robotCameraListObject.GetComponent <RobotCameraManager>();

            //For camera indicator
            if (CameraIndicator == null)
            {
                CameraIndicator = Auxiliary.FindObject(robotCameraListObject, "CameraIndicator");
            }

            //For camera position and attachment configuration
            configureCameraPanel       = Auxiliary.FindObject(canvas, "CameraConfigurationPanel");
            configureRobotCameraButton = Auxiliary.FindObject(canvas, "CameraConfigurationButton");

            //For camera angle configuration
            cameraAnglePanel = Auxiliary.FindObject(canvas, "CameraAnglePanel");
            xAngleEntry      = Auxiliary.FindObject(cameraAnglePanel, "xAngleEntry1");
            yAngleEntry      = Auxiliary.FindObject(cameraAnglePanel, "yAngleEntry1");
            zAngleEntry      = Auxiliary.FindObject(cameraAnglePanel, "zAngleEntry1");

            //For field of view configuration
            cameraFOVPanel = Auxiliary.FindObject(configureCameraPanel, "CameraFOVPanel");
            FOVEntry       = Auxiliary.FindObject(cameraFOVPanel, "FOVEntry");
        }
Example #13
0
        void SetGoalKeepScored(int id, bool value)
        {
            Goal goal;

            if (color.Equals("Red"))
            {
                goal = redGoals[gamepieceIndex][id].GetComponent <Goal>();
                if (!value && goal.Sticky)
                {
                    goal.Sticky = false;
                    Auxiliary.FindObject(goalElements[id], "Sticky").GetComponent <Toggle>().isOn = false;
                }
                goal.SetKeepScored(value);
            }
            else
            {
                goal = blueGoals[gamepieceIndex][id].GetComponent <Goal>();
                if (!value && goal.Sticky)
                {
                    goal.Sticky = false;
                    Auxiliary.FindObject(goalElements[id], "Sticky").GetComponent <Toggle>().isOn = false;
                }
                goal.SetKeepScored(value);
            }
            WriteGoals();
        }
Example #14
0
 public void Save(Auxiliary auxiliary)
 {
     Execute(new AuxiliarySaveRequest {
         Content = auxiliary
     });
     DataFactory.Instance.GetCacheHashtable().Remove(CacheHashkey.AuxiliaryList);
 }
Example #15
0
        /// <summary>
        /// Toggles between quick reset and reset spawnpoint
        /// </summary>
        /// <param name="i"></param>
        public void ChooseResetMode(int i)
        {
            switch (i)
            {
            case 1:
                State.BeginRobotReset();
                State.EndRobotReset();
                resetDropdown.GetComponent <Dropdown>().value = 0;
                break;

            case 2:
                EndOtherProcesses();
                DynamicCamera.ControlEnabled = true;
                State.BeginRobotReset();
                resetDropdown.GetComponent <Dropdown>().value = 0;
                break;

            case 3:
                Auxiliary.FindObject(GameObject.Find("Reset Robot Dropdown"), "Dropdown List").SetActive(false);
                Auxiliary.FindObject(GameObject.Find("Canvas"), "LoadingPanel").SetActive(true);
                SceneManager.LoadScene("Scene");
                resetDropdown.GetComponent <Dropdown>().value = 0;
                break;
            }
        }
Example #16
0
        public override float ReturnOutput()
        {
            //Raycasting begins, draw a ray from emitter to the receiver
            Ray ray = new Ray(Emitter.transform.position, Emitter.transform.forward);

            BulletSharp.Math.Vector3 fromUltra  = ray.origin.ToBullet();
            BulletSharp.Math.Vector3 toCollider = ray.GetPoint(10).ToBullet();

            Vector3 toColliderUnity = toCollider.ToUnity();

            //Callback returns all hit point results in order to avoid non colliders interfere with the ray test
            AllHitsRayResultCallback raysCallback = new AllHitsRayResultCallback(fromUltra, toCollider);

            //Retrieves bullet physics world and does a ray test with the given coordinates and updates the callback object
            BPhysicsWorld world = BPhysicsWorld.Get();

            world.world.RayTest(fromUltra, toCollider, raysCallback);
            List <BulletSharp.Math.Vector3> colliderPositions = raysCallback.HitPointWorld;

            BulletSharp.Math.Vector3 colliderPosition = BulletSharp.Math.Vector3.Zero;

            float distanceToCollider = 0;

            //Set the initial distance as the distance between emitter and receiver
            if (main != null && main.IsMetric)
            {
                distanceToCollider = sensorOffset;
            }
            else
            {
                distanceToCollider = Auxiliary.ToFeet(sensorOffset);
            }

            //Loop through all hitpoints (exclude the origin), if there is at least one hitpoint less than the distance between two sensors,
            //something should block the beam between emitter and receiver
            foreach (BulletSharp.Math.Vector3 pos in colliderPositions)
            {
                if ((pos - fromUltra).Length < distanceToCollider && !pos.Equals(BulletSharp.Math.Vector3.Zero))
                {
                    distanceToCollider = (pos - fromUltra).Length;
                    colliderPosition   = pos;
                }
            }
            //Again if the line connects to the middle of the field nothing is blocking the beam
            Debug.DrawLine(fromUltra.ToUnity(), colliderPosition.ToUnity(), Color.blue);

            if (distanceToCollider < sensorOffset)
            {
                //Something is there
                state = "Broken";
                return(1);
            }
            else
            {
                //Nothing in between
                state = "Unbroken";
                return(0);
            }
        }
Example #17
0
 /// <summary>
 /// Increment score by point value
 /// </summary>
 private void UpdateScore()
 {
     if (score == null)
     {
         score = Auxiliary.FindObject(Auxiliary.FindObject(Auxiliary.FindObject("Canvas"), "ScorePanel"), color + "ScoreText").GetComponent <Text>();
     }
     score.text = (int.Parse(score.GetComponent <Text>().text.ToString()) + pointValue).ToString();
 }
Example #18
0
    public bool AddAuxiliary(Auxiliary auxiliary)
    {
        auxiliaries.Add(auxiliary);
        AddObservers(auxiliary);


        return(true);
    }
Example #19
0
 /// <summary>
 /// Refreshes the position of the move arrows with the position offsets.
 /// </summary>
 public void RefreshMoveArrows()
 {
     for (int i = 0; i < moveArrows.Length; i++)
     {
         moveArrows[i].transform.parent        = Auxiliary.FindObject(gameObject, DPMDataHandler.dpmodes[i].releaseNode).transform;
         moveArrows[i].transform.localPosition = DPMDataHandler.dpmodes[i].releasePosition;
     }
 }
 private void Start()
 {
     canvas                = GameObject.Find("Canvas");
     gameDataInput         = Auxiliary.FindObject(canvas, "InputField").GetComponent <InputField>();
     emuDriverStationPanel = Auxiliary.FindObject(canvas, "EmulationDriverStation");
     runButton             = Auxiliary.FindObject(canvas, "StartRobotCodeButton");
     GameData();
 }
Example #21
0
 /// <summary>
 /// Toggle between showing sensor outputs and hiding them
 /// </summary>
 public void ToggleSensorOutput()
 {
     if (sensorManager.GetActiveSensors().Count > 0)
     {
         sensorOutputPanel.SetActive(!sensorOutputPanel.activeSelf);
     }
     Auxiliary.FindObject(Auxiliary.FindObject(canvas, "SensorToolbar"), "ShowOutputsButton").GetComponentInChildren <Text>().text = sensorOutputPanel.activeSelf ? "Hide Outputs" : "Show Outputs";
 }
Example #22
0
    public TimeSpan CheckTimeNowadays(string givenTime, bool isyMd)
    {
        DateTime currentDate = TimeManager.Instance.ConvertIntDateTime(Auxiliary.GetNowTime());
        DateTime nextDate    = DateTime.ParseExact(givenTime, isyMd ? "yyMMdd" : "yyMMddHHmmss", new System.Globalization.CultureInfo("zh-CN", true));
        TimeSpan sp          = currentDate - nextDate;

        return(sp);
    }
Example #23
0
        /// <summary>
        /// Establishes references to required <see cref="GameObject"/>s and
        /// sets their properties.
        /// </summary>
        public override void Start()
        {
            checkBox       = Auxiliary.FindGameObject("Checkbox");
            continueButton = Auxiliary.FindGameObject("ContinueButton");

            continueButton.SetActive(isFirstState);
            checkBox.GetComponent <Toggle>().isOn = PlayerPrefs.GetInt("ShowDisclaimer", 1) == 1 ? true : false;
        }
Example #24
0
        /// <summary>
        /// TODO 保存容量與出貨料號關係
        /// </summary>
        /// <param name="ctRelCarton"></param>
        /// <returns></returns>
        public bool saveCapacityRelCus(CapacityRelCus capacityRelCus)
        {
            capacityRelCus.Uuid       = Auxiliary.Get_UUID();
            capacityRelCus.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            capacityRelCus.OpUser     = Auxiliary.loginName;

            return(capacityDao.saveCapacityRelCus(capacityRelCus));
        }
        /// <summary>
        /// Refreshes the position of the move arrows with the position offsets.
        /// </summary>
        public void RefreshMoveArrows()
        {
            dp = dpmRobot.GetDriverPractice(FieldDataHandler.gamepieces[gamepieceIndex]);
            GameObject releaseNode = Auxiliary.FindObject(dpmRobot.gameObject, dp.releaseNode);

            moveArrows.transform.parent        = releaseNode.transform;
            moveArrows.transform.localPosition = dp.releasePosition;
        }
Example #26
0
 /// <summary>
 /// Change the sensor range
 /// </summary>
 /// <param name="distance"></param>
 /// <param name="isEditing"></param>
 public override void SetSensorRange(float distance, bool isEditing)
 {
     if (isEditing && !main.IsMetric)
     {
         distance = Auxiliary.ToMeter(distance);
     }
     MaxRange = distance;
 }
            /// <summary>
            /// 高斯引数法反算
            /// </summary>
            /// <param name="ge">已知元素</param>
            public void GaussInverse(GeodeticElement ge)
            {
                double Bm      = Methods.Average(ge.Br1, ge.Br2),
                       delta_B = ge.Br2 - ge.Br1,
                       delta_L = ge.Lr2 - ge.Lr1,
                       Vm      = Auxiliary.GetV(ep.data.e2_2, Bm),
                       Nm      = Auxiliary.GetN(ep.data.a, ep.data.e_2, Bm),
                       tm      = Auxiliary.Get_t(Bm),
                       tm2     = tm * tm,
                       yita_2  = Auxiliary.GetYita2(ep.data.e2_2, Bm),
                       cos_Bm  = Math.Cos(Bm),
                       cos_Bm2 = cos_Bm * cos_Bm;

                double r01 = Nm * cos_Bm,
                       r21 = r01 / 24 / Math.Pow(Vm, 4) * (1 + yita_2 - 9 * yita_2 * tm2 + yita_2 * yita_2),
                       r03 = -r01 / 24 * cos_Bm2 * tm2;

                double s10 = Nm / Vm / Vm,
                       s12 = -s10 * cos_Bm2 / 24 * (2 + 3 * tm2 + 2 * yita_2 * tm2),
                       s30 = Nm / Math.Pow(Vm, 6) / 8 * (yita_2 - tm2 * yita_2 + yita_2 * yita_2);

                double t01 = tm * cos_Bm,
                       t21 = t01 / 24 / Math.Pow(Vm, 4) * (2 + 7 * yita_2 + 9 * tm2 * yita_2 + 5 * yita_2 * yita_2),
                       t03 = t01 * cos_Bm2 / 24 * (2 + tm2 + 2 * yita_2);

                double S_sinAm = r01 * delta_L + r21 * delta_B * delta_B * delta_L + r03 * Math.Pow(delta_L, 3),
                       S_cosAm = s10 * delta_B + s12 * delta_B * delta_L * delta_L + s30 * Math.Pow(delta_B, 3),
                       delta_A = t01 * delta_L + t21 * delta_B * delta_B * delta_L + t03 * Math.Pow(delta_L, 3);
                //S_sinAm1=S_sinAm,S_cosAm1=S_cosAm,delta_A1=delta_A;

                double Am = _2D_Point.Get_PAngle(new _2D_Point(0, 0), new _2D_Point(S_cosAm, S_sinAm)).ChangeToRad();

                //Am1

                //do
                //{
                //    S_sinAm = S_sinAm1;
                //    S_cosAm = S_cosAm1;
                //    Am = Am1;

                //    S_sinAm1 = delta_L * Nm * cos_Bm - S_sinAm / 24 / Nm / Nm * (S_sinAm * S_sinAm * tm2 - S_cosAm * S_cosAm * (1 + yita_2 - 9 * yita_2 * tm2 + yita_2 * yita_2));
                //    S_cosAm1 = delta_B * Nm / Vm / Vm - S_cosAm1 / 24 / Nm / Nm * (S_sinAm1 * S_sinAm1 * (2 + 3 * tm2 + 2 * yita_2 * tm2) + 3 * yita_2 * S_cosAm * S_cosAm1 * (1 + yita_2 - tm2 + 4 * tm2 * yita_2));
                //    Am1 = _2D_Point.Get_PAngle(new _2D_Point(0, 0), new _2D_Point(S_cosAm1, S_sinAm1)).ChangeToRad();
                //} while (Math.Abs(Angle.ChangeToAngle(Am1 - Am).Miao) > 0.0001);

                ge.S    = ge.Sr = S_sinAm / Math.Sin(Am);
                ge.Ar12 = Am - delta_A / 2;
                ge.A12  = Angle.ChangeToAngle(ge.Ar12);
                if (Am + delta_A >= Math.PI)
                {
                    ge.Ar21 = Am + delta_A / 2 - Math.PI;
                }
                else
                {
                    ge.Ar21 = Am + delta_A / 2 + Math.PI;
                }
                ge.A21 = Angle.ChangeToAngle(ge.Ar21);
            }
    public LinePointAuxiliaryState(Tool tool, Auxiliary auxiliary, Geometry geometry) : base(tool, auxiliary)
    {
        if (auxiliary is LinePointAuxiliary)
        {
            this.auxiliary = (LinePointAuxiliary)auxiliary;
        }

        this.geometry = geometry;
    }
Example #29
0
    public RemoveAuxiliaryOperation(GeoController geoController, Geometry geometry, Auxiliary auxiliary)
    {
        CanRotateCamera  = true;
        CanActiveElement = true;

        this.geoController = geoController;
        this.geometry      = geometry;
        this.auxiliary     = auxiliary;
    }
Example #30
0
        /// <summary>
        /// Links a panel to the provided <see cref="State"/> type from the panel's name.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="panelName"></param>
        private void LinkPanel <T>(string panelName, bool strict = true) where T : State
        {
            GameObject tab = Auxiliary.FindGameObject(panelName);

            if (tab != null)
            {
                uiStateMachine.Link <T>(tab, true, strict);
            }
        }