AutoCAD二次开发实验二.docx
《AutoCAD二次开发实验二.docx》由会员分享,可在线阅读,更多相关《AutoCAD二次开发实验二.docx(14页珍藏版)》请在冰豆网上搜索。
AutoCAD二次开发实验二
实验二AutoCAD基本图形对象创建与编辑
1,创建直线对象
代码如下:
[CommandMethod("CreatLine")]
publicvoidcreatline()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
//创建直线
Point3dpt1=newPoint3d(2000,2000,0);
Point3dpt2=newPoint3d(1000,1000,0);
LinelineEnt=newLine(pt1,pt2);
//获得块表
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
//获得特定块表记录
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
//把图形对象的记录加入到块表中
pModifyEntID=btr.AppendEntity(lineEnt);
//将直线添加到事务处理中
trans.AddNewlyCreatedDBObject(lineEnt,true);
trans.Commit();
}
}
运行效果如下图所示
修改直线
代码如下:
[CommandMethod("ModifyLine")]
publicvoidModifyLine()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
//打开要修改的图形对象,定义一个实体对象
EntitypEnt=(Entity)trans.GetObject(pModifyEntID,OpenMode.ForWrite);
//修改颜色
pEnt.ColorIndex=5;
pEnt.Close();
trans.Commit();
}
}
2,创建圆对象
代码如下:
[CommandMethod("CreatCir")]
publicvoidCircle()
{
//声明圆对象
Circlec=newCircle();
c.Center=newPoint3d(0,0,0);
c.Radius=100;
Databasedb=HostApplicationServices.WorkingDatabase;
//启动事务
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
//创建块表
BlockTablec_block=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);//读取,0
BlockTableRecordc_block_record=(BlockTableRecord)trans.GetObject(c_block[BlockTableRecord.ModelSpace],OpenMode.ForWrite);//写入,1
c_block_record.AppendEntity(c);//块表记录追加实体,把图形对象的记录加入到块表记录
trans.AddNewlyCreatedDBObject(c,true);//将圆添加到事务处理中
trans.Commit();//提交事务
}
}
3,创建圆弧对象
代码如下:
//创建圆弧
[CommandMethod("CreatArc")]
publicvoidCreatArc()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
//创建圆弧,指定圆心,半径,起始角,终止角
ArcpArc=newArc(newPoint3d(100,100,0),3000,0,30);
//获得块表
BlockTablepBlkTbl=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
//获得特定块表记录
BlockTableRecordpBlkTblRec=(BlockTableRecord)trans.GetObject(pBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
//将图形对象的记录加到块表记录中
pBlkTblRec.AppendEntity(pArc);
//将圆弧添加到事务处理中
trans.AddNewlyCreatedDBObject(pArc,true);
trans.Commit();
}
}
4,创建多段线:
代码如下:
//创建多段线
[CommandMethod("CreatPloyline")]
publicvoidcreatePloyline1()
{
Polylinepl=newPolyline(5);
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
Point2dp1=newPoint2d(50,10);
Point2dp2=newPoint2d(100,30);
Point2dp3=newPoint2d(150,60);
Point2dp4=newPoint2d(200,90);
Point2dp5=newPoint2d(250,120);
Point2dCollectionpc=newPoint2dCollection();
pc.Add(p1);
pc.Add(p2);
pc.Add(p3);
pc.Add(p4);
pc.Add(p5);
for(inti=0;i<5;i++)
{
pl.AddVertexAt(i,pc[i],0.5,5,5);
}
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(pl);
trans.AddNewlyCreatedDBObject(pl,true);
trans.Commit();
}
}
5,创建椭圆
代码如下:
//创建椭圆
[CommandMethod("CEllipse")]
publicvoidEllipse()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
EllipsepEllipse=newEllipse(newPoint3d(150,150,0),newVector3d(0,0,50),newVector3d(50,50,0),0.8,0,0);
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(pEllipse);
trans.AddNewlyCreatedDBObject(pEllipse,true);
trans.Commit();
}
}
6,创建样条曲线
代码如下:
//创建样条曲线
[CommandMethod("CreatSpline")]
publicvoidCreateSpline()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
Point3dp1=newPoint3d(50,30,0);
Point3dp2=newPoint3d(100,60,0);
Point3dp3=newPoint3d(150,520,0);
Point3dp4=newPoint3d(200,240,0);
Point3dp5=newPoint3d(250,300,0);
Point3dCollectionpc=newPoint3dCollection();
pc.Add(p1);
pc.Add(p2);
pc.Add(p3);
pc.Add(p4);
pc.Add(p5);
Splinespline=newSpline(pc,2,5);
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(spline);
trans.AddNewlyCreatedDBObject(spline,true);
trans.Commit();
}
}
7,创建面域
代码如下:
//创建面域°
[CommandMethod("Polygon")]
publicvoidCreatePolygon()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(TransactionTrans=db.TransactionManager.StartTransaction())
{
Point3dcenter=newPoint3d(50,50,0);
Circleentity=newCircle(center,Vector3d.ZAxis,150);
DBObjectCollectioncurveSegments=newDBObjectCollection();
DBObjectCollectionregions=newDBObjectCollection();
curveSegments.Add(entity);
regions=Region.CreateFromCurves(curveSegments);
RegionnewRegion=(Region)regions[0];
newRegion.SetDatabaseDefaults();
BlockTablebt=(BlockTable)Trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)Trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(newRegion);
Trans.AddNewlyCreatedDBObject(newRegion,true);
Trans.Commit();
}
}
8,创建文字
代码如下:
//创建文字
[CommandMethod("CreatText")]
publicvoidAddText()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
DBTexttext=newDBText();
text.Position=newPoint3d(5,5,0);
text.ColorIndex=3;
text.TextString="AutoCAD二次开发!
";
MTexttext1=newMText();
text1.Contents="";
text1.Color=Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci,2);
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(text);
btr.AppendEntity(text1);
trans.AddNewlyCreatedDBObject(text,true);
trans.AddNewlyCreatedDBObject(text1,true);
trans.Commit();
}
}
9,创建填充
代码如下
//创建填充
[CommandMethod("CreatHatch")]
publicvoidAddHatch()
{
Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{
Circlecircle=newCircle();
circle.Center=newPoint3d(150,150,0);
circle.Radius=200;BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
btr.AppendEntity(circle);
trans.AddNewlyCreatedDBObject(circle,true);
ObjectIdCollectioncollection=newObjectIdCollection();
collection.Add(circle.ObjectId);
Hatchhatch=newHatch();
hatch.Elevation=0;
hatch.HatchStyle=HatchStyle.Normal;
hatch.ColorIndex=5;
hatch.SetHatchPattern(HatchPatternType.PreDefined,"SOLID");
hatch.AppendLoop(HatchLoopTypes.Default,collection);
hatch.EvaluateHatch(true);
btr.AppendEntity(hatch);
trans.AddNewlyCreatedDBObject(hatch,true);
trans.Commit();
}
}
10,创建三维实体
代码如下:
[CommandMethod("Create3DSolid")]
publicvoidCreate3DSolid()
{Databasedb=HostApplicationServices.WorkingDatabase;
using(Transactiontrans=db.TransactionManager.StartTransaction())
{Point3dp1=newPoint3d(50,50,0);
Point3dp2=newPoint3d(110,100,0);
Point3dp3=newPoint3d(150,160,0);
Point3dp4=newPoint3d(210,190,0);
Point3dp5=newPoint3d(270,230,0);
Point3dCollectionpc=newPoint3dCollection();
pc.Add(p1);
pc.Add(p2);
pc.Add(p3);
pc.Add(p4);
pc.Add(p5);
Polyline3dPolyline3d=newPolyline3d(0,pc,true);
BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
DBObjectCollectiondbobc=newDBObjectCollection();
DBObjectCollectionregions=newDBObjectCollection();
dbobc.Add(Polyline3d);
regions=Region.CreateFromCurves(dbobc);
Regionregion=(Region)regions[0];
Solid3dsd=newSolid3d();
sd.Revolve(region,newPoint3d(0,0,0),Vector3d.XAxis,360);
PModifyEntID=btr.AppendEntity(sd);
trans.AddNewlyCreatedDBObject(sd,true);
trans.Commit();
}
}