明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5536|回复: 25

文字加圈,出错了!循环不了。。。求助!

[复制链接]
发表于 2015-11-29 12:21:04 | 显示全部楼层 |阅读模式
(defun C:JQ()
(setvar "cmdecho" 0)
(setq dd (getdist "\n 输入字间与圆周距离<2>: "))
(if (null dd) (setq dd 2.0))
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
        (setq ssn (ssname ss i))
        (setq ssdata (entget ssn))
        (setq sstyp (cdr (assoc 0 ssdata)))
        (if (= sstyp "TEXT")
            (progn
                 (command "ucs" "e" ssn)
                 (setq box (textbox ssdata)) ;取得文字外框坐标
                 (setq p1 (car box))
                 (setq p3 (cadr box))
                 (setq p2 (list (car p3) (cadr p1)))
                 (setq p4 (list (car p1) (cadr p3)))
                 (setq dda (+ (/ (distance p1 p2) 2) dd))
                 (setq cen (inters p1 p3 p2 p4))
                 (command "circle" cen dda)
           )
        )
   (setq i (1+i))
)
(command "ucs" "")
(prin1)
)


;;;;;
; 错误: no function definition: 1+I

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 8
发表于 2015-11-29 20:19:58 | 显示全部楼层
本帖最后由 琴剑江山_10184 于 2015-11-29 20:22 编辑

  1. (defun C:JQ (/ A B DD EN ENT LEN OS P1 P2 PL PP SS)
  2.   (setvar "cmdecho" 0)
  3.   (setq os (getvar 'osmode))
  4.   (setvar 'osmode 0)
  5.   (setq dd (getdist "\n 输入字间与圆周距离<2>: "))
  6.   (if (null dd)
  7.     (setq dd 2.0)
  8.   )
  9.   (setq  ss  (ssget '((0 . "TEXT")))
  10.   Len (sslength ss)
  11.   )  
  12.   (repeat Len
  13.     (setq en (ssname ss (setq Len (1- Len))))        
  14.     (vl-cmdf "ucs" "OB" en)
  15.     (setq ent (entget en)
  16.           pp  (textbox ent)
  17.           p1  (car pp)
  18.           p2  (cadr pp)
  19.           pL  (mapcar '(lambda (a b) (/ (+ a b) 2)) p1 p2)
  20.           dr  (+ (/ (distance p1 p2) 2) dd)
  21.     )
  22.     (command "circle" pL dr)
  23.   )
  24.   (vl-cmdf "ucs" "W")
  25.   (setvar 'osmode os)
  26.   (prin1)
  27. )






回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-18 20:50:09 | 显示全部楼层
yaoyang1018 发表于 2016-6-24 15:33
确定字高后选出字中心点以字高的1.25倍画圈不就好了,我写过一个到现在还在用呢.而且无论多少数字都可以搞定 ...

能分享一下吗
发表于 2015-11-29 12:27:03 | 显示全部楼层
根据提示找到1+i你就知道为什么出错了
 楼主| 发表于 2015-11-29 17:29:46 | 显示全部楼层
llsheng_73 发表于 2015-11-29 12:27
根据提示找到1+i你就知道为什么出错了

谢谢LLsheng 大师
 楼主| 发表于 2015-11-29 17:44:47 | 显示全部楼层
llsheng_73 发表于 2015-11-29 12:27
根据提示找到1+i你就知道为什么出错了

大神,为什么出来是前者,而不是后者效果么?

本帖子中包含更多资源

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

x
发表于 2015-11-29 18:23:39 | 显示全部楼层
本帖最后由 434939575 于 2015-11-29 18:29 编辑
  1. (defun C:tt()
  2. (setvar "cmdecho" 0)
  3. (setq dd (getdist "\n 输入字间与圆周距离<2>: "))
  4. ;
  5.   (if (null dd) (setq dd 2.0)dd)
  6. (setq ss (ssget))
  7. (setq i 0)
  8. (repeat (sslength ss)
  9.         (setq ssn (ssname ss i))
  10.         (setq ssdata (entget ssn))
  11.   (setq text_hei (cdr(assoc 40 ssdata)))
  12.         (setq sstyp (cdr (assoc 0 ssdata)))
  13.         (if (= sstyp "TEXT")
  14.             (progn
  15.                  (command "ucs" "e" ssn)
  16.                  (setq box (textbox ssdata)) ;取得文字外框坐标
  17.                  (setq p1 (car box))
  18.                  (setq p3 (cadr box))
  19.                  (setq p2 (list (car p3) (cadr p1)))
  20.                  (setq p4 (list (car p1) (cadr p3)))
  21.                  (setq dda (+ (/ (distance p1 p2) 2) dd))
  22.                  (setq cen (inters p1 p3 p2 p4))
  23.                  (command "circle" cen (+ dd(* 0.5 text_hei)))
  24.            )
  25.         )
  26.    (setq i (1+ i))
  27. )
  28. (command "ucs" "")
  29. (prin1)
  30. )
 楼主| 发表于 2015-11-29 19:07:38 | 显示全部楼层
434939575 发表于 2015-11-29 18:23

谢谢兄弟回复,但是还有点不如意
 楼主| 发表于 2015-11-29 19:08:22 | 显示全部楼层
434939575 发表于 2015-11-29 18:23

能否再看看。。。

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-11-29 19:11:50 | 显示全部楼层
这个也有问题了,第一圈的点不对,不删除此圈,第二个就是对的了

本帖子中包含更多资源

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

x
发表于 2015-11-29 19:39:23 | 显示全部楼层
  1. (defun C:tt()
  2. (setvar "cmdecho" 0)
  3. (setq dd (getdist "\n 输入字间与圆周距离<2>: "))
  4. ;
  5.   (if (null dd) (setq dd 2.0)dd)
  6. (setq ss (ssget))
  7. (setq i 0)
  8. (repeat (sslength ss)
  9.         (setq ssn (ssname ss i))
  10.         (setq ssdata (entget ssn))
  11.   (setq text_hei (cdr(assoc 40 ssdata)))
  12.         (setq sstyp (cdr (assoc 0 ssdata)))
  13.         (if (= sstyp "TEXT")
  14.             (progn
  15.                  (command "ucs" "e" ssn)
  16.                  (setq box (textbox ssdata)) ;取得文字外框坐标
  17.                  (setq p1 (car box))
  18.                  (setq p3 (cadr box))
  19.               (setq dis(/(distance p1 p3)2))
  20.                  (setq p2 (list (car p3) (cadr p1)))
  21.                  (setq p4 (list (car p1) (cadr p3)))
  22.                  (setq dda (+ (/ (distance p1 p2) 2) dd))
  23.                  (setq cen (inters p1 p3 p2 p4))
  24.                  (command "circle" cen (+ dd dis))
  25.            )
  26.         )
  27.    (setq i (1+ i))
  28. )
  29. (command "ucs" "")
  30. (prin1)
  31. )
 楼主| 发表于 2015-11-29 19:49:03 | 显示全部楼层
434939575 发表于 2015-11-29 19:39

还是不行呢,这个代码是以插入点(对齐点)为圆心画圆的。奇怪了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 15:11 , Processed in 0.193285 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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