Exemple #1
0
        /// <summary>
        /// 在坐标系管理数据结构中添加坐标系
        /// </summary>
        /// <param name="cs"></param>
        /// <returns></returns>
        public bool AddCordinateSystem(CordinateSystem cs)
        {
            List <CordinateSystem> csl;

            CordinateSystem csParent = GetCordinateSystem(cs.Level - 1, cs.ParentIndex);

            if (csParent != null)
            {
                cs.OTM.Parent = csParent.TM;
            }

            if (CordinateSystemDictionary.TryGetValue(cs.Level, out csl))
            {
                foreach (var item in csl)
                {
                    if (item.Index == cs.Index)
                    {
                        return(false);
                    }
                }

                csl.Add(cs);
            }
            else
            {
                csl = new List <CordinateSystem>();
                csl.Add(cs);
                CordinateSystemDictionary.Add(cs.Level, csl);
            }

            return(true);
        }
Exemple #2
0
        public bool SetStandardMarkPoint(int csLevel, int csIndex, PointD markPoint)
        {
            CordinateSystem cs = GetCordinateSystem(csLevel, csIndex);

            if (cs != null)
            {
                cs.StandardMarkPoint1 = markPoint;
                return(true);
            }

            return(false);
        }
Exemple #3
0
        /// <summary>
        /// 将指定坐标系上的点p坐标转换到指定坐标系
        /// </summary>
        /// <param name="level"></param>
        /// <param name="index"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        public PointD CordinateTransforming(int fromLevel, int fromIndex, int toLevel, int toIndex, PointD p)
        {
            CordinateSystem fromCs = GetCordinateSystem(fromLevel, fromIndex);
            CordinateSystem toCs   = GetCordinateSystem(toLevel, toIndex);

            if (fromCs == null || toCs == null)
            {
                return(p);
            }
            Point2D ret = TransformMatrix.MapPoints(fromCs.TM, new Point2D(p.X, p.Y), toCs.TM);

            return(new PointD(ret.X, ret.Y));
        }
Exemple #4
0
        /// <summary>
        /// ????????
        /// </summary>
        /// <param name="csLevel"></param>
        /// <param name="csIndex"></param>
        /// <param name="origin"></param>
        /// <returns></returns>
        public bool SetOrigin(int csLevel, int csIndex, PointD origin)
        {
            CordinateSystem cs = GetCordinateSystem(csLevel, csIndex);

            if (cs != null)
            {
                cs.Origin = origin;

                return(true);
            }

            return(false);
        }
Exemple #5
0
        /// <summary>
        ///通过Mark点更新变换矩阵
        /// </summary>
        /// <param name="csLevel"></param>
        /// <param name="csIndex"></param>
        /// <param name="markPoint1"></param>
        /// <param name="markPoint2"></param>
        /// <returns></returns>
        public bool SetCurrentMarkPoint(int csLevel, int csIndex, PointD markPoint1, PointD markPoint2)//
        {
            CordinateSystem cs = GetCordinateSystem(csLevel, csIndex);

            if (cs != null)
            {
                CordinateSystem csParent = null;
                if (csLevel > 1)
                {
                    csParent = GetCordinateSystem(csLevel - 1, cs.ParentIndex);

                    if (csParent == null)
                    {
                        return(false);
                    }
                }

                if (csParent != null)
                {
                    Point2D[] mp = { new Point2D(cs.StandardMarkPoint1.X, cs.StandardMarkPoint1.Y), new Point2D(markPoint1.X, markPoint1.Y), new Point2D(cs.StandardMarkPoint2.X, cs.StandardMarkPoint2.Y),
                                     new Point2D(markPoint2.X,            markPoint2.Y) };
                    Point2D[] ret = cs.OTM.MapFromRoot(mp);

                    TransformMatrix tempTm = new TransformMatrix(ret[0], ret[1], ret[2], ret[3]);
                    cs.TM.ReplacebyMatrix(tempTm);
                    tempTm = null;
                }
                else
                {
                    TransformMatrix tempTm = new TransformMatrix(new Point2D(cs.StandardMarkPoint1.X, cs.StandardMarkPoint1.Y), new Point2D(markPoint1.X, markPoint1.Y),
                                                                 new Point2D(cs.StandardMarkPoint2.X, cs.StandardMarkPoint2.Y), new Point2D(markPoint2.X, markPoint2.Y));

                    cs.TM.ReplacebyMatrix(tempTm);
                    tempTm = null;
                }

                return(true);
            }

            return(false);
        }
Exemple #6
0
        /// <summary>
        /// 根据Level和Index获取坐标系
        /// </summary>
        /// <param name="level"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private CordinateSystem GetCordinateSystem(int level, int index)
        {
            List <CordinateSystem> csl;
            CordinateSystem        cs = null;

            if (CordinateSystemDictionary.TryGetValue(level, out csl))
            {
                foreach (var item in csl)
                {
                    if (item.Index == index)
                    {
                        cs = item;
                    }
                }
            }
            else
            {
                cs = null;
            }

            return(cs);
        }