返回介绍

线型

发布于 2023-08-09 23:10:34 字数 5456 浏览 0 评论 0 收藏 0

DWG数据库中,线型样式存放在线型样式表中,表类名:MxDrawLinetypeTable,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawLinetypeTable.htm

线型样式表中每一条记录称为一种线型样式,类名:MxDrawLinetypeTableRecord,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawLinetypeTableRecord.htm

线型样式是随图纸保存,不同的图纸使用的线型样式都可能会不一样。

文字样式设置命令:Mx_Linetype, 比如:

ocx.SendStringToExecute("Mx_Linetype")

简单线型定义是通一个double数组来表示,大于零表示线型的实线长度,小于零表示线型的虚线长度,比如

1,-1,2,-2定义的线如下

linetype.png

在控件程序所在目录下有个mx.lin线型定义文件,定义了一些常用的线型,线型文件定义格式与AutoCAD线型定义文件一至,可在百度搜索到AutoCAD线型定义文件格式教程。

调用控件函数:LoadLinetypeFromFile从线型文件加载线型,函数详细说明:http://www.mxdraw.com/help/MxDrawXLib___DMxDrawX__LoadLinetypeFromFile@BSTR@BSTR@VARIANT_BOOL.htm

下面代码,从线型文件加CENTER线型,然使用该线型,画一条直线

 var  lId = mxOcx.LoadLinetypeFromFile(mxOcx.GetOcxAppPath() + "//mx.lin", "CENTER",true);
 mxOcx.LineType = "CENTER";
 mxOcx.DrawLine(0, 0, 100, 100);

修改全局线型比例代码如下:

//返回控件的数据库对象
 var database = mxOcx.GetDatabase();
 
// 设置全局线型比例
database.LinetypeScale = 2.0;

MxDrawDatabase的CurrentlyLineTypeScale属性,设置新增加到数据库的对象的默认线型缩放比例

MxDrawDatabase的CurrentlyLineTypeName属性,设置新增加到数据库的对象的默认线型

在有些时候,明明一些线有线型,但显示成实线的原因是,线型的中空白长度远远小于或远远大于当前视区显示的范围上长度(不在一个数量级上),此时控件会显示成实线,AutoCAD软件也一样。这时可以通修改对象的线型比例或全局线型比例,让线型的显示大小在一个合理范围内,也可通过放大或缩小视区后,然后使用重新命令重新生成显示。

线型在线演示例子:点击此处在线演示

A. 添加线型

使用控件的AddLinetype,AddLinetypeEx函数,添加一种线型,详细接口说明:http://www.mxdraw.com/help/MxDrawXLib___DMxDrawX__AddLinetype@BSTR@BSTR.htm

下面代码,添加一个虚线,然后绘制直线使用该线型

        //绘制一个虚线        
        //定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长。
        mxOcx.AddLinetype("MyLineType", "6,-10");
        //设置当前线型为"MyLineType"
        mxOcx.LineType = "MyLineType";
        //绘制一个虚线
        mxOcx.DrawLine(0, 30, 100, 30);
        mxOcx.UpdateDisplay();

下面代码,添加一个带文字的线型,如下:

        //  先添加一个线型中使用的文字样式        
        mxOcx.AddTextStyle1("MyLineTypeTextStyle", "txt.shx", "hztxt.shx", 1);
        //增加一个带有形的线型
        mxOcx.AddLinetypeEx("MyLineType3", "(12.7,(\"T=MxDraw\",\"S=2.54\",\"L=-5.08\",\"R=0.0\",\"X=-2.54\",\"Y=-1.27\"),-10.08)", "MyLineTypeTextStyle");
        // 设置当前绘图函数使用的线型
        mxOcx.LineType = "MyLineType3";
        mxOcx.LineWidth = 0;
        //绘制一个带宽度的红色点划线。
        mxOcx.DrawLine(300, 120, 600, 120);
        mxOcx.LineWidth = 4;
        //绘制一个带宽度红色点划斜线
        mxOcx.DrawLine(300, 220, 600, 220);
        //更新视区显示
        mxOcx.UpdateDisplay();

运行效果如下:

lt.png

B. 得到图上所有线型

下面C#代码,取到数据库的线型表,然后遍历表中所有线型记录对象,并得到线型名输出

        var database = mxOcx.GetDatabase();
        //返回数据库中的线型表对象
        var linetypeTable = database.GetLinetypeTable();
        //创建遍历器
        var iter = linetypeTable.NewIterator();
        if (iter == null)
            return;
        var sRet = null;
        //移动当前遍历器位置
        for (; !iter.Done(); iter.Step(true, false))
        {
            //返回遍历器当前位置的线型样式
            var lineType = iter.GetRecord();
            //得到文字样式名
            sRet = sRet + ',' + lineType.Name;
        }
        alert(sRet);

C. 修对象的线型

下面代码,让用户在图上选择一个对象,然后新增加一个线型,再把对象的线型改成新增加的线型。

        var ent = mxOcx.GetEntity("\n 选择实体对象:");
        if (ent == null)
        {
            return;
        }
        mxOcx.AddLinetype("MyLineType", "6,-10");
        
        // 设置实体线型。
        ent.LineType = "MyLineType";
        alert("已经修改线型");
        mxOcx.UpdateDisplay();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文