abcxyz0517 发表于 2007-4-3 18:20:00

文字下面的线段以及多段线等删除

<p>写一行文字</p><p>下面有线段、多短线等 </p><p>如何能实现写字的同时</p><p>把下面的线段删除?</p>

abcxyz0517 发表于 2007-4-8 17:58:00

怎么没有人跟呢 ?

TLHMQH 发表于 2007-4-16 21:26:00

有同感,请高手指点。

dengqiaqia 发表于 2007-6-10 00:20:00

<p>我来也:</p><p>(defun *$dyq-error$* (msg)<br/>&nbsp; ;(command ".undo" "")<br/>&nbsp; (setq *error* &amp;olderr&amp;)<br/>&nbsp; ;(princ)<br/>)</p><p>(defun dyq-get-chaji (xz1 xz2) ;两个选择集的差集<br/>&nbsp; (command "select" xz1 "r" xz2 "")<br/>&nbsp; (ssget "p")<br/>)</p><p>(defun dyq-get-jiaoji (xz1 xz2) ;两个选择集的交集<br/>&nbsp; (command "select" xz1 "r" xz2 "")<br/>&nbsp; (command "select" xz1 "r" (ssget "p") "")<br/>&nbsp; (ssget "p")<br/>)</p><p>(defun dyq-get-bingji (xz1 xz2) ;两个选择集的并集<br/>&nbsp; (command "select" xz1 "a" xz2 "")<br/>&nbsp; (ssget "p")<br/>)</p><p>(defun dyq-get-oldstatus (/ oldstatus) ;存储系统原状态<br/>&nbsp; (setq oldstatus (list "oldstatus"))<br/>&nbsp; (setq oldstatus (cons "CLAYER" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "CLAYER") oldstatus))<br/>&nbsp; (setq oldstatus (cons "OSMODE" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "OSMODE") oldstatus))<br/>&nbsp; (setq oldstatus (cons "ORTHOMODE" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "ORTHOMODE") oldstatus))<br/>&nbsp; (setq oldstatus (cons "TEXTSTYLE" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "TEXTSTYLE") oldstatus))<br/>&nbsp; (setq oldstatus (cons "TEXTSIZE" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "TEXTSIZE") oldstatus))<br/>&nbsp; (setq oldstatus (cons "PICKSTYLE" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "PICKSTYLE") oldstatus))<br/>&nbsp; (setq oldstatus (cons "pickbox" oldstatus))<br/>&nbsp; (setq oldstatus (cons (getvar "pickbox") oldstatus))<br/>&nbsp; ;当前标注样式要修改<br/>&nbsp; (setq oldstatus (reverse oldstatus))<br/>)</p><p>(defun dyq-put-oldstatus (oldstatus) ;还原系统原系统变量<br/>&nbsp; (setq num (length oldstatus))<br/>&nbsp; (setq i 1)<br/>&nbsp; (repeat (/ (- num 1) 2)<br/>&nbsp;&nbsp;&nbsp; (setvar (nth i oldstatus) (nth (+ i 1) oldstatus))<br/>&nbsp;&nbsp;&nbsp; (setq i (+ i 2))<br/>&nbsp; )<br/>)</p><p>&nbsp; ;获得文字的宽度<br/>(defun dyq-get-string-netwide (obj / objlist minp maxp ang) ;文字净宽<br/>&nbsp; (setq objlist (entget obj))<br/>&nbsp; (setq ang (cdr (assoc '50 objlist)))<br/>&nbsp; (setq objlist (subst '(50 . 0) (assoc '50 objlist) objlist))<br/>&nbsp; (entmod objlist)<br/>&nbsp; (setq objinsertpnt (cdr (assoc '10 objlist)))<br/>&nbsp; (vla-getboundingbox<br/>&nbsp;&nbsp;&nbsp; (vlax-ename-&gt;vla-object obj)<br/>&nbsp;&nbsp;&nbsp; 'minp<br/>&nbsp;&nbsp;&nbsp; 'maxp<br/>&nbsp; )<br/>&nbsp; (setq minp (vlax-safearray-&gt;list minp))<br/>&nbsp; (setq maxp (vlax-safearray-&gt;list maxp))<br/>&nbsp; (setq objlist (subst (cons 50 ang) (assoc '50 objlist) objlist))<br/>&nbsp; (entmod objlist)<br/>&nbsp; (- (car maxp) (car minp))<br/>)</p><p>(princ "\nzx&nbsp; 文字加下划线")<br/>(defun c:zx (/ xz num i&nbsp;obj minp maxp x1 y1 x2 y2 txtang txtpoint oldlayer shenchu gaptextline)<br/>&nbsp; (setq &amp;olderr&amp; *error*)<br/>&nbsp; (setq *error* *$dyq-error$*)<br/>&nbsp; (setq oldstatus (dyq-get-oldstatus))<br/>&nbsp; (dyq-new-layer "T图名" 6)<br/>&nbsp; (setvar "clayer" "T图名")<br/>&nbsp; (setvar "OSMODE" 0)<br/>&nbsp; (setq zxfilename "c:/zx.txt")<br/>&nbsp; (if (findfile zxfilename)<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq f (open zxfilename "r"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (setq numline (read-line f))<br/>&nbsp;(setq numline (atoi numline))<br/>&nbsp;(progn<br/>&nbsp;&nbsp; (setq numline 1)<br/>&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (close f)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq numline 1)<br/>&nbsp; )<br/>&nbsp; (setq oldnumline numline)<br/>&nbsp; (if (setq numline (getint (strcat "\n[单下划线(1)/双下划线(2)]&lt;"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (itoa numline)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&gt;:"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; ()<br/>&nbsp;&nbsp;&nbsp; (setq numline oldnumline)<br/>&nbsp; )<br/>&nbsp; ;保存到数据文件<br/>&nbsp; (setq f (open zxfilename "w"))<br/>&nbsp; (write-line (itoa numline) f)<br/>&nbsp; (close f)</p><p>&nbsp; (setq shenchu 200) ;直线伸出的长度<br/>&nbsp; (setq gaptextline 200) ;文字与直线的间距<br/>&nbsp; (setq gapline 100) ;双下划线间距<br/>&nbsp; (setq biglinewide 70) ;下划线粗线线宽<br/>&nbsp; (setq smalllinewide 0) ;下划线细线线宽<br/>&nbsp; (if (setq xz (ssget '((0 . "*TEXT,LWPOLYLINE,LINE"))))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq xzline (ssget "x" '((0 . "LWPOLYLINE,LINE"))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq xzline (dyq-get-jiaoji xz xzline))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq xztext (dyq-get-chaji xz xzline))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "erase" xzline "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq num (sslength xztext))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq i 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat num<br/>&nbsp;(setq obj (ssname xztext i))<br/>&nbsp;(setq objlist (entget obj))<br/>&nbsp;(setq txtang (cdr (assoc '50 objlist)))<br/>&nbsp;(setq pt (cdr (assoc '10 objlist)))<br/>&nbsp;(setq txtlen (dyq-get-string-netwide obj))<br/>&nbsp;(setq p1 (polar&nbsp;(polar pt (- txtang (* 0.5 pi)) gaptextline)<br/>&nbsp;&nbsp;&nbsp;(+ txtang pi)<br/>&nbsp;&nbsp;&nbsp;shenchu<br/>&nbsp;&nbsp; )<br/>&nbsp;)<br/>&nbsp;(setq p2 (polar p1 (- txtang (* 0.5 pi)) gapline))<br/>&nbsp;(command "pline" ;如果是单下划线则绘制细线<br/>&nbsp;&nbsp; p1<br/>&nbsp;&nbsp; "w"<br/>&nbsp;&nbsp; biglinewide<br/>&nbsp;&nbsp; biglinewide<br/>&nbsp;&nbsp; (polar p1 txtang (+ shenchu shenchu txtlen))<br/>&nbsp;&nbsp; ""<br/>&nbsp;)<br/>&nbsp;(if (= numline 2.0) ;如果是双下划线则绘制细线<br/>&nbsp;&nbsp; (command "pline"<br/>&nbsp;&nbsp;&nbsp;&nbsp; p2<br/>&nbsp;&nbsp;&nbsp;&nbsp; "w"<br/>&nbsp;&nbsp;&nbsp;&nbsp; smalllinewide<br/>&nbsp;&nbsp;&nbsp;&nbsp; smalllinewide<br/>&nbsp;&nbsp;&nbsp;&nbsp; (polar p2 txtang (+ shenchu shenchu txtlen))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ""<br/>&nbsp;&nbsp; )<br/>&nbsp;)<br/>&nbsp;(setq i (+ i 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )</p><p>&nbsp; (dyq-put-oldstatus oldstatus)<br/>&nbsp; (setq *error* &amp;olderr&amp;)<br/>&nbsp; (princ)<br/>) ;zx结束</p>

flfcegu168 发表于 2008-2-23 19:03:00

<p>这是删直线程式:</p><p></p><p><strong>(defun c:sx()<br/>&nbsp; (prompt "/n 请选择要删除的直线")<br/>&nbsp; (setq s2 (ssget<br/>&nbsp;&nbsp;&nbsp;&nbsp; (list (cons -4 "&lt;or")(cons 0 "line")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons -4 "or&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )));;选择物体。<br/>&nbsp; (if (= s2 nil)(exit))<br/>&nbsp; (setq index 0)</strong></p><p><strong><br/>&nbsp; (command "erase" s2 "")<br/>&nbsp; (prin1)<br/>&nbsp; )</strong></p>
页: [1]
查看完整版本: 文字下面的线段以及多段线等删除