Autolisp在mac os下的简单交互
Autocad for mac的尴尬
凡是使用Autocad的人都知道,Autocad提供了强大的二次开发功能。其中最基础的是Autolisp,在此之上还有更加强大的DCL交互,ActiveX对象等功能。
然而,mac版的Autocad由于系统差别,却只能提供基础的Autolisp,并不支持大量的扩展函数,也无法提供窗口交互。
也就是说,当需要提示用户输入一个数据时,只能通过命令栏,却不能弹出窗口。同时输入的数据也不能包含空格。(因为那样就等同于回车)
要做到窗口交互,我们就只能通过objectarx。那又是一个更大的坑。不仅不具有跨平台的便捷性,甚至连跨版本都是个麻烦事。
变通的解决方案
但这并不是说这个问题就无解了。我们仍然可以用一个简单的办法做到方便快捷的达到窗口交互的目的。
这里就要利用Autocad中一个强大的功能,属性块。
我们在插入属性块时,需要指定每个属性的值。这在Autocad for mac也不例外,并且会弹出窗口,等待输入结果。(如果autolisp里没有给出的话。)
那么我们只要生成一个带属性的块,然后插入它,就会要求用户输入数据,然后再读区这个块的属性值,就可以做到类似窗口输入的交互了。
代码
首先是生成属性的
;生成属性
(defun DB_make_att (pt tag def high wigth color / )
(entmakex (list '(0 . "ATTDEF")
(cons 1 def)
(cons 2 tag)
(cons 3 "")
(cons 10 pt)
(cons 11 pt)
(cons 40 high)
(cons 41 wigth)
(cons 62 color)
'(70 . 0))))
还有生成块的
(defun DB_make_block (ss pt att / e en i name)
(if *DBblocknm
(setq *DBblocknm (1+ *DBblocknm))
(setq *DBblocknm