/// <summary> /// 由角点、长度、宽度和高度在UCS中创建楔体 /// </summary> /// <param name="cornerPt">角点</param> /// <param name="lengthAlongX">长度</param> /// <param name="lengthAlongY">宽度</param> /// <param name="lengthAlongZ">高度</param> /// <returns>返回创建的楔体的Id</returns> public static ObjectId AddWedge(Point3d cornerPt, double lengthAlongX, double lengthAlongY, double lengthAlongZ) { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; if (Math.Abs(lengthAlongX) < 0.00001 || Math.Abs(lengthAlongX) < 0.00001 || Math.Abs(lengthAlongX) < 0.00001) { ed.WriteMessage("\n参数不当,创建楔体失败!"); return(ObjectId.Null); } Solid3d ent = new Solid3d(); ent.RecordHistory = true; ent.CreateWedge(Math.Abs(lengthAlongX), Math.Abs(lengthAlongY), Math.Abs(lengthAlongZ)); // 位置调整 Point3d cenPt = cornerPt + new Vector3d(0.5 * lengthAlongX, 0.5 * lengthAlongY, 0.5 * lengthAlongZ); Matrix3d mt = ed.CurrentUserCoordinateSystem; mt = mt * Matrix3d.Displacement(cenPt - Point3d.Origin); ent.TransformBy(mt); ObjectId entId = ObjectId.Null; using (Transaction tr = db.TransactionManager.StartTransaction()) { entId = db.AddToModelSpace(ent); tr.Commit(); } return(entId); }
// 由中心点、长度、宽度和高度创建楔体的函数. public static ObjectId AddWedge(Point3d cenPt, double lengthAlongX, double lengthAlongY, double lengthAlongZ) { Solid3d ent = new Solid3d(); ent.CreateWedge(lengthAlongX, lengthAlongY, lengthAlongZ); Matrix3d mt = Matrix3d.Displacement(cenPt - Point3d.Origin); ent.TransformBy(mt); ObjectId entId = AppendEntity(ent); return(entId); }
public static void CreateWedge() { // 获取当前文档和数据库,启动事务 var acDoc = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument; var acCurDb = acDoc.Database; using (var acTrans = acCurDb.TransactionManager.StartTransaction()) { // 以读模式打开块表 BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // 以写模式打开块表记录模型空间 BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //创建3D楔形实体wedge var acSol3D = new Solid3d(); acSol3D.CreateWedge(10, 15, 20); // 3D实体的中心点放在(5,5,0) acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) - Point3d.Origin)); // 将新对象添加到块表记录和事务 acBlkTblRec.AppendEntity(acSol3D); acTrans.AddNewlyCreatedDBObject(acSol3D, true); // 打开当前视口 ViewportTableRecord acVportTblRec; acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, OpenMode.ForWrite) as ViewportTableRecord; // 旋转当前视口的观察方向 acVportTblRec.ViewDirection = new Vector3d(-1, -1, 1); acDoc.Editor.UpdateTiledViewportsFromDatabase(); // 提交事务 acTrans.Commit(); } }