//private void btnPlus90_Click(object sender, EventArgs e) //{ // mf.ABLine.moveDistance = 0; // upDnHeading += 90; // if (upDnHeading > 359.999999) upDnHeading -= 360; // mf.ABLine.abHeading = glm.toRadians(upDnHeading); // mf.ABLine.SetABLineByHeading(); // tboxHeading.Text = Convert.ToString(upDnHeading, CultureInfo.InvariantCulture); //} private void BtnNewABLine_Click(object sender, EventArgs e) { //is button for adding ABLine set if (btnNewABLine.Text == "+") { btnNewABLine.Text = ""; btnNewABLine.Image = Properties.Resources.AddNew; ShowFullPanel(true); tboxABLineName.BackColor = Color.LightGreen; //create a name tboxABLineName.Enabled = true; tboxHeading.Enabled = false; btnAddToFile.Enabled = true; btnAddAndGo.Enabled = true; btnAPoint.Enabled = false; btnBPoint.Enabled = false; cboxHeading.Enabled = false; btnNewABLine.Enabled = false; btnTurnOffAB.Enabled = false; btnNewABLine.Enabled = false; lvLines.Enabled = false; btnAddToFile.Focus(); tboxABLineName.Text = (Math.Round(glm.toDegrees(mf.ABLine.abHeading), 1)).ToString(CultureInfo.InvariantCulture) + "\u00B0" + mf.FindDirection(mf.ABLine.abHeading) + DateTime.Now.ToString("hh:mm:ss", CultureInfo.InvariantCulture); } else // or used to initiate a new line { this.tboxHeading.TextChanged -= new System.EventHandler(this.tboxHeading_TextChanged); tboxHeading.Text = ""; this.tboxHeading.TextChanged += new System.EventHandler(this.tboxHeading_TextChanged); tboxHeading.Enabled = false; mf.ABLine.DeleteAB(); lvLines.SelectedItems.Clear(); btnAPoint.Enabled = true; btnBPoint.Enabled = false; cboxHeading.Enabled = false; btnNewABLine.Enabled = false; btnTurnOffAB.Enabled = false; //mf.ABLine.tramPassEvery = 0; //mf.ABLine.tramBasedOn = 0; mf.ABLine.isABLineSet = false; mf.ABLine.isABLineLoaded = false; ShowFullPanel(false); } }
private void btnBPoint_Click(object sender, System.EventArgs e) { mf.curve.aveLineHeading = 0; mf.curve.isOkToAddPoints = false; btnBPoint.Enabled = false; btnAPoint.Enabled = false; btnPausePlay.Enabled = false; btnCancel.Enabled = false; lvLines.Enabled = false; int cnt = mf.curve.refList.Count; if (cnt > 5) { //build the tail extensions mf.curve.AddFirstLastPoints(2); cnt = mf.curve.refList.Count; vec3[] arr = new vec3[cnt]; mf.curve.refList.CopyTo(arr); mf.curve.refList.Clear(); mf.curve.refList.Add(arr[0]); mf.curve.refList.Add(arr[1]); for (int i = 2; i < cnt - 4; i++) { // add p1 mf.curve.refList.Add(arr[i + 1]); for (int j = 1; j < 6; j++) { vec3 pos = new vec3(glm.Catmull(j / 6.0, arr[i], arr[i + 1], arr[i + 2], arr[i + 3])); mf.curve.refList.Add(pos); } } mf.curve.refList.Add(arr[cnt - 2]); mf.curve.refList.RemoveRange(0, 2); mf.curve.CalculateTurnHeadings(); mf.curve.AddFirstLastPoints(20); //SmoothAB(4); mf.curve.CalculateTurnHeadings(); mf.curve.isCurveSet = true; lblCurveExists.Text = gStr.gsCurveSet; ShowSavedPanel(true); btnAddAndGo.Enabled = true; btnAddToFile.Enabled = true; btnAPoint.Enabled = false; btnBPoint.Enabled = false; btnPausePlay.Enabled = false; textBox1.BackColor = Color.LightGreen; textBox1.Enabled = true; textBox1.Text = (Math.Round(glm.toDegrees(mf.curve.aveLineHeading), 1)).ToString(CultureInfo.InvariantCulture) + "\u00B0" + mf.FindDirection(mf.curve.aveLineHeading) + DateTime.Now.ToString("hh:mm:ss", CultureInfo.InvariantCulture); } else { mf.curve.isCurveSet = false; mf.curve.refList?.Clear(); lblCurveExists.Text = " > Off <"; ShowSavedPanel(true); btnNewCurve.Enabled = true; btnCancel.Enabled = true; lvLines.Enabled = true; } lvLines.SelectedItems.Clear(); }
private void BtnMakeCurve_Click(object sender, EventArgs e) { btnCancelTouch.Enabled = false; mf.curve.refList?.Clear(); vec3 chk = new vec3(arr[start]); for (int i = start; i < end; i++) { mf.curve.refList.Add(arr[i]); } int cnt = mf.curve.refList.Count; if (cnt > 3) { //make sure distance isn't too big between points on Turn for (int i = 0; i < cnt - 1; i++) { int j = i + 1; //if (j == cnt) j = 0; double distance = glm.Distance(mf.curve.refList[i], mf.curve.refList[j]); if (distance > 1.2) { vec3 pointB = new vec3((mf.curve.refList[i].easting + mf.curve.refList[j].easting) / 2.0, (mf.curve.refList[i].northing + mf.curve.refList[j].northing) / 2.0, mf.curve.refList[i].heading); mf.curve.refList.Insert(j, pointB); cnt = mf.curve.refList.Count; i = -1; } } //who knows which way it actually goes mf.curve.CalculateTurnHeadings(); //calculate average heading of line double x = 0, y = 0; mf.curve.isCurveSet = true; foreach (var pt in mf.curve.refList) { x += Math.Cos(pt.heading); y += Math.Sin(pt.heading); } x /= mf.curve.refList.Count; y /= mf.curve.refList.Count; mf.curve.aveLineHeading = Math.Atan2(y, x); if (mf.curve.aveLineHeading < 0) { mf.curve.aveLineHeading += glm.twoPI; } //build the tail extensions mf.curve.AddFirstLastPoints(100); mf.curve.SmoothAB(4); mf.curve.CalculateTurnHeadings(); mf.curve.isCurveSet = true; double offset = ((double)nudDistance.Value) / 200.0; //calculate the heading 90 degrees to ref ABLine heading double headingAt90 = mf.curve.aveLineHeading + glm.PIBy2; chk.easting = (Math.Sin(headingAt90) * Math.Abs(offset)) + chk.easting; chk.northing = (Math.Cos(headingAt90) * Math.Abs(offset)) + chk.northing; if (!mf.bnd.bndArr[0].IsPointInsideBoundary(chk)) { headingAt90 = mf.curve.aveLineHeading - glm.PIBy2; } cnt = mf.curve.refList.Count; vec3[] arrMove = new vec3[cnt]; mf.curve.refList.CopyTo(arrMove); mf.curve.refList.Clear(); for (int i = 0; i < cnt; i++) { arrMove[i].easting = (Math.Sin(headingAt90) * offset) + arrMove[i].easting; arrMove[i].northing = (Math.Cos(headingAt90) * offset) + arrMove[i].northing; mf.curve.refList.Add(arrMove[i]); } mf.curve.curveArr.Add(new CCurveLines()); mf.curve.numCurveLines = mf.curve.curveArr.Count; mf.curve.numCurveLineSelected = mf.curve.numCurveLines; //array number is 1 less since it starts at zero int idx = mf.curve.curveArr.Count - 1; //create a name mf.curve.curveArr[idx].Name = (Math.Round(glm.toDegrees(mf.curve.aveLineHeading), 1)).ToString(CultureInfo.InvariantCulture) + "\u00B0" + mf.FindDirection(mf.curve.aveLineHeading) + DateTime.Now.ToString("hh:mm:ss", CultureInfo.InvariantCulture); mf.curve.curveArr[idx].aveHeading = mf.curve.aveLineHeading; //write out the Curve Points foreach (var item in mf.curve.refList) { mf.curve.curveArr[idx].curvePts.Add(item); } mf.FileSaveCurveLines(); //update the arrays btnMakeABLine.Enabled = false; btnMakeCurve.Enabled = false; isMakingCurve = false; isMakingAB = false; start = 99999; end = 99999; FixLabelsCurve(); } else { mf.curve.isCurveSet = false; mf.curve.refList?.Clear(); } }