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