[飞马系列] AutoCAD 2014 之Javascript API编程初探
[飞马系列]2014 之Javascript编程初探华南理工大学 qjchen
2013.10.1
(一)简介
Autocad 2014的一个重要特性,就是从这个版本开始支持Javascript编程了。
一直有些忙,前些日子稍空了,本人杂学而不精,颇喜尝新,花了几天学习了一下其编程入门,发现网络上此类似的学习心得不多,中文的似乎没有,于是将近日一些学习心得草录如下,权当学习笔记。不过最后两个例子,得迟些才能放上源码和介绍了。
1. 重要参考资料
1)Autocad Devblog,应该是官方开发人员的公用blog
这篇文章中的附件是一个开发视频及相关例子资料,是非常好的学习资料。
2) JavaScript Application Programming Interface (API) for AutoCAD
官方的API资料,不过从其中可以看出,现在其内容还是比较简陋的,正如第一版.net时候的帮助一样
3)Kean的相关文章
Kean是Autocad公司的二次开发专家,第一个官方附件中的好些例子其实就是出自Kean之手
其中的几篇博文
缩放显示物体到最大化
Jig圆
等,均是非常好的学习资料
本人研读了以上文献后入门。
2. Javascript 编程的优缺点
由于只是粗浅了解Javascript编程,以下仅为本阶段个人体会
1)方便网络编程,也可较方便地可以利用网络Javascript库。
这个Kean在其文章中也提到了希望引入Paper.js及leap.js等有趣的2d图形库。而本人也通过尝试d3.js库了解了利用网络库编程的优点,因此,如box2d、Processing.js、Raphaël、Math.js等图形库和物理引擎库等。熟悉Javascript的朋友自然可以更得心应手。而且,大家可以创建自己的函数库,放置于网络,及时更新。
帖子后文将介绍关于d3库用于delaunay图形绘制的代码。近两年,html5发展迅猛,基于html5的Javascript库如雨后春笋,这也必将对其他相关领域带来活力。
部分Javascirpt库可参见
等
2)可以很好地利用html界面。
Html+div+css是现在网络上流行的页面布局,善用div可以得到非常漂亮的页面。Javascript和.net的混合编程,可以通过.Net在Palette中引入html界面,这将使得页面布局更加简单和丰富。后文将以一个简单的例子来说明其应用
缺点:
由于并非很深入的研究,此处说法或许有误。
个人觉得Javascript毕竟是脚本类程序,可能在运行效率上比之Arx或者.Net有所不如。
另,由于Javascript在这一版本中首次引入,因此其函数有缺失。上次咨询了第一个文献的作者Philippe Leefsma后确认,Javascript API在本阶段并没有开放太多的物体数据库的操作函数(大概只是探路版本吧),因此比如画圆、获取多义线顶点等内容无法直接用Javascript进行操作,必须自编.Net程序或者ARX程序用于扩展Javascript函数,现阶段还是比较麻烦。
下面本人以3个感兴趣的几个自学例子探讨一下JavaScript的应用,仅当抛砖引玉。各位尽可讨论,不过鉴于本人水平有限,也不见得能回答。并对官方范例中的几个例子进行抓图说明。
**** Hidden Message *****
原来'http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
这个网站不好访问了,得重新下载https://code.jquery.com/jquery-3.2.1.min.js
放到同个目录下
把这句话改成
才能顺利运行 请问,为啥我的2018 和2019都无法执行webload的命令啊,输入了url,没有返回值啊 放弃吧,官方已经停止支持了,相关的连接已经失效,这是一次失败的尝试。
(2) Helloworld
下载附件得到helloworld.JS, 或打开记事本,键入如下代码,存为如helloworld.JS复制代码语句后解释,需要注意的“HELLOWORLD”必须是全部大写的。
打开AUTOCAD 2014(注意,此版本之后的才开始支持JAVASCRIPT编程,切记,本文均以针对此版本进行), 在命令行键入webload命令。
http://qjchen.mjtd.com/wp-content/uploads/2013/10/1.png
跳出如图命令行,键入文件全路径,(没有文件框,需自己键入,可通过与.NET交互编程实现界面选择)
http://qjchen.mjtd.com/wp-content/uploads/2013/10/2.png
之后,跳出此窗口,问是否加载,按加载
如顺利成功的话,会在命令行出现
Registered helloworld command.此语句
那么,键入helloworld
会在命令行出现
Hello World 的字样
http://qjchen.mjtd.com/wp-content/uploads/2013/10/3.png
再回过头来看那些代码复制代码这个与C#的语句还是比较类似的,建议可以找些JAVASCRIPT的入门教程学下,我自己也不太懂,边学边记录。复制代码这个必须查AUTOCAD JAVASCRIPT API函数了
到
(2) 自定义漂亮菜单
界面如下
http://qjchen.mjtd.com/wp-content/uploads/2013/10/16.png
Mjtd许多朋友很喜欢采用自制菜单来实现对自定制命令的使用
如老迈兄等都曾经推出过许多方便使用的Lisp工具
但要制作一个漂亮的菜单确实也不容易,即使在.net中也不容易
相对而言,应用html的菜单确实网上随处可见,利用ACAD官方例子中的ACHTML范例,可非常容易做出上图的效果
Mjtd许多朋友很喜欢采用自制菜单来实现对自定制命令的使用如老迈兄等都曾经推出过许多方便使用的Lisp工具但要制作一个漂亮的菜单确实也不容易,即使在.net中也不容易相对而言,应用html的菜单确实网上随处可见,利用上述的ACHTML范例,可非常容易
先学下怎么做HTML+CSS的菜单对于HTML,大家总可以看到许多漂亮的菜单,这种菜单可以是JAVASCRIPT做的,也可能是FLASH做的,或者是其他类型的。CSS是叫样式表,我也只懂皮毛,美工好的朋友可以用之做出非常炫的效果,也可以制作多种主题,随时更换skin(皮肤)。参考资源:1. CSS禅意花园,这是一个非常著名的关于CSS的网站
(3) Delaunay 三角网的建立
之前说过,Javascript最大的一个优势,是可以在线引用函数库,那么现在HTML5的势头很猛,不少非常有趣的JAVASCRIPT函数库也逐步推出,我们不妨一试,下面是我采用D3.JS函数库进行的Delaunay三角形测试。如下图
之前说过,Javascript最大的一个优势,是可以在线引用函数库,那么现在HTML5的势头很猛,不少非常有趣的JAVASCRIPT函数库也逐步推出,我们不妨一试,下面是我采用D3.JS函数库进行的Delaunay三角形测试。如下图
好的,终于有点时间了
打开附件中的dwg
如图所示,就是在一个(0,0)-(960,500)的矩形,内部有一些零散的点。
本文的目的是针对此零散点,建立Delaunay关系图。
之所以选择(960,500)并没有特别的意义,只是为了保证后面的图形出现在左边的HTML界面中而已。
附件中有一个test.js和一个delaunay-me.html
其中的delaunay-me.html的内容是大量引用了
(5) 官方范例中的一些应用截图说明
其实这个在3楼,4楼中应该都得用到,此处放到最后,主要是让2,3,4楼连续而已
所下载的autocad_2014_getting_started_with_javascript_api 文件中,分了
http://qjchen.mjtd.com/wp-content/uploads/2013/10/4.png
等几个部分
其中Sample就是一些代码
Recording是一个视频,是配合pptx讲解的
看一遍可对整个Javascript开发有个比较清晰的认识。
而Sample目录中
http://qjchen.mjtd.com/wp-content/uploads/2013/10/5.png
Extending Js API Test 是介绍和.NET及ARX进行结合,扩展JAVASCRIPT FOR AUTOCAD API的功能的,如上所述,此版本的JAVASCRIPT还比较简单,许多功能没有提供,但是开发人员自己可以通过.NET或者.ARX给JAVASCRIPT API加函数,比如画线,取坐标等基本功能现阶段都得靠编外接函数来实现,所以,此版本只能算是一个展现思想的版本。
Achtml是一个.Net程序源码,是教你如何用Palette(也就是CAD中的各种面板)来调用Html文件,而html文件中可以内置Javascript代码的。这点将使得Javascript不在是枯燥的后台,而是可以通过html来展示其迷人魅力的了,这点是我感觉最深的。
http://qjchen.mjtd.com/wp-content/uploads/2013/10/6.png
里面包括了这么多内容,后面将抓几张应用图表明他们的作用的
http://qjchen.mjtd.com/wp-content/uploads/2013/10/7.png
后面两个目录,由于尚未仔细研究,待学习后再补上
以下简单介绍一下ACHTML中的几个应用
那么,要使用这个ACHTML,必须先用VISUAL STUDIO 2010(2008有可能是不行的)
打开ACHTML进行编译,编译成功后
到AUTOCAD命令行键入 NETLOAD,然后找到/bin/debug/ AcHTML.dll进行加载 (与普通.Net程序无异)。
加载完毕后,键入ADNJSDEMO,那么可以到ACHTML/UnitTests/找到某个html进行导入,
http://qjchen.mjtd.com/wp-content/uploads/2013/10/8.png
比如这个TESTPREVIEW的
http://qjchen.mjtd.com/wp-content/uploads/2013/10/9.png
那么,左图中的capture preview,就会实现对当前界面的抓图,挺有趣的
Testview是一些获取与视图相关的函数测试 (里面的zoom的我测试总有问题)
http://qjchen.mjtd.com/wp-content/uploads/2013/10/10.png
Sysvar是与系统变量相关的
http://qjchen.mjtd.com/wp-content/uploads/2013/10/11.png
PromptSelection是与选择相关的
http://qjchen.mjtd.com/wp-content/uploads/2013/10/12.png
Prompt是和prompt相关的(好像很废话)主要就是测试如要求选矩形,填整数之类的
http://qjchen.mjtd.com/wp-content/uploads/2013/10/13.png
Misc中是几个命令测试
http://qjchen.mjtd.com/wp-content/uploads/2013/10/14.png
如显示页面、高亮物体、执行命令等,不过我在测试这个的时候,CAD崩溃了几次 J
http://qjchen.mjtd.com/wp-content/uploads/2013/10/15.png
比如你选中了一个物体作为listener之后,以后每次如移动这个物体,就会得到相应的Event的记录。
这次长见识了 谢谢喜欢 :)
终于把delaunay的补全了,过了许久。
找些时间再检查一遍,改改错。
页:
[1]
2