C#之AutoCAD图层样式定义

1、需求
AutoCAD图形绘制需要放置在相关图层,本文就针对AutoCAD图层样式进行定义

2、思路
根据CAD自带的图层样式以及参考相关接口设置图层样式

3、环境
AutoCAD 2018/vs2015

4、步骤:
(1) 新建一个临时图形数据库

Database tempDB = new Database(false, true);

(2) 定义图层名称以及图层颜色

(3) 设置图层线宽以及线形

(4) 把设置的图层信息添加到块表记录中

BlockTableRecord.AppendEntity()
Transaction.AddNewlyCreatedDBObject();

关键代码:

    /// <summary>
    /// 标准图层配置
    /// </summary>
    public static void InitLayer()
    {   
        Database acCurDb = HostApplicationServices.WorkingDatabase;
        using (Transaction tr = acCurDb.TransactionManager.StartTransaction())
        {
            Dictionary<string, short> ldic = new Dictionary<string, short>()
            {
                ["粗线"] = 4,
                ["细线"] = 2,
                ["标注"] = 7,
                ["文本"] = 7,
                ["中心线"] = 1,
                ["虚线"] = 3,
                ["标注"] = 7,
            };
            List<string> Lname = new List<string>() { "CENTER", "DASHED" };
            LayerTable acLyrTbl;
            acLyrTbl = tr.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable;
            LinetypeTable acLinTbl;
            acLinTbl = tr.GetObject(acCurDb.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
            foreach (string ltname in Lname)
            {
                if (!acLinTbl.Has(ltname))
                {
                    acCurDb.LoadLineTypeFile(ltname, "acad.lin");
                }
            }
            LayerTableRecord acLyrTblRec = new LayerTableRecord();
            foreach (string key in ldic.Keys)
            {
                short cid = ldic[key];
                acLyrTblRec = new LayerTableRecord();
                if (!acLyrTbl.Has(key))
                {
                    acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, cid);
                    if (cid != 4) { acLyrTblRec.LineWeight = LineWeight.LineWeight009; }
                    else { acLyrTblRec.LineWeight = LineWeight.LineWeight030; }
                    if (cid == 1) { acLyrTblRec.LinetypeObjectId = acLinTbl["CENTER"]; }
                    if (cid == 3) { acLyrTblRec.LinetypeObjectId = acLinTbl["DASHED"]; }
                    if (cid == 8) { acLyrTblRec.IsPlottable = false; }
                    acLyrTblRec.Name = key;
                    if (acLyrTbl.IsWriteEnabled == false) acLyrTbl.UpgradeOpen();
                    acLyrTbl.Add(acLyrTblRec);
                    tr.AddNewlyCreatedDBObject(acLyrTblRec, true);
                }
                else
                {
                    acLyrTblRec = tr.GetObject(acLyrTbl[key], OpenMode.ForWrite) as LayerTableRecord;
                    if (cid != 4) { acLyrTblRec.LineWeight = LineWeight.LineWeight009; }
                    else { acLyrTblRec.LineWeight = LineWeight.LineWeight030; }
                    if (cid == 1) { acLyrTblRec.LinetypeObjectId = acLinTbl["CENTER"]; }
                    if (cid == 3) { acLyrTblRec.LinetypeObjectId = acLinTbl["DASHED"]; }
                    if (cid == 8) { acLyrTblRec.IsPlottable = false; }
                    acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, cid);
                }
            }  
            tr.Commit();
        }
    }

————————————————
版权声明:本文为CSDN博主「wnzsj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wnzsj/article/details/121858950

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值