using System; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; namespace CADTest { public class Class1 { #region实体镜像 [CommandMethod("MP")]//Mirror Entity public void MirrorEntity() { Database db = Application.DocumentManager.MdiActiveDocument.Database; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; //对称平面 Plane mp = new Plane(new Point3d(1, 0, 0), new Point3d(0, 1, 0), new Point3d(0, 0, 1)); double x = mp.Normal.X; double y = mp.Normal.Y; double z = mp.Normal.Z; double[] dm = new double[16]; dm[0] = 1 - 2 * x * x; dm[5] = 1 - 2 * y * y; dm[10] = 1 - 2 * z * z; dm[15]=1; dm[1] = dm[4] = -2*x * y; dm[2] = dm[8] = -2*x * z; dm[6] = dm[9] = -2*y * z; Matrix3d Tm = new Matrix3d(dm); using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); Solid3d sld = new Solid3d(); sld.SetDatabaseDefaults(); sld.CreateBox(100, 150, 200); sld.ColorIndex = 1;//red btr.AppendEntity(sld); trans.AddNewlyCreatedDBObject(sld, true); Solid3d sldClone = sld.Clone() as Solid3d; sldClone.ColorIndex = 3;//green sldClone.TransformBy(Tm); btr.AppendEntity(sldClone); trans.AddNewlyCreatedDBObject(sldClone, true); trans.Commit(); } } #endregion } } |