//public int mType1; //public int mType2; /// <summary> /// /// </summary> /// <param name="pp"></param> /// <param name="SerialNo"></param> /// <param name="name"></param> /// <param name="startM"></param> /// <param name="length"></param> /// <param name="dt"></param> /// <param name="AvgProgress"></param> /// <param name="dkcode"></param> public CRailwayDWProj(CRailwayProject pp, int pid, string SerialNo, int dwid, string name, double startM, double length, DateTime dt, bool isFinish, string dkcode) { mParentProj = pp; mParentID = pid; mDWID = dwid; mDWName = name; mSerialNo = SerialNo; mMileage_Start = startM; mDKCode_Start = dkcode; mLength = length; mFinishTime = dt; //mAvgProgress = AvgProgress; mIsDone = isFinish; mIsValid = CRailwayLineList.getGPSbyDKCode(dkcode, mMileage_Start, out mLongitude_Mid, out mLatitude_Mid, out mAltitude_Mid, out mHeading_Mid); mIsOnMainPath = mParentProj.mScene.mMainPath.getPathMileageByDKCode(dkcode, mMileage_Start, out mMainMileage, out mdistanceToMainPath); }
public List <String> mBeamName = new List <string>(); // 梁的名字 //public List<double> mBeamLength = new List<double>(); public CRailwayPier(CRailwayProject pp, int pid, string SerialNo, int dwid, string name, double startM, double endM, DateTime dt, bool isFinish, string dkcode) : base(pp, pid, SerialNo, dwid, name, startM, endM, dt, isFinish, dkcode) { //string sqlstr = @"select * from (SELECT AutoID, Project_B_DW_ID, PropertyID, Value " + // "FROM ProjectPropertyConfigInfo)a, " + // "(SELECT AutoID, Property, Unit, UpdateTime, CrtUSrID " + // "FROM ProjectPropertyInfo)b where a.PropertyID = b.AutoID and a.Project_B_DW_ID=" + dwid; //System.Data.DataTable dtt = CServerWrapper.execSqlQuery(sqlstr); //DatabaseWrapper.PrintDataTable(dtt); string[] ss = name.Split('#'); try { DWName = ss[0]; } catch (Exception e) { Console.WriteLine(name + ":桥墩名称解析错误:"); } //getPierType(dwtype); }
/// <summary> /// 导出桥梁,隧道或路基的中线 /// </summary> /// <param name="latlonPoints"></param> /// <param name="TXT"></param> private void exportMiddleLine(CRailwayProject prj, StreamWriter DoubleFile, StreamWriter SingleFile, string prjType) { string fileNameExt = ".max.x"; StreamWriter TXT; OnePrj aprj; List <Vector3d> earthCoreSysPoints = new List <Vector3d>(); List <Vector3d> dsMaxPoints = new List <Vector3d>(); List <int> sIndex = new List <int>(); // 如果工点里程过长,拆分为不超过3.5 KM作为一段生成模型 int startN = 0; // int n = 0; if (!prj.mIsValid) { return; } for (startN = 0; startN < prj.mPath.mPointCount - 350; startN += 300) { sIndex.Add(startN); } sIndex.Add(startN); double[] m, x, y, z, d; bool isDouble; string sp; isDouble = prj.mPath.getMiddleLine(out m, out x, out y, out z, out d); if (isDouble) { TXT = DoubleFile; sp = "d"; } else { TXT = SingleFile; sp = "s"; } for (int j = 0; j < sIndex.Count; j++) { int fromIdx = sIndex[j]; int toIdx; if (j == sIndex.Count - 1) { toIdx = m.Length - 1; } else { toIdx = sIndex[j + 1]; } double prjLength = prj.mPath.mLength; switch (prjType) { case "bridge": if (isDouble) { dbridgeCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + dbridgeCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } else { sbridgeCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + sbridgeCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } projectList.Add(aprj); break; case "road": if (isDouble) { droadCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + droadCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } else { sroadCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + sroadCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } projectList.Add(aprj); break; case "tunnel": if (isDouble) { dtunnelCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + dtunnelCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } else { stunnelCount++; aprj = new OnePrj(j, prjType, prj.ProjectName, sp + prjType + stunnelCount + fileNameExt, prjLength, x[sIndex[j]], y[sIndex[j]], z[sIndex[j]]); } projectList.Add(aprj); break; } TXT.Write(prjLength + " "); TXT.Write(prj.ProjectName + " "); TXT.WriteLine(j); earthCoreSysPoints.Clear(); dsMaxPoints.Clear(); for (int i = fromIdx; i <= toIdx; i++) { double radius = WorldSettings.EquatorialRadius /* 米 */ + z[i]; earthCoreSysPoints.Add(MathEngine.SphericalToCartesianD(y[i], x[i], radius)); // 米 } //foreach (LatLonAl p in latlonPoints) //{ // double radius = WorldSettings.EquatorialRadius/* 米 */ + p.altitude; // earthCoreSysPoints.Add(MathEngine.SphericalToCartesianD(p.latitude, p.longitude, radius)); // 米 //} // 经测试 地球窗口的世界坐标系原点在地球球心,x轴指向0纬0经,右手系,z轴指向北极点,测试语句: // Vector3 latlon_test = MathEngine.CartesianToSpherical(5001,1, 1); Vector3d k_prime = new Vector3d(earthCoreSysPoints[0]); k_prime = k_prime.Normalize(); Vector3d i_prime = Vector3d.Transform(earthCoreSys_YAxis, Matrix4d.RotationZ((prj.mPath.mx[fromIdx] * PI / 180))); Vector3d j_prime = Vector3d.Cross(k_prime, i_prime); j_prime = j_prime.Normalize(); Matrix4d mm = new Matrix4d(); // mm是正交矩阵,求逆就是求转置。 mm.M11 = i_prime.X; mm.M12 = j_prime.X; mm.M13 = k_prime.X; mm.M21 = i_prime.Y; mm.M22 = j_prime.Y; mm.M23 = k_prime.Y; mm.M31 = i_prime.Z; mm.M32 = j_prime.Z; mm.M33 = k_prime.Z; mm.M41 = mm.M42 = mm.M43 = 0; mm.M14 = mm.M24 = mm.M34 = 0; mm.M44 = 1; // 把三维中线(地球球心坐标系)上 起点之外的点 转换为 3ds max世界坐标 (起点作原点) for (int i = 1; i <= toIdx - fromIdx; i++) { Vector3d vv = new Vector3d(earthCoreSysPoints[i].X - earthCoreSysPoints[0].X, earthCoreSysPoints[i].Y - earthCoreSysPoints[0].Y, earthCoreSysPoints[i].Z - earthCoreSysPoints[0].Z); dsMaxPoints.Add(Vector3d.Transform(vv, mm)); } // 输出 List <Vector3d> straight_opt = new List <Vector3d>(); straight_opt.Add(dsMaxPoints[0]); straight_opt.Add(dsMaxPoints[1]); for (int i = 2; i < dsMaxPoints.Count; i++) { Vector3d a = dsMaxPoints[i] - straight_opt[straight_opt.Count - 1]; Vector3d b = straight_opt[straight_opt.Count - 1] - straight_opt[straight_opt.Count - 2]; double costheta = Vector3d.Dot(a, b) / a.Length / b.Length; double sintheta = Math.Sqrt(1 - costheta * costheta); if (sintheta < Threshold) { straight_opt.Last().X = dsMaxPoints[i].X; straight_opt.Last().Y = dsMaxPoints[i].Y; straight_opt.Last().Z = dsMaxPoints[i].Z; } else { straight_opt.Add(dsMaxPoints[i]); } } foreach (Vector3d p in straight_opt) { TXT.Write(p.X); TXT.Write(' '); TXT.Write(p.Y); TXT.Write(' '); TXT.Write(p.Z); TXT.Write(' '); } TXT.WriteLine(); } }
public CRailwayBeam(CRailwayProject pp, int pid, string SerialNo, int dwid, string name, double startM, double endM, DateTime dt, bool isFinish, string dkcode) : base(pp, pid, SerialNo, dwid, name, startM, endM, dt, isFinish, dkcode = "DK") { }