int acedInitGet(
int val,
const ACHAR * kwl
);
描述:
初始化下次调用用户输入函数所使用的选项,例如acedGetXxx()、acedDragGen()、acedEntSel()、acedNEntSelP()或acedNEntSel()。
注意:
由acedInitGet()建立的控制位和关键字仅应用于下一个用户输入函数调用。它们被立即丢弃。应用程序不需要第二次调用acedInitGet()来清除任何特殊条件。
如果acedInitGet()成功,它返回RTNORM;否则,它返回RTERROR。
用户输入选项:
下表总结了可以由val参数指定的控制位。若要一次设置多个条件,请将这些值相加以创建0到255之间的val值。如果val设置为0,则所有控制条件都不适用于下一个用户输入函数调用。
注意:
未来版本的AutoCAD或ARX可能会使用额外的acinitget()控制位,因此避免设置表中没有显示的位。
Bit value
|
Code
|
Description
|
1
|
RSG_NONULL
|
禁止空输入
|
2
|
RSG_NOZERO
|
禁止输入0
|
4
|
RSG_NONEG
|
禁止输入负数
|
8
|
RSG_NOLIM
|
不检查绘图限制,即使LIMCHECK是打开的
|
32
|
RSG_DASH
|
在画橡皮筋线或框时使用虚线
|
64
|
RSG_2D
|
忽略3D点的Z坐标(仅acedGetDist())
|
128
|
RSG_OTHER
|
允许任意输入——无论用户类型是什么
|
256
|
RSG_DDISTFIRST
|
强制直接距离输入优先于任意输入
|
512
|
RSG_TRACKUCS
|
允许UCS跟随面
|
1024
|
RSG_NOORTHOZ
|
在Z方向禁用极性/otrack/ortho跟踪
|
2048
|
RSG_NOOSNAP
|
禁用对象快照
|
下面的列表更详细地描述了每一个控制Bit。
RSG_NONULL--阻止用户通过只输入[Return]或空格来响应请求。
RSG_NOZERO--通过输入0阻止用户响应请求。
RSG_NONEG--通过输入负值阻止用户响应请求。
RSG_NOLIM--使用户可以在当前绘图限制之外输入一个点。即使当前设置了AutoCAD LIMCHECK系统变量,此条件也适用于下一个用户输入函数。
目前未使用。
RSG_DASH--对于那些允许用户通过选择图形屏幕上的位置来指定点的功能,使AutoCAD显示的橡皮筋线或框显示为虚线而不是实线。(有些显示驱动程序使用独特的颜色而不是虚线。)如果POPUPS系统变量为0,则AutoCAD忽略此位。
RSG_2D--忽略由acedGetDist()返回的三维点的Z坐标,因此应用程序可以确保该函数返回二维距离。
RSG_OTHER--允许任意键盘输入。函数返回RTKWORD(在本例中acedDragGen()返回RTSTR),应用程序通过调用acedGetInput()来检索值。(因为空格可以终止除acedGetString()以外的所有用户输入函数的输入,由acedgetput()重新检索的任意字符串将不包含空格。)该位优先于位0;如果设置了第7位,并且用户输入[Return],则返回空字符串。
RSG_DDISTFIRST--给予直接距离输入优先于任意输入。对于外部应用程序,默认情况下,任意输入优先于直接距离输入。如果您希望强制AutoCAD将用户输入计算为直接距离输入,请设置此位。注意,来自键盘的合法点输入总是优先于直接距离或任意输入。
RSG_TRACKUCS--如果在调用acedGetPoint()或acedGetCorner()函数之前设置RSG_TRACKUCS,则当光标穿过实体的平面面边缘时,将建立一个临时UCS。当光标移离人脸时,临时UCS被重置。当光标移动到另一个面时,它会动态地重新建立。获得该点后,动态UCS将重置为当前UCS。对于非平面面(如圆柱体的侧面)不启用此功能。
RSG_NOORTHOZ--在调用acedGetDist()、acedGetAngle()、acedGetOrient()、acedGetPoint()或acedGetCorner()函数时,您可能不希望距离、角度、方向、点或角受Z方向上的邻位、极坐标或otracking的影响。在调用这些函数之前设置RSG_NOORTHOZ将暂时禁用Z方向上的ortho、polar和otracking。当您创建2D实体(如PLINE、ARC或CIRCLE)或使用ARRAY命令(该命令只创建2D数组)时,这非常有用。在只有2d的命令中,允许进入3D点可能会令人困惑和容易出错
当然,某些控制位只适用于某些函数,这取决于用户被请求输入的值的类型。如果acedInitGet()设置了一个控制位,并且应用程序调用了一个用户输入函数,而该位对该函数没有意义,则该位将被忽略。下表显示了哪些控制位应用于哪些用户输入函数。(控制位选项不应用于acedGetString()、acedEntSel()、acedNEntSelP()或acedNEntSel()函数。)
Function
|
Honors keywords
|
No null(1)
|
No zero (2)
|
No negative (4)
|
No limits (8)
|
Use dashes(32)
|
2D distance (64)
|
Arbitrary input(128)
|
Direct distance input(256)
|
UCS tracking for faces (512)
|
Disable Z-tracking (1024)
|
acedGetInt
|
X
|
X
|
X
|
X
|
|
|
|
X
|
|
|
|
acedGetReal
|
X
|
X
|
X
|
X
|
|
|
|
X
|
|
|
|
acedGetDist
|
X
|
X
|
X
|
X
|
|
X
|
X
|
X
|
X
|
|
X
|
acedGetAngle
|
X
|
X
|
X
|
|
|
X
|
|
X
|
X
|
|
X
|
acedGetOrient
|
X
|
X
|
X
|
|
|
X
|
|
X
|
X
|
|
X
|
acedGetPoint
|
X
|
X
|
|
|
X
|
X
|
|
X
|
X
|
X
|
X
|
acedGetCorner
|
X
|
X
|
|
|
X
|
X
|
|
X
|
X
|
X
|
X
|
acedGetKword
|
X
|
X
|
|
|
|
|
|
X
|
|
|
|
acedGetString
|
|
|
|
|
|
|
|
|
|
|
|
acedEntSel
|
X
|
|
|
|
|
|
|
|
|
|
|
acedNEntSel
|
X
|
|
|
|
|
|
|
|
|
|
|
acedNEntSelP
|
X
|
|
|
|
|
|
|
|
|
|
|
acedDragGen
|
X
|
X
|
|
|
|
|
|
X
|
|
|
|
关键字的规范
可选的kwl参数指定一个关键字列表,这些关键字将由下一个用户输入(acedGetXxx())函数调用或acedDragGen()、acedEntSel()、acedNEntSelP()或acedNEntSel()调用识别。用户输入的关键字值可以通过后续调用acedGetInput()来检索。(如果用户输入函数是acedGetKword(),则关键字值已经可用。)关键字的含义和对每个关键字执行的操作是ARX应用程序的责任。
kwl参数是一个单一字符串,根据以下规则进行解释:
1.每个关键字与下一个关键字之间用一个或多个空格隔开。例如,“宽度、高度、深度”定义了三个关键字。
2.每个关键字只能包含字母、数字和“-”。
3.每个关键字规范都可以指导AutoCAD识别缩写,方法有两种:
3.1输入组成所需部分(缩写)的关键字的字母为大写字母,关键字的其余部分为小写字母。例如,如果您希望用户能够输入LT作为ltype的缩写,那么可以使用关键字“ltype”。缩写的字母不需要在关键字的开头。例如,用户可以通过输入eXit或x来选择关键字“eXit”。
3.2用大写字母输入整个关键字,后面紧跟着一个逗号,然后是缩写。例如,输入LTYPE,LT。这种方法在为不使用罗马字母表风格的大写字母和小写字母的语言开发应用程序时非常有用。
无论使用哪种方法,如果用户输入LT(大写或小写字母),这就足以识别关键字。用户可以输入关键字所需部分后面的字符,只要它们不与规范冲突。在本例中,用户还可以输入LTY或LTYP,但L是不够的,而且像LTSCALE或LTYPEX这样的东西将不匹配关键字的拼写。
1.如果kwl完全用大写或小写字母显示关键字,而没有逗号后接缩写,那么如果用户输入了全部关键字,则AutoCAD只识别该关键字。
acedGetInput()函数总是返回出现在kwl参数中的关键字,大小写相同(但不返回可选字符,如果在逗号后面指定了可选字符)。无论用户如何输入关键字,应用程序都只需要进行一次字符串比较就可以识别关键字。
全局关键字
kwl参数可用于本地和全局语言关键字组合。要关联本地关键字和全局关键字,kwl参数必须由一个或多个本地关键字组成,后跟一个下划线,再后跟相关的全局关键字。在这个例子中,Ja与Yes配对,Nein与No配对:
acedInitGet(RSG_NONULL, "Ja Nein _ Yes No");
下划线后面列出的关键字被定义为全局的,并且总是返回的关键字。
用户可以通过输入适当的字符来使用本地关键字。在前面的例子中调用之后,J将返回Yes, N将返回No。要访问全局关键字,用户必须使用前导下划线后跟适当的字符。同样,按照前面例子中的调用,_Y将返回Yes, _N将返回No。函数调用中使用的前导下划线不会成为返回的关键字字符串的一部分。
本地和全局关键字之间不需要一对一匹配(也就是说,如果不匹配,函数调用不会失败),但是:
1.如果本地关键字(下划线之前)多于全局关键字(下划线之后),则接受没有相应全局关键字的本地关键字,但将返回一个空字符串("")。
2.如果全局关键字(下划线之后)比本地关键字(下划线之前)多,则没有相应本地关键字的全局关键字将被接受(只要包含前面的下划线)并返回。
全局机制适用于两种形式的关键字规范,如下所示:
acedInitGet(RSG_NONULL, "Ja NEIN,N _ YES,Y No");
这个调用是完全可以接受的,它将返回YES或No。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?