CAD二次开发IFoxCAD框架系列(21)-线型表的操作

1. 线型表的查询(查询常用的三种线型)

每个 AutoCAD 图形会自动加载 3 种线形:ByLayer、ByBlock和 CONTINUOUS,可以通过下述方式获得这三种线型的 ObjectId。

    [CommandMethod(nameof(getLinetypeObjectId))]
    public void getLinetypeObjectId()
    {
        using var tr = new DBTrans();
        ObjectId byBlockId = SymbolUtilityServices.GetLinetypeByBlockId(tr.Database);
        ObjectId byLayerId = SymbolUtilityServices.GetLinetypeByLayerId(tr.Database);
        ObjectId continuousId = SymbolUtilityServices.GetLinetypeContinuousId(tr.Database);
        Env.Printl("byBlockId: " + byBlockId + " byLayerId: " + byLayerId + " continuousId: " + continuousId);
    }

在这里插入图片描述

  1. 随层(ByLayer):
    随层的意思就是对象的颜色、线型和线宽属性继承当前层的属性,也就是在定义块时将图形对象绘制在0层,将当前层的颜色、线型和线宽属性设置为随层。

  2. 随块(ByBlock):
    随块的意思就是对象的颜色、线型和线宽属性使用它所在的图块的属性,就是图块内部的对象属性的改变只能是在块编辑或块定义时才能改变。即假如按上面的步骤改变颜色,新插入的块将不会改变颜色。但如果在块编辑的情况下改变颜色,新插入的块也会改变颜色。

  3. 连续线(continuous)
    这是AutoCAD默认的线型,也就是我们说的实线。

输入LTYPE命令,直接可以在『线型管理器』对话框中看到默认加载的线型:ByLayer,ByBlock和Continuous,如下:
在这里插入图片描述

2. 根据名称查询线型

查看线型表中是否含有名为“CENTER”的线型。

using var tr = new DBTrans();
if (tr.LinetypeTable.Has("CENTER"))
{
//要执行的操作
}

3. 线型名称遍历

遍历线型表并打印每个线型的名字 。

    [CommandMethod(nameof(getLinetypeNames))]
    public void getLinetypeNames()
    {
        using var tr = new DBTrans();
        tr.LinetypeTable.GetRecordNames().ForEach(action: (linetypeName) => linetypeName.Print());
    }

在这里插入图片描述

4. 线型的新增

4.1 加载已有线型

从 acadiso.lin 线型文件中加载指定线型 CENTER ,并返回 CENTER 线型的 ObjectId。

    [CommandMethod(nameof(loadLineTypeFile))]
    public void loadLineTypeFile()
    {
        using var tr = new DBTrans();
        if(!tr.LinetypeTable.Has("CENTER"))
        {
            tr.Database.LoadLineTypeFile("CENTER", "acadiso.lin");
            var objectId = tr.LinetypeTable["CENTER"];
            Env.Printl("objectId: " + objectId);
        }
    }

在这里插入图片描述
在这里插入图片描述

4.2 加载自定义 *.lin 文件里的所有线型(已有线形会触发异常)

try
{
	using var tr = new DBTrans();
	tr.Database.LoadLineTypeFile("*", "D:\\文件名.lin");
}
	catch (Exception)
{
}

4.3 新建自定义线型

自定义一个 DASHLINES 线型。

    [CommandMethod(nameof(LinetypeAdd))]
    public void LinetypeAdd()
    {
        using var tr = new DBTrans();
        tr.LinetypeTable.Add("DASHLINES", (ltr) =>
        {
            ltr.AsciiDescription = "虚线";//线型说明
            ltr.PatternLength = 0.95;//组成线型的图案长度(划线、空格、点)
            ltr.NumDashes = 4;//组成线型的图案数目
            ltr.SetDashLengthAt(0, 0.5);//0.5个单位的划线
            ltr.SetDashLengthAt(1, -0.25);//0.25个单位的空格
            ltr.SetDashLengthAt(2, 0);//一个点
            ltr.SetDashLengthAt(3, -0.25);//0.25个单位的空格
        });
    }

在这里插入图片描述

4.4 自定义一个带文字的线型

 [CommandMethod(nameof(LinetypeAddText))]
    public void LinetypeAddText()
    {
        using var tr = new DBTrans();
        tr.LinetypeTable.Add("文字线型", ltrText =>
        {
            //添加带文字的线型
            ltrText.AsciiDescription = "文字";//线型说明
            ltrText.PatternLength = 0.9;//组成线型的图案长度(划线、空格、点)
            ltrText.NumDashes = 3;//组成线型的图案数目
            ltrText.SetDashLengthAt(0, 0.5);//0.5个单位的划线
            ltrText.SetDashLengthAt(1, -0.2);//0.2个单位的空格
            ltrText.SetShapeStyleAt(1, tr.TextStyleTable["Standard"]);//设置文字的文字样式
            //文字在线型的 X 轴方向上向左移动0.1个单位,在Y轴方向向下移动0.05个单位。
            ltrText.SetShapeOffsetAt(1, new Vector2d(-0.1, -0.05));
            ltrText.SetShapeScaleAt(1, 0.1);//文字的缩放比例
            ltrText.SetShapeRotationAt(1, 0);//文字的旋转角度为0(不旋转)
            ltrText.SetTextAt(1, "GAS");//文字内容
            ltrText.SetDashLengthAt(2, -0.2);//0.2个单位的空格
        });
    }

在这里插入图片描述

5. 当前线型的设置

将 CENTER 设为当前线型

[CommandMethod(nameof(SetCurrentLineType))]
    public void SetCurrentLineType()
    {
        using var tr = new DBTrans();
        //查找是否包含CENTER线型
        if(!tr.LinetypeTable.Has("CENTER"))
        {
            tr.Database.LoadLineTypeFile("CENTER", "acadiso.lin"); //导入CENTER线型
        }
        tr.Database.Celtype = tr.LinetypeTable["CENTER"];
    }

在未选中任何对象的状态下,按ctrl+1打开特性选项板,即可查看当前线型。
在这里插入图片描述
修改后为
在这里插入图片描述
这里也可以查看
在这里插入图片描述

6. 线型删除

卸载 CENTER 线型。

    [CommandMethod(nameof(DeleteLineType))]
    public void DeleteLineType()
    {
        using var tr = new DBTrans();
        tr.LinetypeTable["CENTER"].Erase();
    }

在这里插入图片描述

注意 : 不能卸载如下线型:

  • BYBLOCK
  • BYLAYER
  • CONTINUOUS
  • 当前线型
  • 已使用的线型
  • 外部参照的线形
  • 块定义中的线型

删除会提示错误
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术闲聊DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值