Autolisp在mac os下的交互

在Autocad for Mac中,由于系统限制,基础的Autolisp不支持窗口交互和扩展函数。但通过属性块功能,可以实现简单的交互效果。本文介绍了如何利用属性块生成和插入,模拟用户输入窗口,从而进行数据交互。提供的DB_get_input函数能弹出对话框获取用户输入,为Autolisp在Mac OS下的交互提供了一种变通解决方案。
摘要由CSDN通过智能技术生成

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 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值