CAD二次开发实验报告(8)

2020-04-14 18:26

using (Transaction Trans = db.TransactionManager.StartTransaction()) {

Point3d center = new Point3d(50, 50, 0);

Circle entity = new Circle(center, Vector3d.ZAxis, 150); DBObjectCollection curveSegments = new DBObjectCollection(); DBObjectCollection regions = new DBObjectCollection(); curveSegments.Add(entity);

regions = Region.CreateFromCurves(curveSegments); Region newRegion = (Region)regions[0]; newRegion.SetDatabaseDefaults();

BlockTable bt = (BlockTable)Trans.GetObject( db.BlockTableId, OpenMode.ForRead);

BlockTableRecord btr = (BlockTableRecord)Trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); btr.AppendEntity(newRegion);

Trans.AddNewlyCreatedDBObject(newRegion, true); Trans.Commit(); }

}

[CommandMethod(\)] public void CreateRegion() {

Document acDoc = Autodesk.AutoCAD.ApplicationServices. Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; //启动一个事物transaction

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; Circle acCirc1 = new Circle(); acCirc1.SetDatabaseDefaults();

acCirc1.Center = new Point3d(4, 4, 0); acCirc1.Radius = 2;

Circle acCirc2 = new Circle(); acCirc2.SetDatabaseDefaults();

acCirc2.Center = new Point3d(4, 4, 0); acCirc2.Radius = 1;

30

//添加圆到对象数组中

DBObjectCollection acDBObjColl = new DBObjectCollection(); acDBObjColl.Add(acCirc1); acDBObjColl.Add(acCirc2); //根据每一个闭合环计算面域

DBObjectCollection myRegionColl = new DBObjectCollection(); myRegionColl = Region.CreateFromCurves(acDBObjColl); Region acRegion1 = myRegionColl[0] as Region; Region acRegion2 = myRegionColl[1] as Region;

// 从面域2减去面域1 Subtract region 1 from region 2 if (acRegion1.Area > acRegion2.Area) {

acRegion1.BooleanOperation(BooleanOperationType.BoolSubtract, acRegion2); acRegion2.Dispose(); // 添加最终的面域到数据库中

acBlkTblRec.AppendEntity(acRegion1);

acTrans.AddNewlyCreatedDBObject(acRegion1, true); } else {

acRegion2.BooleanOperation(BooleanOperationType.BoolSubtract, acRegion1); acRegion1.Dispose();

acBlkTblRec.AppendEntity(acRegion2);

acTrans.AddNewlyCreatedDBObject(acRegion2, true); }

// 不追加对象到数据库中直接从内存中销毁 acCirc1.Dispose(); acCirc2.Dispose(); // 保存新对象到数据库中 acTrans.Commit(); }

}

31

4.8 创建文字

1)创建单行文本

Autodesk.AutoCAD.DatabaseServices.DBText

[CommandMethod(\)] public void CreateDBText() {

Database db = HostApplicationServices.WorkingDatabase; DBText txt = new DBText();

txt.Position = new Point3d(20,20,0); txt.TextString = \二次开发\; ToModelSpace(txt,db);

}

2)创建多行文本

Autodesk.AutoCAD.DatabaseServices.MText

代码:

[CommandMethod(\)] public void CreateMText() {

Database db = HostApplicationServices.WorkingDatabase; MText txt = new MText(); ToModelSpace(txt,db); }

public static ObjectId ToModelSpace(Entity ent, Database db) {

ObjectId entId;

using (Transaction trans = db.TransactionManager.StartTransaction()) {

BlockTable bt = (BlockTable)trans.GetObject( db.BlockTableId, OpenMode.ForRead);

BlockTableRecord btr = (BlockTableRecord)trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

32

entId = btr.AppendEntity(ent);

trans.AddNewlyCreatedDBObject(ent, true); trans.Commit(); }

return entId; }

public enum ScripType {

Fraction, Italic, Tolerance }

public static string MakeScipt(string baseTextString,

string superScript,string subScript, ScripType scriptType, double scale) {

string[] scriptTypStrings = new string[] { \, \, \ }; return

string.Format( \,baseTextString, \,scale,superScript,scriptTypStrings[(int)scriptType],subScript, \); }

[CommandMethod(\)] public static void CreateMText2() {

// 获得当前文档和数据库

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; // 创建多行文本对象

MText acMtext = new MText(); acMtext.SetDatabaseDefaults();

acMtext.Location = new Point3d(2, 2, 0); acMtext.Width = 4.5;

acMtext.Contents = \安制作!!!\; acBlkTblRec.AppendEntity(acMtext);

acTrans.AddNewlyCreatedDBObject(acMtext, true); acTrans.Commit(); }

33

}

4.9 创建填充

创建填充必须遵循的步骤:

? 创建一个空的填充对象 ? 指定填充对象所在的平面 ? 设置填充对象的关联性 ? 指定填充图案 ? 添加填充边界 ? 显示填充对象 ? 将其添加到模型空间

? 如果是关联性的填充,将填充对象与边界绑定

代码:

[CommandMethod(\)]//创建填充 public void AddHatch() {

Database db = HostApplicationServices.WorkingDatabase;

using (Transaction trans = db.TransactionManager.StartTransaction()) {

Circle circle = new Circle();

circle.Center = new Point3d(150, 150, 0);

circle.Radius = 200; BlockTable bt = (BlockTable) trans.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); btr.AppendEntity(circle);

trans.AddNewlyCreatedDBObject(circle, true);

ObjectIdCollection collection = new ObjectIdCollection(); collection.Add(circle.ObjectId); Hatch hatch = new Hatch();

34


CAD二次开发实验报告(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:(全国通用版)2019版高考数学一轮复习 第二单元 函数的概念及其

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: