CreateFrustum(double height, double radiusAlongX, double radiusAlongY, double topRadius)
Height--表示平截头体的高度; radiusAlongX--表示底面在X轴方向的半径; radiusAlongY--表示底面在X轴方向的半径; topRadius—表示顶面半径,创建圆锥topRadius设置为0 代码:
[CommandMethod(\)]//创建锲体 public void CreateWedge() {
Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database;
using (Transaction 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; Solid3d pSolid3d = new Solid3d(); pSolid3d.CreateTorus(40, 20); acBlkTblRec.AppendEntity(pSolid3d);
acTrans.AddNewlyCreatedDBObject(pSolid3d, true); pSolid3d = new Solid3d();
pSolid3d.CreateWedge(10, 15, 12); acBlkTblRec.AppendEntity(pSolid3d);
acTrans.AddNewlyCreatedDBObject(pSolid3d, true); acTrans.Commit(); } }
[CommandMethod(\)]//创建三维实体 public void Create3DSolid() {
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction trans = db.TransactionManager.StartTransaction()) {
Point3d p1 = new Point3d(50, 50, 0); Point3d p2 = new Point3d(110, 100, 0); Point3d p3 = new Point3d(150, 160, 0); Point3d p4 = new Point3d(210, 190, 0); Point3d p5 = new Point3d(270, 230, 0);
Point3dCollection pc = new Point3dCollection(); pc.Add(p1);
40
pc.Add(p2); pc.Add(p3); pc.Add(p4); pc.Add(p5);
Polyline3d Polyline3d = new Polyline3d(0, pc, true);
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); DBObjectCollection dbobc = new DBObjectCollection(); DBObjectCollection regions = new DBObjectCollection(); dbobc.Add(Polyline3d);
regions = Region.CreateFromCurves(dbobc); Region region = (Region)regions[0]; Solid3d sd = new Solid3d();
sd.Revolve(region, new Point3d(0, 0, 0), Vector3d.XAxis, 360); btr.AppendEntity(sd);
trans.AddNewlyCreatedDBObject(sd, true); trans.Commit(); }
}
41
实验三 ObjectARX .NET托管开发包的使用
一、主要内容
1、创建块定义及插入块参照
2、创建带有属性的块定义及插入带有属性的块参照 3、在对话框中查看块定义的图标 4、在当前文件中插入外部文件中的块 5、在当前文件中插入其他DWG文件
二、学时安排:2学时 三、预习内容
理解块的含义,回顾块和带属性块的定义
四、ObjectARX .NET托管开发包的使用过程
4.1创建块定义及插入块参照
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
using System.Threading.Tasks; using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.DatabaseServices;
[assembly: CommandClass(typeof(实验三.CADBlock))] namespace 实验三 {
public class CADBlock {
Editor pEd = Application.DocumentManager.MdiActiveDocument.Editor; public Document pDoc = Autodesk.AutoCAD.ApplicationServices.
Application.DocumentManager.MdiActiveDocument;
}
42
}
4.1.1 创建块定义
→创建一个名为“三角点”的块记录,包括以下实体:
? 一个点 ? 一个圆 ? 一个三角形
代码:
//创建块
[CommandMethod(\)] public void CreateBlock() {
Database acCurDb = pDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) {
BlockTable acBlkTbl = acTrans.GetObject(
acCurDb.BlockTableId,OpenMode.ForWrite) as BlockTable; // 创建新的块表记录
BlockTableRecord acBlkTblRec = new BlockTableRecord(); string blkname = \三角点\; acBlkTblRec.Name = blkname;
acBlkTblRec.Origin = new Point3d(0, 0, 0); Point3d pCenter = new Point3d(0, 0, 0); //创建中心点
DBPoint pDBPt = new DBPoint(pCenter); //创建圆
Circle pCir = new Circle(pCenter, new Vector3d(0, 0, 1), 0.25); //创建三角形
Polyline pTri = new Polyline(4);
pTri.AddVertexAt(0, new Point2d(0, 1), 0, 0, 0); pTri.AddVertexAt(1, new Point2d(0.866, -0.5), 0, 0, 0); pTri.AddVertexAt(2, new Point2d(-0.866, -0.5), 0, 0, 0); pTri.AddVertexAt(3, new Point2d(0, 1), 0, 0, 0); //给定块的原点
acBlkTblRec.Origin = new Point3d(0, 0, 0); //将图形实体添加到块表记录 acBlkTblRec.AppendEntity(pDBPt); acBlkTblRec.AppendEntity(pCir); acBlkTblRec.AppendEntity(pTri); //将块记录添加到块表 acBlkTbl.Add(acBlkTblRec);
acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
43
// 提交修改并销毁事务 acTrans.Commit(); } }
→使用AutoCAD插入块命令浏览及插入上述定义的块
4.1.2 插入块参照
→打开块表BlockTable找到名为三角点的块表记录,创建块引用插入到当前活动块表记录中
代码:
//插入块
[CommandMethod(\)] public void InsertBlock() {
Database acCurDb = pDoc.Database; // 启动一个事务 Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) {
BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForWrite) as BlockTable; // 以写方式打开模型空间块表记录
BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord. ModelSpace], OpenMode.ForWrite) as BlockTableRecord; //获取三角点块,并创建块引用
BlockTableRecord pBlockTableRecord = acTrans.GetObject (acBlkTbl[\三角点\], OpenMode.ForRead) as BlockTableRecord; BlockReference bref = new BlockReference(new Point3d(10, 10, 0), pBlockTableRecord.ObjectId);
BlockReference bref2 = new BlockReference(new Point3d(30, 30, 0),
44