CAD二开(c#)小试牛刀系列11-1简单补遗(WinForm,新建图层,标注设置,资源释放)

使用工具==CAD2018+VS2022

主要作用==第一是对上一篇(winform窗口很简单,因为刚学会)重新理解,第二是新建图层与在winform中调用问题,第三是标注的简单设置

一:关于winform窗口

1--窗口的创建与运行同上一篇一模一样

2--重点是ShowModalDialog有模式窗口与ShowModelessDialog无模式窗口的理解

2.1--ShowModalDialog有模式窗口:该窗口运行后会占据CAD主界面,该窗口未退出时CAD主界面会锁住导致不能有复杂的操作, 如果要使用此窗口建议使用释放资源Dispose(true),或this.Close()来关闭该窗口。

2.2--手动释放资源Dispose:参数true表示释放所有资源,false表示只释放部分非托管的资源

2.3--ShowModelessDialog无模式窗口,该窗口不会锁定CAD主界面,但当数据有变化时需要手动来锁定文档doc.LockDocument()【属于Document类下面】,如果不锁定CAD会报错

创建窗口:就是下面这两句个代码

Form1 MyForm = new Form1();//实例化窗体

acadApp.Application.ShowModelessDialog(MyForm);//在CAD中展示无模式窗口

acadApp.Application.ShowModalDialog(MyForm);//在CAD中展示有模式窗口

锁定文档代码示例:

//绘制图形
doc.LockDocument();//锁定文档
//当使用ShowModelessDialog窗口时,后面的代码是添加数据到模型空间,不锁定文档就会报错

//绘制封口线
Tools.AddEntityToModelSpace(lin1);
Tools.AddEntityToModelSpace(lin2);

//添加N1
Tools.AddEntityToModelSpace(tN1);
Tools.AddEntityToModelSpace(tN2);

//添加标注
Tools.AddEntityToModelSpace(dimN2);
Tools.AddEntityToModelSpace(dimN1);
Tools.AddEntityToModelSpace(dimB);
Tools.AddEntityToModelSpace(dimH);
Tools.AddEntityToModelSpace(dimRec);
Tools.AddEntityToModelSpace(dimFold1);
Tools.AddEntityToModelSpace(dimFold2);
Tools.AddEntityToModelSpace(p3dim);

//绘制多段线
ObjectId pLineid = Tools.AddEntityToModelSpace(pline);
Tools.AddEntityToModelSpace(plineRec);

//偏移多线
Tools.FoldOffset(pLineid, -thick);

二:创建图层

如果只使用dll类库而不使用winform窗口来创建,可以跳过不用看;如果要使用winform窗口的按钮来创建,当使用ShowModelessDialog无模式窗口时 button1下要锁住文档,或者在主函数(就是要展示CAD窗口)下运行,不然很大几率会报错

主函数运行

Form1 MyForm = new Form1();//实例化窗体
acadApp.Application.ShowModelessDialog(MyForm);

/创建图层代码 或 自定义函数/

创建图层代码展示:

传入 图层名+颜色
public static void AddLayer(string name, short index)
{
    Database db = acadApp.Application.DocumentManager.MdiActiveDocument.Database;
    Editor ed = acadApp.Application.DocumentManager.MdiActiveDocument.Editor;
    

    //打开事务
    using (Transaction trans = db.TransactionManager.StartTransaction())
    {
        //打开层表
        LayerTable lt = db.LayerTableId.GetObject( OpenMode.ForRead) as LayerTable;
        //判断 指定图层不存在时
        if (!lt.Has(name))
        {
            //实例化层表记录
            LayerTableRecord ltr = new LayerTableRecord();
            lt.UpgradeOpen();//升级为可写 
            ltr.Name = name;//图层名称                                   
            ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, index);//图层颜色,ByAci实体跟随图层颜色                    
            lt.Add(ltr);//添加层表记录
            trans.AddNewlyCreatedDBObject(ltr, true);//更新数据库对象
            trans.Commit();
        }

    }


}

使用button调用 创建图层函数 代码展示:

private void button1AddLayer_Click(object sender, EventArgs e)
{
    acadApp.Document doc = acadApp.Application.DocumentManager.MdiActiveDocument;
    string layName = "McbDim03";
    doc.LockDocument();//锁定文档
    Tools.AddLayer(layName,3);
    wind.MessageBox.Show("成功");
    Dispose(true);//释放资源 true表示释放所有资源,false表示释放非托管资源
}

三:标注设置

3.1标注样式:

添加标注样式 
public static ObjectId AddDimStyle(string dimStyName,int textHight)
 {
     Database db = acadApp.Application.DocumentManager.MdiActiveDocument.Database;
     
     using (Transaction trans = db.TransactionManager.StartTransaction())
     {
         //打开标注样式表
         DimStyleTable dimT = db.DimStyleTableId.GetObject(OpenMode.ForRead) as DimStyleTable;
         if(!dimT.Has(dimStyName))//如果文件中没有 重名的标注样式
         {
             //打开标注样式记录表
             DimStyleTableRecord dimR = new DimStyleTableRecord();             
             dimT.UpgradeOpen();//升级为可写
             dimR.Name = dimStyName;//标注样式名
             dimR.Dimasz = 3;//箭头大小
             dimR.Dimexe = 3;//超出尺寸线
             dimR.Dimtad = 1;//文字位置位于标注线上
             dimR.Dimdec = 0;//标注精度
             dimR.Dimtxt = textHight;//文字高度
             db.SetDimstyleData(dimR); //将标注样式加入数据库                   
             dimT.Add(dimR);//将 标注样式记录表 添加到 标注样式记录                    
             trans.AddNewlyCreatedDBObject(dimR, true);//更新数据库
             trans.Commit();
             
         }
         return dimT[dimStyName];//返回标注样式id
     }
     
 }

3.2:标注样式调用及标注设置(button调用)

 //三点 角度标注
 Point3AngularDimension p3dim = new Point3AngularDimension();//实例化 三点角度标注
 ObjectId dimId = Tools.AddDimStyle("dimB", 10);//添加 标注样式
 p3dim.DimensionStyle = db.GetDimensionStyleParentId(dimId);//设置标注样式        
 p3dim.Layer = layName;
 p3dim.ArcPoint = new Point3d((po2.X + po4.X) * 0.5 + 30, (po2.Y + po4.Y) * 0.5, 0);//标注位置
 p3dim.XLine1Point = new Point3d(po4.X, po4.Y, 0); ;//起点
 p3dim.XLine2Point = new Point3d(po2.X, po2.Y, 0);//终点
 p3dim.CenterPoint = new Point3d(po3.X, po3.Y, 0);//中心点

//线型标注
//标注N1
RotatedDimension dimN1 = new RotatedDimension();//实例化线型标注
dimN1.Rotation = Math.PI * 0.5;//Math.PI * 0.5表示垂直,默认为水平
dimN1.DimensionStyle = db.GetDimensionStyleParentId(dimId);//设置标注样式
dimN1.Layer = layName;//指定图层
dimN1.DimLinePoint = new Point3d(poMid45.X - 5, poMid45.Y, 0);//标注位置
dimN1.XLine1Point = po5;//标注 起点
dimN1.XLine2Point = new Point3d(po4.X, po4.Y, 0);//标注 终点

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值