// Learn more about F# at http://fsharp.net module HelloWorld.Commands open Autodesk.AutoCAD.Runtime open Autodesk.AutoCAD.ApplicationServices open Autodesk.AutoCAD.Geometry open Autodesk.AutoCAD.DatabaseServices open Autodesk.AutoCAD.EditorInput //下面的例子涵括了几种常见的ACAD操作,如画线 [<CommandMethod("MyLine")>] let Testline () = //let db=HostApplicationServices.WorkingDatabase let doc = Application.DocumentManager.MdiActiveDocument let ed = doc.Editor let db = doc.Database //获取点 let pt1= new Point3d(300.0,100.0,0.0) let pt1=(300.0,150.0,0.0) let pt2= new Point3d(900.0,500.0,0.0) //use tr=db.TransactionManager.StartTransaction(); let optPoint=new PromptPointOptions("Please select a point") let resPoint:PromptPointResult=ed.GetPoint(optPoint) let pt:Point3d=resPoint.Value let lineEnt=new Line(pt,pt2) //注 point3d是在geometry目录下的,而circle是在databaseservices目录下的 let cEnt=new Circle(pt,Vector3d.ZAxis,600.0) //画线和画圆 use tr=db.TransactionManager.StartTransaction(); let bt=tr.GetObject(db.BlockTableId,OpenMode.ForRead):?>BlockTable let btr=tr.GetObject(bt.[BlockTableRecord.ModelSpace],OpenMode.ForWrite):?>BlockTableRecord let id=btr.AppendEntity(lineEnt) tr.AddNewlyCreatedDBObject(lineEnt, true) let id=btr.AppendEntity(cEnt) tr.AddNewlyCreatedDBObject(cEnt, true) tr.Commit() use tr=db.TransactionManager.StartTransaction(); let optSel=new PromptSelectionOptions() ///下面这句话是赋值的意思,反正很混乱,什么时候用=什么时候用<- optSel.MessageForAdding <- "xixi" //删除选择集 let ressel:PromptSelectionResult=ed.GetSelection(optSel) let sset:SelectionSet=ressel.Value let ids = new ObjectId() let ids=sset.GetObjectIds() for ssid:ObjectId in ids do let ent=tr.GetObject(ssid,OpenMode.ForWrite) ent.Erase() tr.Commit() //下面这段得到物体的boundingbox use tr=db.TransactionManager.StartTransaction(); let optSel=new PromptSelectionOptions() ///下面这句话是赋值的意思,反正很混乱,什么时候用=什么时候用<- optSel.MessageForAdding <- "select object" //删除选择集 let ressel:PromptSelectionResult=ed.GetSelection(optSel) let sset:SelectionSet=ressel.Value let ids = new ObjectId() let ids=sset.GetObjectIds() for ssid:ObjectId in ids do //let ent=tr.GetObject(ssid,OpenMode.ForWrite) //ent.Erase() //非常幸运,看了kean的表达和microsoft的帮助 //http://msdn.microsoft.com/zh-cn/library/dd233220.aspx let ent=tr.GetObject(ssid,OpenMode.ForRead):?>Entity let btl:Point3d = ent.GeometricExtents.MinPoint let tpr:Point3d = ent.GeometricExtents.MaxPoint let lineEnt=new Line(btl,tpr) let bt=tr.GetObject(db.BlockTableId,OpenMode.ForRead):?>BlockTable let btr=tr.GetObject(bt.[BlockTableRecord.ModelSpace],OpenMode.ForWrite):?>BlockTableRecord let id=btr.AppendEntity(lineEnt) tr.AddNewlyCreatedDBObject(lineEnt, true) tr.Commit() //draw polyline let Pl:Polyline = new Polyline(5) Pl.AddVertexAt(0, new Point2d(0.0, 0.0), 0.0, -1.0, -1.0) Pl.AddVertexAt(1, new Point2d(100.0, 0.0), 0.0, -1.0, -1.0) Pl.AddVertexAt(2, new Point2d(100.0, 100.0), 0.0, -1.0, -1.0) Pl.AddVertexAt(3, new Point2d(0.0, 100.0), 0.0, -1.0, -1.0) Pl.AddVertexAt(4, new Point2d(0.0, 0.0), 0.0, -1.0, -1.0) use tr=db.TransactionManager.StartTransaction(); let bt=tr.GetObject(db.BlockTableId,OpenMode.ForRead):?>BlockTable let btr=tr.GetObject(bt.[BlockTableRecord.ModelSpace],OpenMode.ForWrite):?>BlockTableRecord let id=btr.AppendEntity(Pl) tr.AddNewlyCreatedDBObject(Pl, true) tr.Commit() let doc = Application.DocumentManager.MdiActiveDocument let ed = doc.Editor ed.WriteMessage("\nHello World1!")
Advertisement