Beispiel #1
0
        /// <summary>
        /// 翻转曲线(曲线段顺序翻转,曲线段方向翻转)
        /// </summary>
        /// <returns></returns>
        public Curve Reverse()
        {
            List <CurveSegment> tracks = CloneTool.DeepClone(Tracks, DeepCloneType.Serialize) as List <CurveSegment>;

            tracks.Reverse();
            for (int i = 0; i < tracks.Count; i++)
            {
                tracks[i] = tracks[i].Reverse();
            }
            //tracks.ForEach(x => x.Reverse());
            return(new Curve(tracks));
        }
Beispiel #2
0
        /// <summary>
        /// 拷贝旋转(原始曲线段保持不变,新增一个旋转后的曲线段)
        /// 指定基准点,按指定方向(顺/逆时针)旋转指定角度
        /// </summary>
        /// <param name="referencePos">旋转基准点</param>
        /// <param name="radian">旋转角度</param>
        /// <param name="rotateDirection">旋转方向</param>
        /// <returns>旋转后的曲线</returns>
        public virtual CurveSegment CopyRotate(Point3D referencePos, double radian, ArcDirctionType rotateDirection)
        {
            CurveSegment copyTemp = CloneTool.DeepClone(this, DeepCloneType.Serialize) as CurveSegment;

            if (copyTemp == null)
            {
                throw new ArgumentNullException("拷贝曲线(CopyRotate)时,序列化拷贝曲线段时,出现了空引用");
            }

            copyTemp.Rotate(referencePos, radian, rotateDirection);
            return(copyTemp);
        }
Beispiel #3
0
        /// <summary>
        /// 拷贝平移(原始曲线段保持不变,新增一个平移后的曲线段)
        /// </summary>
        /// <param name="radian">平移方向</param>
        /// <param name="distance">平移距离</param>
        /// <returns>平移后的曲线段</returns>
        public virtual CurveSegment CopyMove(double radian, double distance)
        {
            CurveSegment copyTemp = CloneTool.DeepClone(this, DeepCloneType.Serialize) as CurveSegment;

            if (copyTemp == null)
            {
                throw new ArgumentNullException("拷贝曲线(CopyRotate)时,序列化拷贝曲线段时,出现了空引用");
            }

            copyTemp.Move(radian, distance);
            return(copyTemp);
        }
Beispiel #4
0
        /// <summary>
        ///  Copy Records to new plugin.  By default make as overrides
        /// </summary>
        /// <param name="src"></param>
        /// <param name="dst"></param>
        /// <param name="bOverride">Make record an override in the new location</param>
        /// <returns></returns>
        public static int CopyRecordsTo(BaseRecord[] src, IGroupRecord dst, bool bOverride = true)
        {
            int count = 0;

            if (src != null && dst != null)
            {
                if (dst is Plugin)
                {
                    var plugin = (Plugin)dst;
                    count = new CloneTool(plugin, bOverride).CopyRecordsTo(src);
                }
                else
                {
                    var dstRec = src.Select(x => x.Clone()).ToArray();
                    dst.AddRecords(dstRec);
                    count += dstRec.Count();
                }
            }

            return(count);
        }
Beispiel #5
0
        public void DeepCloneTest()
        {
            //对象为null情况
            var obj = CloneTool.DeepClone(null, DeepCloneType.Serialize);

            Assert.AreEqual(obj, null);


            //1. 序列化
            ClassB objB1 = new ClassB();

            objB1.RefClass       = new RefClass();
            objB1.RefClass.Field = 20;
            ClassB objB2 = CloneTool.DeepClone(objB1, DeepCloneType.Serialize) as ClassB;
            ClassB objB3 = objB1;

            Assert.AreEqual(objB1.RefClass.GetHashCode(), objB3.RefClass.GetHashCode());
            Assert.AreNotEqual(objB1.RefClass.GetHashCode(), objB2.RefClass.GetHashCode());


            //2. 反射实例化
            var resultR = CloneTool.DeepClone(false, DeepCloneType.Refactor); //值类型测试

            Assert.AreEqual(resultR.GetHashCode(), 0);

            var resultR2 = CloneTool.DeepClone(12, DeepCloneType.Refactor); //值类型测试

            Assert.AreEqual(resultR2.GetHashCode(), 12);

            //Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载外部程序集(EXE 或 DLL)
            Assembly assembly = Assembly.GetExecutingAssembly(); // 加载当前程序集
            object   o        = Assembly.GetExecutingAssembly().CreateInstance("ZY.Common.Tools.Tests.CloneToolTests", true, System.Reflection.BindingFlags.Default, null, new object[1] {
                12
            }, null, null);
            var resultR3 = CloneTool.DeepClone(o, DeepCloneType.Refactor);

            Assert.AreNotEqual(o.GetHashCode(), resultR3.GetHashCode());
            Assert.AreEqual((o as CloneToolTests).Count, (resultR3 as CloneToolTests).Count);

            //3. DataRow
            DataTable table = new DataTable("sheet1");

            table.Columns.Add("ColumnA");
            table.Columns.Add("ColumnB");
            var row = table.NewRow();

            row[0] = "111";
            row[1] = 222;
            table.Rows.Add(row);
            var result  = CloneTool.DeepClone(row, DeepCloneType.DataRow);
            var copyRow = row;

            Assert.AreEqual(row.GetHashCode(), copyRow.GetHashCode());
            Assert.AreNotEqual(row.GetHashCode(), result.GetHashCode());

            foreach (DataColumn column in (result as DataRow).Table.Columns)
            {
                var clone  = (result as DataRow)[column.ColumnName];
                var source = row[column.ColumnName];
                Assert.AreEqual(clone, source);
            }
        }
Beispiel #6
0
 public T Clone()
 {
     return(CloneTool.Clone(this as T));
 }