用Vspaste写彩色代码

//以下是个人第一个用F#编写的ACAD 二次开发程序,用于测试几个功能
// 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!") 
    
    
    

转载于:https://www.cnblogs.com/qjchen/archive/2010/08/07/1794765.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值