wzg356 发表于 2023-12-16 18:28:39

函数: 屏幕动态显示信息 动态信息查询---重温经典学习代码

本帖最后由 wzg356 于 2023-12-23 17:15 编辑

本站 有李麦可写的,套路太深 1000多行--还不支持中文

这里发一个简单的---完整的在 下载文件 一楼提醒的变量名已校核
完整函数在下载文件,里面包含动态信息查询---重写
下面有适用范例
;屏幕动态显示指定信息displayinfo
;示例1(displayinfo '("信息第1行""信息第2行"))
;示例2(displayinfo "信息第1行\n信息第2行")
;示例3(displayinfo (list 555 666))
(defun displayinfo(strs / p e1e2)
      (while (not(or(member(car p)'(3 25))(member p '((2 13)(2 32)))))
                ;左右键或回车结束
                (setq p(grread t 8))
                (mapcar 'entdel e1e2)
                (if(= (car p) 5)(setq e1e2(display00(cadr p) strs)))
      )
      (cond((=(car p) 3)"点击了左键"));返回举例
)
;例显示动态坐标(displayXYZ)
(defun displayXYZ( / p e1e2)
      (while (not(or(member(car p)'(3 25))(member p '((2 13)(2 32)))))
                (setq p(grread t 8))
                (mapcar 'entdel e1e2)
                (if(= (car p) 5)
                        (setq e1e2(display00(cadr p)
                              (mapcar 'strcat'      ("X=" "Y=" "Z=")
                                        (mapcar'(lambda(x)(rtos x 2 2))(cadr p))
                              )
                        ))
                )
      )
)

display00里面可以取消底框,直接启用用多行文字填充背景,7楼有多行文字填充背景entmakex组码


zxh92 发表于 2023-12-16 22:28:37

(setq e(entmakemtext p hzt txsty strs))中这个txsty改下才能运行吧

努.力 发表于 2023-12-17 15:41:33

非常感谢大神分享有趣的源码

376394482 发表于 2023-12-18 16:30:17

谢谢分享

czb203 发表于 2023-12-20 10:39:57

大佬又在默默发新作了,感谢热心分享

sandyvs 发表于 2023-12-20 19:47:17

请教下,用grread函数,生成了一个文字,然后定义了个错误函数,如果错误就删掉这个文字。运行命令后,按esc,正常应该能删掉这个文字,如果不动鼠标没问题,移动着鼠标点取消的时候就删不掉,能解决吗?如图所示

wzg356 发表于 2023-12-23 16:55:37

可以取消底框
直接启用用多行文字填充背景
(entmakex (list
                '(0 . "MTEXT")'(100 . "AcDbEntity")'(100 . "AcDbMText")
                '(7 . "STANDARD");样式
                '(62 . 250);文字颜色
                (cons 10 p);点p
                (cons 40 hzt);字高
                (cons 1 strs);内容
                '(90 . 1);使用填充背景
                '(63 . 9);背景颜色
                '(45 . 1.5);超出宽度比例
        ));生成文字

wzg356 发表于 2023-12-23 17:07:54

本帖最后由 wzg356 于 2023-12-23 17:18 编辑

sandyvs 发表于 2023-12-20 19:47
请教下,用grread函数,生成了一个文字,然后定义了个错误函数,如果错误就删掉这个文字。运行命令后,按es ...
一般地循环执行时(setq e(entmakex ...))....(entsel e)===严密成对出现
如循环中间如有其他动作没有(setq e(entmakex ...))
有可能出现(setq e(entmakex ...))(entsel e)(entsel e),e又重新生成了
我原贴就是利用(entsel e)(entsel e)重生文字盖在底框上

为避免这种情况,尽量检查好代码,或这样(setq e(entmakex ...))...(if e(progn(entsel e)(setq e nil)))

小菜123 发表于 2023-12-23 20:06:08

wzg356 发表于 2023-12-23 17:07
一般地循环执行时(setq e(entmakex ...))....(entsel e)===严密成对出现
如循环中间如有其他动作没有(se ...

不是这个问题,出现删不掉的情况时,会提示错误处理函数出错,但如果用空格退出grread并执行同样的错误处理函数,就不会有问题,所以我研究了许久,最终写个arx,在进行grread时把esc替换成空格,结束时再恢复,才得以解决。如果不用arx,只能把生成的文字选择集记录成全局变量,每次执行命令时检查这个选择集是否还存在,如果存在则删除,也基本可解决。

sandyvs 发表于 2023-12-23 21:30:48

本帖最后由 sandyvs 于 2023-12-23 21:32 编辑

小菜123 发表于 2023-12-23 20:06
不是这个问题,出现删不掉的情况时,会提示错误处理函数出错,但如果用空格退出grread并执行同样的错误处 ...
是不是entdel函数的问题,我以为它是删除图元呢,原来还可以恢复,我用erase删除,好像就没问题了
页: [1] 2
查看完整版本: 函数: 屏幕动态显示信息 动态信息查询---重温经典学习代码