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); } }
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; }
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); } }
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); }