bartender一行打印两个二次开发_[CAD二次开发]问渠那得清如许——更多的类型(一)...

本文深入探讨CAD二次开发中用户交互相关的类,如PromptPointOptions、PromptPointResult等,并通过示例展示如何利用这些类进行点选、线宽和颜色输入的交互操作。通过封装方法实现绘制不同颜色和线宽的直线,增强对CAD类库的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这一篇,我们翻开CAD的类库看看更多的常用类型,这一篇计划分为三节。首先主动出击杠一件事情,标题当中问渠那得清如许中的“那”并非错别字,是个通假字,通“哪”,之所以想了这样一个标题是我认为想了解二次开发中更多的操作,就要首先了解类库中更多的类型。在C#学习笔记中也提到过,C#语言中,类型在声明出来之后就决定了它拥有的成员以及所配套的运算。那么,我们闲话少叙,这是第一节:就这上次说到的GetPoint交互类往下挖挖其他的用户交互相关的类,再看看这几种类型都有什么常见的属性和方法可以利用,同时封装一些新的可能有用的方法。

    鼠标指针选取点有关的两个类分别是PromptPointOptions,PromptPointResult,同时Editor类中对应的获取点的方法是GetPoint,为了方便,我们把前两个类依次叫做选项类和结果类,把GetPoint方法叫做获取方法,那么交互操作有关的其他的类关系可以概括为下表:

交互作用选项类结果类获取方法
鼠标点击一个点PromptPointOptionsPromptPointResultGetPoint
输入一个整数

PromptIntegerOptions

PromptIntegerResult

GetInteger

输入一个实数

PromptDoubleOptions

PromptDoubleResult

GetDouble

    那么这里先来看看PromptPointOptions:

abffe27b5eb15c8b70b836c88db2832d.png

    可以看到他有一个基类,那么再来看它的基类PromptCornerOptions:

64985ed2a5326328443a710740351155.png

    这些有些类成员看名字就大概知道含义:布尔属性UseBasePoint就是是否在选择点的过程中有一个鼠标悬停点到基点的提示,而BasePoint属性就是刚刚的基点,再比如:LimitsChecked界限检查,AllowNone是否允许空值等等。那么,与之对应的,PromptIntegerOptions与PromptDoubleOptions同样可以去观察他们的定义,它们都继承于PromptNumericalOptions类

7f81e3edb0a4a4b87263af20110c8e2e.png

62d6c21066fea7af4ea42346e4aab68c.png

    这里,可以通过属性来控制是否允许输入负值或空值,是否设置默认值等等。

    为了加强直观理解,还是采用实例来简单说明,来看这样一个过程:点两个点画一条直线,而后输入实数确定线宽,输入整数确定线的颜色(CAD的颜色在二次开发中用ColorIndex这个属性来控制,取值范围0-255,颜色值刚好是打印图纸的时候的选择的对应值)

    ColorIndex的定义:

b66c36648f269645a84bb0264feb44d7.png

    打印选择界面:

001bfa77dd0bf60c1f0b7fceadfc7943.png

    那么我们分别封装方法,获取线宽返回值为double类型,不需要参数,获取颜色返回值为int类型,不需要参数,这里注意取值范围的检测,其代码分别如下:

//获取线宽public static double GetWidth(){    //编辑栏    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;    //定义一个输入线宽的实数交互类    PromptDoubleOptions optDouble = new PromptDoubleOptions("\n请输入线宽");    //不允许输入负值    optDouble.AllowNegative = false;    //默认值为0    optDouble.DefaultValue = 0;    PromptDoubleResult doubleResult = ed.GetDouble(optDouble);    if (doubleResult.Status==PromptStatus.OK)    {        double width = doubleResult.Value;        return width;    }    else    {        return 0;    }}
//获取颜色public static int GetColor(){    //编辑栏    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;    //    PromptIntegerOptions optInt = new PromptIntegerOptions("\n请输入颜色的索引值(0-256)");    //默认值为0    optInt.DefaultValue = 0;    PromptIntegerResult IntResult = ed.GetInteger(optInt);    if (IntResult.Status==PromptStatus.OK)    {        int colorIndex = IntResult.Value;        //一共有0-255种颜色        if (colorIndex>0 & colorIndex<256)        {            return colorIndex;        }        else            return 0;    }    else        return 0;}

    封装好想要的方法后,在类库中注册命令,实现上述功能:

//注册命令[CommandMethod("InputNumber")]//命令所对应的方法public static void InputNumber(){    //数据库    Database db = HostApplicationServices.WorkingDatabase;    //当前编辑栏    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;    Point3d p1 = new Point3d();    Point3d p2 = new Point3d();    //选择一个点    PromptPointOptions opt1 = new PromptPointOptions("请选择起点");    PromptPointResult resP1 = ed.GetPoint(opt1);    if (resP1.Status==PromptStatus.OK)    {        p1 = resP1.Value;    }    else    {        return;    }    //选择直线的另一个点    PromptPointOptions opt2 = new PromptPointOptions("\n请选择终点");    PromptPointResult resP2 = ed.GetPoint(opt2);    if (resP2.Status==PromptStatus.OK)    {        p2 = resP2.Value;    }    else    {        return;    }    //获取线宽    double width=MyMethods.GetWidth();    //获取颜色    int color=MyMethods.GetColor();    //声明直线    Line line = new Line(p1, p2);    //赋值并添加到模型    line.Thickness = width;    line.ColorIndex = color;    db.AddToModelSpace(line);}

    效果如视频所示,特性中的Thickness就是我们选择的线宽,两条直线的颜色分别输入了5和2,如上面打印界面调整颜色的截图所示,分别为蓝色和黄色。

    好的,今天就演示到这里,这个过程呢也是我尽量将内容结合起来举的一个例子,以便了解和应用,问题的解决方法也不一定唯一,下一节看一下圆弧这个实体类以及输入关键字的交互类。有什么问题,指导或建议,欢迎关注并在公众号内留言,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值