如果右键按Enter键,您只需稍微移动手指,单击按钮即可立即运行命令。这就是为什么许多用户将Enter功能分配给右键。考虑到使用相同的操作来确认数据(类似于OK)并重复命令,很明显为什么右键非常重要。但有一个例外:选择对象时,您可能希望复制,移动或修改其属性。可以使用上下文菜单和右键。当没有选择任何选项时,重复最后一个命令选项非常有用。因此,如果您调整nanoCAD,如图2所示。2,您的工作效率将呈指数级增长!
nanoCAD为CAD应用程序开发提供了几种类型的API。为了构建实用程序和小型应用程序,您可以使用基于ActiveX Automation(JScript和VBScript)的脚本。下面我们将通过创建一个小应用程序来展示它是如何工作的,该应用程序通过命令行与用户交互并自动在nanoCAD的绘图空间上以预定义的顺序绘制线条。基于此示例,您可以创建自己的应用程序。
演示示例的结果应类似于下图:
任务
您使用的编程语言之间没有显着差异:nanoCAD支持Java脚本以及VisualBasic脚本。在本文中,使用了VisualBasic脚本。
为了演示VB脚本的工作,我们将把LISP脚本转换为VB脚本。通过使用递归函数绘制图1中所示的形状。让我们在VB脚本中创建相同的形状。
图1.通用的Sierpinski曲线
该计划的结构
nanoCAD中的VB脚本没有任何输入功能。脚本从第一行开始运行并一直运行到最后。主程序模块非常简单-只需一次迭代。让我们从它开始:
LISP中的代码
VBScript中的代码
(setqh(div*SquareSize*4))
(setqx0(div*MaxX*2))
(setqy0(+(div*MaxY*2)h))
do((i1))
((eqli(+计数1))'完成)
(setqx0(-x0h))
(setqh(divh2))
(setqy0(+y0h))
(setqPxx0Pyy0)
(Ai)
(Line1h)
(Bi)
(3h线)
(Ci)
(5h线)
(Di)
(7h线)
(setqi(+i1)))
h=SquareSize\4
x0=MaxX\2
y0=h+MaxY\2
fori=1tocount
x0=x0-h
h=h\2
y0=y0+h
Px=x0
Py=y0
A(i)
Line1,h
B(i)
第3行,h
C(i)
第5行,h
D(i)
第7行,
接下来是h
从代码中我们可以看到Sierpinski曲线由四个递归函数绘制:A(),B(),C(),D()。还有一个特殊的线(方向,尺寸)功能,它以必要的比例和所需的角度绘制一条线。这些函数的定义由VBS工具实现,例如,A()函数将在LISP和VBS中描述为:
LISP中的代码
VBScript中的代码
defunA(k)
(cond((>k0)
(A(-k1))
(Line1h)
(B(-k1))
(第0行(*2h))
(D(-k1)
(第7小时)
(A(-k1))
))
SubA(k)
如果k>0则
A(k-1)
行1,h
B(k-1)
行0,2*h
D(k-1)
行7,h
A(k-1)
结束If
结束子
将这五个附加功能放在主脚本的末尾。以下步骤将介绍nanoCAD中的输出图形并与用户进行交互。
第一步
首先,VB-Script是一个带有.vbs文件扩展名的文本编辑器,可以使用VBS在nanoCAD中运行(见图2)。这很容易,您应该只指定脚本路径,如果编写正确,脚本可以正常工作。如果脚本有任何错误,则会在命令行中显示有关它的消息。
图2。Java和VisualBasic脚本相应地由JS和VBS命令运行
VB语法是完全标准的,所以我们可以使用DIM,SET,FOR-NEXT,IF-THEN-ELSE,变量声明,数组和标准特性(如CStr()或MsgBox()),函数声明和/或整数除法运算。
要访问当前图形,请使用ThisDrawing。如果要在模型空间(“模型”选项卡)中绘制,则将通过以下结构定义ModelSpace集合:
Dimms
设置ms=ThisDrawing.ModelSpace
对命令行的访问是通过Utility对象执行的。该脚本(如下所示)在命令行中输出经典问候语:
Dimut
Setut=ThisDrawing.Utility
ut.Prompt(“Hello,world!”)
使用GetInteger(),GetPoint(),GetString(),GetReal(),GetEntity(),GetDistance(),GetAngle()函数以及其他一些函数,可以从命令行请求数据。例如:
do
count=ThisDrawing.Utility.GetInteger(“指定正数(>=1)”)
循环当count<=0时
i=1计数
点=ThisDrawing.Utility.GetPoint(“0,0,0”,“指定点№“&i)
下一步
如果您知道输入数据的位置以及如何与用户交互,则可以开始编写更复杂的程序。
最关键的功能
nanoCAD还可以使用哪些其他功能?通常,您可以使用由DWG文件结构定义的所有函数:绘制直线,圆弧,圆,阴影线,定义点,极坐标,打开/关闭文件,使用图层,变量等。这些函数是在DWG的SDK文档中描述:Autodesk(开发人员中心部分)或开放设计联盟。
我们将使用AddLine(起点,终点)函数来创建2D线。您还可以使用以下功能:
AddCircle(center,radius)-circle;
AddArc(center,radius,startangle,endangle)-arc;
AddEllipse(center,majoraxis,radiusratio)-椭圆;
AddPolyline(verticeslist)-折线;
AddText(textstring,insertionpoint,height)-单行文本;
AddMText(插入点,宽度,文本)-多行文本。
转移到nanoCAD中的坐标可以是三维的。在这种情况下,它是三维数组,但传递«x,y,z»线更为舒适,其中x,y,z是三维坐标。就像这样:
Dimms
设置ptStr=CStr(x)+“,”+CStr(y)+“,”+CStr(y)
此脚本中的行也位于不同的层中。为此,您应该在开头创建两个新图层,然后更改当前图层:
设置oLyrLine1=ThisDrawing.Layers.Add(“Connections”)
设置oLyrLine2=ThisDrawing.Layers.Add(“Rectangles”)
...
case5:
设置oLyr=oLyrLine1
case6:
设置oLyr=oLyrLine2
...
oLine.Layer=oLyr.Name
结果
最后你应该得到如图3所示的结果。当然,这个结果没有任何特别的用处(除了审美愉悦),但它提供了一些思考和自我改进的食物。
如图3所示。VBScript命令的结果
你可以在这里下载演示脚本:demoscript.zip。使用任何文本编辑器下载,解压缩,打开,在nanoCAD中学习并运行它。还有一点提示:不要将曲线的顺序设置为4以上,否则会卡住:-)