明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1272|回复: 13

[提问] 大师们,如何让这个圈里,自动加一个汉字,还有圈的大小怎么调整

[复制链接]
发表于 2024-10-16 19:43:28 | 显示全部楼层 |阅读模式
(defun entmakecircle(pt rad)(entmakex (list '(0 . "circle") (cons 10 pt) (cons 40 rad))))
(defun entmakeline(p1 p2)(entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2))))
(defun entmaketext(pt str h ang)(entmakex (list '(0 . "TEXT") (cons 10 pt)(cons 11 pt)(cons 73 0)(cons 72 1) (cons 1 str) (cons 40 h)(cons 50 ang))))
(vl-load-com)
(defun c:tg12(/ p1 p2 p3 p4 pt dd ang)  
  (if(setq p1(getpoint "\n指定起点: "))
    (progn
      (vla-startundomark(vla-get-activedocument(vlax-get-acad-object)))
      (entmakecircle p1 3)
      (while(setq p2(getpoint p1 "\n指定下一点(空格退出): "))
        (setq p3(polar p1 (angle p1 p2) 3)
              p4(polar p2 (angle p2 p1) 3)
              )
        ;;文字中点
        (setq pt(mapcar '(lambda(x y)(*(+ x y) 0.5)) p1 p2))        
        (setq dd(distance p1 p2))
        (entmakeline p3 p4)
        (entmakecircle p2 3)
        (setq ang (angle p1 p2))
        ;;文字正向
        (if(and (> ang (* pi 0.5)) (< ang  (* pi 1.5)))(setq ang (angle p2 p1)))
        ;;文字偏移
        (setq pt (polar pt (+ ang (* 0.5 pi)) 2))
        ;;生成文字
        (entmaketext pt (rtos dd 2 2) 6 ang)
        (setq p1 p2)
        )
      (vla-endundomark(vla-get-activedocument(vlax-get-acad-object)))
      )
    )
  (princ)
  )

本帖子中包含更多资源

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

x
发表于 2024-10-16 20:50:33 | 显示全部楼层
本帖最后由 qazxswk 于 2024-10-16 21:09 编辑

试着改了一下,你看行不行。圆大小跟你当前的标注文字大小关联了。


  1. (defun entmakecircle(pt rad)(entmakex (list '(0 . "circle") (cons 10 pt) (cons 40 rad))))
  2. (defun entmakeline(p1 p2)(entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2))))
  3. (defun entmaketext(pt str h ang)(entmakex (list '(0 . "TEXT") (cons 10 pt)(cons 11 pt)(cons 73 0)(cons 72 1) (cons 1 str) (cons 40 h)(cons 50 ang))))
  4. (defun entmaketext1(pt str h)(entmakex (list '(0 . "TEXT") (cons 10 pt)(cons 11 pt)(cons 73 2)(cons 72 1) (cons 1 str) (cons 40 h))))
  5. (vl-load-com)
  6. (defun c:11(/ p1 p2 p3 p4 pt dd ang txt h)
  7. (setq h (getvar "dimtxt"))
  8.   (if(setq p1(getpoint "\n指定起点: "))
  9.     (progn
  10.          (entmaketext1 p1 "雨" h)
  11.             (vla-startundomark(vla-get-activedocument(vlax-get-acad-object)))
  12.       (entmakecircle p1 h)
  13.       (while(setq p2 (getpoint p1 "\n指定下一点(空格退出): "))
  14.       
  15.            (setq p3(polar p1 (angle p1 p2) h)         p4(polar p2 (angle p2 p1) h)  )
  16.         ;;文字中点
  17.         (setq pt(mapcar '(lambda(x y)(*(+ x y) 0.5)) p1 p2))        
  18.         (setq dd(distance p1 p2))
  19.         (entmakeline p3 p4)
  20.         (entmakecircle p2 h)
  21.         (setq ang (angle p1 p2))
  22.         ;;文字正向
  23.         (if(and (> ang (* pi 0.5)) (< ang  (* pi 1.5)))(setq ang (angle p2 p1)))
  24.         ;;文字偏移
  25.         (setq pt (polar pt (+ ang (* 0.5 pi)) 2))
  26.         ;;生成文字
  27.         (entmaketext pt (rtos dd 2 2) h ang)
  28.         (setq p1 p2)
  29.                 (entmaketext1 p1 "雨" h)
  30.         )
  31.       (vla-endundomark(vla-get-activedocument(vlax-get-acad-object)))
  32.       )
  33.     )
  34.   (princ)  )

发表于 2024-10-16 20:54:04 | 显示全部楼层
如果圆圈里放固定的一个汉字,那还可以省一步。
 楼主| 发表于 2024-10-16 21:02:38 | 显示全部楼层
qazxswk 发表于 2024-10-16 20:54
如果圆圈里放固定的一个汉字,那还可以省一步。

太强了大哥,就固定一下雨字就行,
删除哪段
发表于 2024-10-16 21:07:17 | 显示全部楼层
上面的代码,我帮你修改好,加上雨字了。你重新复制一下就可以了。
 楼主| 发表于 2024-10-16 21:25:38 | 显示全部楼层
qazxswk 发表于 2024-10-16 21:07
上面的代码,我帮你修改好,加上雨字了。你重新复制一下就可以了。

神奇呀,大哥在帮我最后一个忙,实在在不好意思了,圆形能不能改成这4种方块,分成4个文件也行,1个文件也行

本帖子中包含更多资源

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

x
发表于 2024-10-16 23:22:06 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun Ecircle (p r)
  3.     (entmakex (list '(0 . "circle") (cons 10 p) (cons 40 r)))
  4.   )
  5.   (defun Eline (a b)
  6.     (entmakex (list '(0 . "line") (cons 10 a) (cons 11 b)))
  7.   )
  8.   (defun Etext (p tx h r)
  9.     (entmakex (list '(0 . "text")
  10.                     (cons 10 p)
  11.                     (cons 11 p)
  12.                     (cons 73 0)
  13.                     (cons 72 1)
  14.                     (cons 1 tx)
  15.                     (cons 40 h)
  16.                     (cons 50 r)
  17.               )
  18.     )
  19.   )
  20.   (or rr (setq rr 3))
  21.   (or tx (setq tx "雨"))
  22.   (setq rr (Udist 7 "" "圆圈半径<输入或鼠标直接量取>" rr nil))
  23.   (setq tx (Ustr 1 "字符串" tx nil))
  24.   (if (setq p1 (getpoint "\n起点<空格退出>: "))
  25.     (progn
  26.       (setq s1 (Ecircle p1 rr)
  27.             s2 (Etext (polar p1 (* pi 1.5) (* rr 0.5)) tx rr 0)
  28.       )
  29.       (while (setq p2 (getpoint p1 "\n下一点<空格退出>: "))
  30.         (setq p3  (polar p1 (angle p1 p2) rr)
  31.               p4  (polar p2 (angle p2 p1) rr)
  32.               pt  (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2)
  33.               s1  (Eline p3 p4)
  34.               s2  (Ecircle p2 rr)
  35.               s3  (Etext px (polar p2 (* pi 1.5) (* rr 0.5)) rr 0)
  36.               ang (angle p1 p2)
  37.               ang (if (and (> ang (* pi 0.5)) (< ang (* pi 1.5)))
  38.                     (angle p2 p1)
  39.                     ang
  40.                   )
  41.               pt  (polar pt (+ ang (* 0.5 pi)) 2)
  42.               s4  (Etext pt (rtos (distance p1 p2) 2 2) 6 ang)
  43.               p1  p2
  44.         )
  45.       )
  46.     )
  47.   )
  48.   (princ)
  49. )

点评

感谢院长  发表于 2024-10-17 08:39
 楼主| 发表于 2024-10-17 08:41:10 | 显示全部楼层

院长 画改成长方形怎么改,就跟这个画差不多大就行

点评

自己先画个样本看看  发表于 2024-10-17 13:04
 楼主| 发表于 2024-10-17 15:30:09 | 显示全部楼层

就是一个矩形,里面有4个格  有时候3个格子,最好是我自己能在LISP文件里能修改几个格子,还能控制矩形长宽

本帖子中包含更多资源

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

x

点评

全是水平方向的?  发表于 2024-10-17 23:10
发表于 2024-10-17 15:53:52 | 显示全部楼层
为啥不用动态块
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-22 05:21 , Processed in 0.173727 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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