明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 840|回复: 5

[资源] 关于"屏幕选字"之<三领设计 SLdesign V3.0>的展示

  [复制链接]
发表于 2024-4-16 02:43:48 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-4-16 04:09 编辑

原帖子地址:
http://bbs.mjtd.com/forum.php?mo ... 1%C4%BB%D1%A1%D7%D6
这个功能是比较有用的,
三领做了点集成:
1:对任意角度的文字支持
2:对任意炸碎的文字支持
3:集成TAB键取词库
4:对选中的文字画出矩形矢量框,变色系统保留
5:对MTEXT支持集成
  1. (defun c:tt ()
  2.   (while (setq e1
  3.            (clh-entsel
  4.              (slmsg
  5.                "\n -> 拖动决定替换字符串 [输入(左键)/取词(TAB)/删除(空格)/取消(右键)]"
  6.                "\n -> ╈笆∕﹚蠢传才﹃ [块(オ龄)/迭(TAB)/埃()/(龄)]"
  7.                "\n ->Drag to determine the replacement string [Enter (left click)/Take words (TAB)/Delete (space)/Cancel (right click)]"
  8.              ) "nil" '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT")) str1)
  9.          )
  10.     (setq e (car e1) p0 (cadr e1))
  11.     ;(setvar "snapang" (sl-r2d (e-ang e p0)))
  12.     (substrdynamic e p0) ;动态取字
  13.     ;(setvar "snapang" 0)
  14.     (setq e nil e1 nil p0 nil)
  15.   )
  16. )

  17. ;TEXT屏幕动态选字---(一级)-----
  18. ;e实体名 p0 e实体范围内点
  19. (defun substrdynamic (e p0 / ss2 sss s1 code p01 n newe color newcolor newstr newe2 ang nam e1 p1 p2 p3 p4 tp)
  20.   (setq color (vla-get-color (en2obj e)) newcolor 1)
  21.   (setq tp (dxf1 e 0) e1 (entlast) sss (ssadd))
  22.   (wzcf (ssadd e));炸碎
  23.   (if (and (setq ss2 (last_ent e1))
  24.         (setq newe (car (nentselp p0)))
  25.       )
  26.     (progn
  27.       (mapcar '(lambda (x) (vla-put-color (en2obj x) color)) (ss-enlst ss2))
  28.       (setq ang (angle-sharp (dxf1 newe 50)) p1 (dxf1 newe 10) p4 (polar p1 (+ ang pi2) (dxf1 newe 40)))
  29.       (if (= (vla-get-color (en2obj newe)) newcolor) (setq newcolor (atoi (slsjqs))))
  30.       (while (and (setq code (grread t 15 2)) (= (car code) 5)) ;拖动
  31.         (redraw)
  32.         (setq p01 (cadr code))
  33.         (setq sss (ssget "c" p0 p01 '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))))
  34.         (setq n 1)
  35.         (while (and (not sss) (< n 50))
  36.           (setq sss (ssget "c" p0 (mapcar '(lambda (x) (+ x (* n (getvar 'pickbox)))) p01) '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))))
  37.           (setq n (1+ n))
  38.         )
  39.         (setq p2 (polar p1 ang 400)
  40.           p2 (pertolinecz p01 p1 p2)
  41.           p3 (polar p4 ang 400)
  42.           p3 (pertolinecz p01 p4 p3)
  43.         )
  44.         (grdraw p1 p2 2 2)
  45.         (grdraw p2 p3 2 2)
  46.         (grdraw p3 p4 2 2)
  47.         (grdraw p4 p1 2 2)
  48.         (mapcar '(lambda (x) (vla-put-color (en2obj x) newcolor)) (ss-enlst sss))
  49.       )
  50.       (cond
  51.         ((= (car code) 3)  ;左键取词修改
  52.           (setq newstr (dclxz ""))
  53.         )
  54.         ((member code '((2 9))) ;;table 键
  55.           (setq newstr (sl-qc))
  56.         )
  57.       )
  58.       (if newstr
  59.         (progn
  60.           (setq s1 (entget (setq newe2 (ssname sss (1- (sslength sss))))))
  61.           (setq s1 (subst (cons 1 newstr) (assoc 1 s1) s1))
  62.           (entmod s1)
  63.           (entupd newe2)
  64.           (ssdel newe2 sss)
  65.         )
  66.       )
  67.       (setq n -1)
  68.       (while (setq nam (ssname sss (setq n (1+ n))))
  69.         (ssdel nam ss2)
  70.         (entdel nam)
  71.       )
  72.       (if (member tp '("TEXT" "TCH_TEXT" "SWR_TEXT"))
  73.         (wzhb ss2)
  74.         (sswzhb ss2)
  75.       )
  76.       (setq ss2 nil)
  77.     )
  78.   )
  79.   (redraw)
  80.   (princ)
  81. )


对于拖动,PICBOX选择问题,思考应该有其他办法为好,不知各位有好思路吗?

改动做法如下:
  1. ;TEXT屏幕动态选字---(一级)-----
  2. ;e实体名 p0 e实体范围内点
  3. (defun substrdynamic (e p0 / ss2 sss s1 code p01 n newe color newcolor newstr newe2 ang nam e1 p1 p2 p3 p4 tp h)
  4.   (setq color (vla-get-color (en2obj e)) newcolor 1)
  5.   (setq tp (dxf1 e 0) e1 (entlast) sss (ssadd))
  6.   (wzcf (ssadd e));炸碎
  7.   (if (and (setq ss2 (last_ent e1))
  8.         (setq newe (car (nentselp p0)))
  9.       )
  10.     (progn
  11.       (mapcar '(lambda (x) (vla-put-color (en2obj x) color)) (ss-enlst ss2))
  12.       (setq ang (angle-sharp (dxf1 newe 50)) h (dxf1 newe 40) p1 (dxf1 newe 10) p4 (polar p1 (+ ang pi2) h))
  13.       (if (= (vla-get-color (en2obj newe)) newcolor) (setq newcolor (atoi (slsjqs))))
  14.       (while (and (setq code (grread t 15 2)) (= (car code) 5)) ;拖动
  15.         (redraw)
  16.         (setq p01 (cadr code))
  17.         (setq sss (ssget "c" p0 p01 '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))))
  18.         (setq n 1 h (* 0.9 h))
  19.         (while (and (not sss) (< n 50))
  20.           (setq sss
  21.             (ssget "cp"
  22.               (list
  23.                 (polar p0 (+ ang pi2) h)
  24.                 (polar p0 (- ang pi2) h)
  25.                 (polar p01 (+ ang pi2) h)
  26.                 (polar p01 (- ang pi2) h)
  27.               )
  28.               '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))
  29.             )
  30.           )
  31.           (setq n (1+ n))
  32.         )
  33.         (setq p2 (polar p1 ang 400)
  34.           p2 (pertolinecz p01 p1 p2)
  35.           p3 (polar p4 ang 400)
  36.           p3 (pertolinecz p01 p4 p3)
  37.         )
  38.         (grdraw p1 p2 2 2)
  39.         (grdraw p2 p3 2 2)
  40.         (grdraw p3 p4 2 2)
  41.         (grdraw p4 p1 2 2)
  42.         (mapcar '(lambda (x) (vla-put-color (en2obj x) newcolor)) (ss-enlst sss))
  43.       )
  44.       (cond
  45.         ((= (car code) 3)  ;左键取词修改
  46.           (setq newstr (dclxz ""))
  47.         )
  48.         ((member code '((2 9))) ;;table 键
  49.           (setq newstr (sl-qc))
  50.         )
  51.       )
  52.       (if newstr
  53.         (progn
  54.           (setq s1 (entget (setq newe2 (ssname sss (1- (sslength sss))))))
  55.           (setq s1 (subst (cons 1 newstr) (assoc 1 s1) s1))
  56.           (entmod s1)
  57.           (entupd newe2)
  58.           (ssdel newe2 sss)
  59.         )
  60.       )
  61.       (setq n -1)
  62.       (while (setq nam (ssname sss (setq n (1+ n))))
  63.         (ssdel nam ss2)
  64.         (entdel nam)
  65.       )
  66.       (if (member tp '("TEXT" "TCH_TEXT" "SWR_TEXT"))
  67.         (wzhb ss2)
  68.         (sswzhb ss2)
  69.       )
  70.       (setq ss2 nil)
  71.     )
  72.   )
  73.   (redraw)
  74.   (princ)
  75. )



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-4-16 03:52:15 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-4-16 04:10 编辑

再次完善一下子:更加丝滑顺畅
  • ;屏幕动态选字---(一级)-----
  • ;e实体名 p0 e实体范围内点
  • (defun substrdynamic (e p0 / ss2 sss s1 code p01 n newe color newcolor newstr newe2 ang nam e1 p1 p2 p3 p4 tp)
  •   (setq color (vla-get-color (en2obj e)) newcolor 1)
  •   (setq tp (dxf1 e 0) e1 (entlast) sss (ssadd))
  •   (wzcf (ssadd e));炸碎
  •   (if (and (setq ss2 (last_ent e1))
  •         (setq newe (car (nentselp p0)))
  •       )
  •     (progn
  •       (mapcar '(lambda (x) (vla-put-color (en2obj x) color)) (ss-enlst ss2))
  •       (setq ang (dxf1 newe 50) p1 (dxf1 newe 10) p4 (polar p1 (+ ang pi2) (dxf1 newe 40)))
  •       (entmod (emod (emod newe 72 0) 73 0)) ;;左下定位
  •       (if (= (vla-get-color (en2obj newe)) newcolor) (setq newcolor (atoi (slsjqs))))
  •       (while (and (setq code (grread t 15 2)) (= (car code) 5)) ;拖动
  •         (redraw)
  •         (setq p01 (cadr code))
  •         (setq sss (ssget "c" p0 p01 '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))))
  •         (setq p2 (polar p1 ang 400)
  •           p2 (pertolinecz p01 p1 p2)
  •           p3 (polar p4 ang 400)
  •           p3 (pertolinecz p01 p4 p3)
  •         )
  •         (grdraw p1 p2 2 2)
  •         (grdraw p2 p3 2 2)
  •         (grdraw p3 p4 2 2)
  •         (grdraw p4 p1 2 2)
  •         (setq n 1)
  •         (while (and (not sss) (< n 50))
  •           (setq sss (ssget "cp" (list p1 p2 p3 p4) '((0 . "TEXT,MTEXT,TCH_TEXT,TCH_MTEXT,SWR_TEXT"))))
  •           (setq n (1+ n))
  •         )
  •         (mapcar '(lambda (x) (vla-put-color (en2obj x) newcolor)) (ss-enlst sss))
  •       )
  •       (cond
  •         ((= (car code) 3)  ;左键取词修改
  •           (setq newstr (dclxz ""))
  •         )
  •         ((member code '((2 9))) ;;table 键
  •           (setq newstr (sl-qc))
  •         )
  •       )
  •       (if newstr
  •         (progn
  •           (setq s1 (entget (setq newe2 (ssname sss (1- (sslength sss))))))
  •           (setq s1 (subst (cons 1 newstr) (assoc 1 s1) s1))
  •           (entmod s1)
  •           (entupd newe2)
  •           (ssdel newe2 sss)
  •         )
  •       )
  •       (setq n -1)
  •       (while (setq nam (ssname sss (setq n (1+ n))))
  •         (ssdel nam ss2)
  •         (entdel nam)
  •       )
  •       (if (member tp '("TEXT" "TCH_TEXT" "SWR_TEXT"))
  •         (wzhb ss2)
  •         (sswzhb ss2)
  •       )
  •       (setq ss2 nil)
  •     )
  •   )
  •   (redraw)
  •   (princ)
  • )


SLdesign APP
链接:https://pan.baidu.com/s/1uw74-TQiSNcmdVLxoER-kg 提取码:y7ek

回复 支持 1 反对 0

使用道具 举报

发表于 2024-4-16 10:19:07 | 显示全部楼层
尘缘前辈,一大清晨就写代码了
 楼主| 发表于 2024-4-16 20:15:51 | 显示全部楼层
tranque 发表于 2024-4-16 10:19
尘缘前辈,一大清晨就写代码了

晚上工作,下午睡觉,黑白颠倒。
发表于 2024-7-8 18:56:33 | 显示全部楼层
beautiful
thanks for sharing

点评

The English version CAD garbled code issue I found has been rewritten. You can download a new package to try it out.  发表于 2024-7-8 19:13
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-28 01:33 , Processed in 0.179224 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表