如何用lisp提取多边形内的文字注记?请ZZXXQQ进来看看
本帖最后由 作者 于 2009-12-18 14:58:32 编辑 <br /><br /> <p>提取闭合多边形内的text文字注记,用lisp该如何实现?请高手指教</p><p>如果多边形内无文字,对该多边形新建一个选择集,并从原来的选择集中删除,该怎么写呢?</p> 版主能不能整个批量把多边形的文字提取到excel中。谢谢! 版主能不能整个批量把多边形的文字提取到excel中。谢谢! 不错 支持一下采用getboundingbox 属性,之后判断点是否在面内即可 <p>(defun c:tt ()<br/>(if (and<br/> (setq s1 (entsel "\n选择封闭多边形 :"))<br/> (setq ent (entget(car s1)))<br/> (= (cdr(assoc 0 ent)) "LWPOLYLINE")<br/> (= (cdr(assoc 70 ent)) 1)<br/> ) (progn<br/> (setq pts '())<br/> (mapcar '(lambda(x) (if (= (car x) 10)(setq pts (cons (cdr x) pts)))) (entget ename))<br/> (reverse pts)<br/> (setq ss (ssget "WP" pts '((0 . "TEXT"))))<br/>))<br/>)</p> 多谢ZZXXQQ版主,程序运行后如何显示提取的文字? 在哪显示? <p>在命令行中通过princ显示</p> <P>(defun c:tt ()<BR>(if (and<BR> (setq s1 (entsel "\n选择封闭多边形 :"))<BR> (setq ent (entget(car s1)))<BR> (= (cdr(assoc 0 ent)) "LWPOLYLINE")<BR> (/= (cdr(assoc 70 ent)) 0)<BR> ) (progn<BR> (setq pts (list))<BR> (mapcar '(lambda(x) (if (= (car x) 10) (setq pts (cons (cdr x) pts)))) ent)<BR> (reverse pts)<BR> (if (setq ss (ssget "WP" pts '((0 . "TEXT")))) (progn<BR> (setq i 0)<BR> (repeat (sslength ss)<BR> (princ (cdr (assoc 1 (entget(ssname ss i)))))<BR> (princ "\n")<BR> (setq i (1+ i))<BR> )<BR> ))<BR>))<BR>(princ)<BR>)<BR></P> <p>还是没有显示出提取的文字,返回值nil,上传了cad图,帮忙看看。</p> 七楼已改。 <p>这下可以了,非常感谢<strong><font face="Verdana" color="#da2549">ZZXXQQ</font></strong>! </p><p>还有一个问题,对于多个多边形,需要分别提取文字, 这样的循环该如何实现呢?我最终是要实现将提取的文字添加到每个多边形的扩展数据中,如(-3 ("A" (1000 . "1000")) ("B" (1070 . <font color="#f73809"><strong>2</strong></font>)))</p>