明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 半听可乐

[已解答] 求框选文字和圆,将字高和圆直径统一

[复制链接]
 楼主| 发表于 2013-12-7 22:43 | 显示全部楼层
1993063 发表于 2013-12-7 22:31
;;这个更通用一点的
(Defun C:tt (/ en i ss ty)
  (setq *th* (ureal 1 "" "文字高度" *th*))

命令: tt ; 错误: no function definition: UREAL

我目前的需求是有预先定义数值,然后还能输入,已经足够用了,非常感谢!
回复

使用道具 举报

 楼主| 发表于 2013-12-7 22:45 | 显示全部楼层
1993063 发表于 2013-12-7 22:31
;;这个更通用一点的
(Defun C:tt (/ en i ss ty)
  (setq *th* (ureal 1 "" "文字高度" *th*))

有预定义的数值+可输入  已经足够用了,谢谢你!
回复

使用道具 举报

发表于 2013-12-7 22:46 | 显示全部楼层
本帖最后由 1993063 于 2013-12-7 04:47 编辑
半听可乐 发表于 2013-12-7 04:43
命令: tt ; 错误: no function definition: UREAL

我目前的需求是有预先定义数值,然后还能输入,已经 ...
UREAL 这个函数不是已经告诉你地址了么?
要预先定义的话,加一句 (or *th* (setq *th* 300)) ;300是字高       就搞定了
回复

使用道具 举报

发表于 2013-12-7 23:14 | 显示全部楼层
半听可乐 发表于 2013-12-7 22:38
万分感谢你和“1993063”这位朋友,你们的程序都完全满足我的需求,你的这个更灵活些,惊喜!

小改,调整为全局函数版(所谓的记忆功能)
  1. (defun c:ty(/ ss en e txth1 dr1)  
  2.   (prompt "\n请选择需要统一直径与字高的圆、文字:")
  3.   (if (setq ss(ssget '((0 . "*text,circle"))))
  4.     (progn
  5.       (or dr (setq dr 150))
  6.       (or txth (setq txth 300))
  7.       (or (and (setq dr1(getreal(strcat "\n输入统一圆的直径值<"(if dr (rtos dr 2 2) "150")">:")))(setq dr dr1)))
  8.       (or (and (setq txth1(getreal(strcat "\n输入统一的文字高度值<"(if txth (rtos txth 2 2) "300")">:")))(setq txth txth1)))
  9.       (while (setq en(ssname ss 0))
  10.         (setq e(entget en))
  11.         (cond
  12.           ((wcmatch (cdr(assoc 0 e)) "*TEXT" )(entmod (subst (cons 40 txth) (assoc 40 e) e)))
  13.           ((wcmatch (cdr(assoc 0 e)) "CIRCLE" )(entmod (subst (cons 40 (* dr 0.5)) (assoc 40 e) e)))
  14.           )
  15.         (setq ss(ssdel en ss))
  16.         )
  17.       )
  18.     (princ "\n Noting !!!")
  19.     )
  20.     (princ)
  21.     )
回复

使用道具 举报

发表于 2013-12-7 23:18 | 显示全部楼层
1993063 发表于 2013-12-7 22:39
没事儿堆堆码

其实我在写去掉圆内圆的,刚巧看到这个帖子,先写的这个,都是没事练练思路。。。
如何清除园内圆
http://bbs.mjtd.com/forum.php?mo ... &fromuid=338795
回复

使用道具 举报

发表于 2013-12-7 23:36 | 显示全部楼层
额,我写个就当练习练习,有什么错误还请莫怪!
  1. (defun c:tt( / en i lx name)
  2.   (setq en (ssget '((0 . "*text,circle"))))
  3.   (setq i 0)
  4.   (repeat (sslength en)
  5.     (setq name (ssname en i))
  6.     (setq lx (cdr (assoc 0 (entget name))))
  7.     (cond
  8.       ((= lx "TEXT") (entmod (subst (cons 40 300) (assoc 40 (entget name)) (entget name))));双引号中的英文一定要大写!!!?
  9.       ((= lx "MTEXT") (entmod (subst (cons 40 300) (assoc 40 (entget name)) (entget name))));双引号中的英文一定要大写!!!?
  10.       ((= lx "CIRCLE") (entmod (subst (cons 40 75) (assoc 40 (entget name)) (entget name))));双引号中的英文一定要大写!!!?
  11.     )
  12.     (setq i (1+ i))
  13.   )
  14. )
回复

使用道具 举报

 楼主| 发表于 2013-12-8 09:56 | 显示全部楼层
312735894 发表于 2013-12-7 23:36
额,我写个就当练习练习,有什么错误还请莫怪!

很开心大家来各显神通
回复

使用道具 举报

 楼主| 发表于 2013-12-8 09:59 | 显示全部楼层
edata 发表于 2013-12-7 23:14
小改,调整为全局函数版(所谓的记忆功能)

朋友,如果我想增加个图层识别功能怎么改呢?即只希望修改指定图层中的文字和圆,指定的图层在程序中预先定义好,程序运行时预定义图层之外的图元不被选择,有劳了
回复

使用道具 举报

发表于 2013-12-8 10:02 | 显示全部楼层

代替cond
...
(entmod (subst (cons 40 (if (= lx "CIRCLE") 75 300) (assoc 40 (entget name)) (entget name))))
...
回复

使用道具 举报

 楼主| 发表于 2013-12-8 10:32 | 显示全部楼层
ZZXXQQ 发表于 2013-12-8 10:02
代替cond
...
(entmod (subst (cons 40 (if (= lx "CIRCLE") 75 300) (assoc 40 (entget name)) (entge ...

大侠们一下子奉献了这么多的好作品,小弟略晕,Z版主这点睛之笔是要画在哪里呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 15:45 , Processed in 0.697287 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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