本帖最后由 llsheng_73 于 2014-7-23 17:55 编辑
 - (defun c:tt(/ s1 s2 sstoes a b);|如果有两个文字距一个圆距离一样远,会移动最后写入的那个文字|;
- (defun SstoEs(ss / a en lst)
- (if ss(progn(setq a -1)
- (while(setq en(ssname ss(setq a(1+ a))))(setq lst(cons en lst)))))
- lst)
- (prompt "请选择圆和要移到圆中的文字")
- (setq s1(SstoEs(ssget'((0 . "CIRCLE,TEXT"))))s2'())
- (foreach a s1
- (if (=(vla-get-objectname(vlax-ename->vla-object a))"AcDbText")
- (setq s1(vl-remove a s1)s2(cons a s2))))
- (foreach a s1
- (if s2(entmod(setq p(cdr(assoc 10(entget a)))
- b(car(vl-sort(mapcar'(lambda(x)(setq b(entget x)q(if(equal'(11 0 0 0)(assoc 11 b))(assoc 10 b)(assoc 11 b)))
- (list(distance(cdr q)p)q x))s2)'(lambda(x y)(<(car x)(car y)))))
- s2(vl-remove(caddr b)s2)
- b(subst(cons(caadr b)p)(cadr b)(entget(caddr b)))))))
- (princ)
- )
可能有的情况没考虑到,因为你也没明确提出,不过做出来的跟你的描述还是有点小差别。程序是以圆为基准,去找距离它最近的文字把它拉进来,而不是以文字出发,找到距离它最近的圆跑到里边去,这两者是不一样的, 前者它只能拉一个文字进去,后者可能几个文字跑到一个圆里边
还是挂个附件吧,好象复制的代码总会显得比较凌乱
已更正无文字时出错的问题及有的文字对正方式无法移动文字的问题,感谢大家测试反馈
IE有问题,附件无法更新,只能麻烦热心的朋友复制代码了
|