Ejemplo n.º 1
0
        //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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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();
            }
        }
Ejemplo n.º 4
0
 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")
 {
 }