예제 #1
0
        /// <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);
        }
예제 #2
0
        // 由中心点、长度、宽度和高度创建楔体的函数.
        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);
        }
예제 #3
0
        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();
            }
        }