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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用C#编程语言通过AutoCAD的API来获取所有的箭头样式。下面是一个示例代码,演示了如何在AutoCAD中获取箭头样式的名称和描述: ```csharp using System; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; namespace GetArrowStyles { public class Commands { [CommandMethod("GetArrowStyles")] public void GetArrowStyles() { // 获取当前文档和数据库 Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; // 开启事务 using (Transaction tr = db.TransactionManager.StartTransaction()) { // 获取箭头样式表 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead); ObjectId arrowTextStyleId = db.Textstyle; TextStyleTableRecord textStyle = (TextStyleTableRecord)tr.GetObject(arrowTextStyleId, OpenMode.ForRead); // 遍历箭头样式表 foreach (ObjectId arrowId in textStyle.AnnotativeScalingEnabled ? textStyle.GetAnnotativeScalingArrowHeads() : textStyle.GetNonAnnotativeScalingArrowHeads()) { ArrowHead arrowHead = (ArrowHead)tr.GetObject(arrowId, OpenMode.ForRead); string name = arrowHead.Name; string description = arrowHead.Description; // 输出箭头样式的名称和描述 doc.Editor.WriteMessage("Arrow Style: {0}, Description: {1}", name, description); } // 提交事务 tr.Commit(); } } } } ``` 您可以将上述代码保存为一个C#类文件,并在AutoCAD中加载运行。运行命令`GetArrowStyles`后,您将获得所有箭头样式的名称和描述信息。请注意,您需要在AutoCAD中启用.NET加载项以运行此代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值