[求助] 会编程的进来看看
<p>有个LSP程序在线上标字!但是标注的字离线太远了点! 请帮忙修改下!与线的距离缩短到一半就好了!</p><p>(prompt "\n\n***欢迎使用水流畅制作的小工具***")<br/>(prompt "\n\n***命令:DN***")<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun dxf (code elist)<br/> (cdr (assoc code elist)))<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun c:dn (/ cmd_old os_old ss ss1 ss2 pt pt0 pt1 pt2 ang dn dn0 bdn_er bdn_oe)<br/> (setq cmd_old (getvar "cmdecho"))<br/> (setvar "cmdecho" 0)<br/> (setq os_old (getvar "osmode"))<br/> (setvar "osmode" 0)<br/>;;<br/> (command "style" "ly1" "ly1,ly11" "0" "0.7" "0" "" "" "")<br/> (setvar "textsize" 300)<br/>;;<br/> (defun bdn_er (s) ; If an error (such as ESC) occurs<br/> ; while this command is active...<br/> (if (/= msg "功能取消")<br/> (if (= msg "退出 / 中止")<br/> (princ)<br/> (princ (strcat "\n功能取消!"))<br/> )<br/> )<br/> (eval (read U:E))<br/> (if bdn_oe ; If an old error routine exists<br/> (setq *error* bdn_oe) ; then, reset it<br/> )<br/> (if temp<br/> (redraw temp 1)<br/> )<br/> (princ)<br/> )<br/> (if *error* ; Set our new error handler<br/> (setq bdn_oe *error*<br/> *error* bdn_er<br/> )<br/> (setq *error* bdn_er)<br/> )</p><p> ;; Set undo groups and ends with (eval(read U:G)) or (eval(read U:E))<br/> (setq U:G "(command \"undo\" \"group\")"<br/> U:E "(command \"undo\" \"en\")"<br/> )<br/>(while<br/> (setq ss (entsel "\n请拾取需标注管径的管道<回车退出>:"))<br/> (menucmd "P0=DN.p02")<br/> (menucmd "P0=*")<br/> (setq ss1 (entget (car ss)))<br/> (setq ss2 (dxf 0 ss1))<br/> (setq pt (car (cdr ss)))<br/> (setq pt (osnap pt "NEA"))<br/> (cond<br/> ((= ss2 "LINE")</p><p> (setq pt1 (dxf 10 ss1)<br/> pt2 (dxf 11 ss1)<br/> )<br/> (setq ang0 (angle pt1 pt2))<br/> (if<br/> (and (> ang0 (* PI 0.5)) (<= ang0 (* PI 1.5)))<br/> (setq ang0 (+ ang0 PI))<br/> )<br/> (setq ang (+ ang0 (* PI 0.5)))<br/> (setq pt0 (polar pt ang (* (getvar "textsize") 10)))<br/> (setq pt (inters pt1 pt2 pt0 pt nil))<br/> (setq pt (polar pt ang (* (getvar "textsize") 0.35))) <br/> (setq dn0 "15")<br/> (setq dn (getstring (strcat "\n请输入该管道管径<" dn0 ">:")))<br/> (if<br/> (= dn "")<br/> (setq dn dn0)<br/> (setq dn0 dn)<br/> )<br/> (setq dn (strcat "DN" dn))<br/> (command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)<br/> ) ;cond1</p><p><br/> ((= ss2 "LWPOLYLINE")<br/> (setq ss1 (member (assoc 10 ss1) ss1))<br/> (setq pt1 (dxf 10 ss1))</p><p> (setq r 1)<br/> (while r<br/> (setq ss1 (cdr ss1)<br/> ss1 (member (assoc 10 ss1) ss1)<br/> pt2 (dxf 10 ss1)<br/> )</p><p><br/> (setq dt1 (distance pt1 pt)<br/> dt2 (distance pt pt2)<br/> dt1 (+ dt1 dt2)<br/> dt1 (rtos dt1 2 1)<br/> dt1 (distof dt1 2)<br/> dt2 (distance pt1 pt2)<br/> dt2 (rtos dt2 2 1)<br/> dt2 (distof dt2 2)<br/> )</p><p> (if (= dt1 dt2)<br/> (setq r nil)<br/> (setq pt1 pt2)<br/> )<br/> ) ;end while<br/> (setq ang0 (angle pt1 pt2))<br/> (if<br/> (and (> ang0 (* PI 0.5)) (<= ang0 (* PI 1.5)))<br/> (setq ang0 (+ ang0 PI))<br/> )<br/> (setq ang (+ ang0 (* PI 0.5)))<br/> (setq pt0 (polar pt ang (* (getvar "textsize") 2)))<br/> (setq pt (inters pt1 pt2 pt0 pt nil))<br/> (setq pt (polar pt ang (* (getvar "textsize") 0.4))) <br/> (setq dn0 "15")<br/> (setq dn (getstring (strcat "\n请输入该管道管径<" dn0 ">:")))<br/> (if<br/> (= dn "")<br/> (setq dn dn0)<br/> (setq dn0 dn)<br/> )<br/> (setq dn (strcat "DN" dn))<br/> (command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)</p><p> ) ;cond2<br/> (T<br/> (alert "\n所选图元不能进行管径标注!重新选取")<br/> ) ;T<br/>) ;cond<br/>) ;while<br/>(setvar "cmdecho" cmd_old)<br/>(setvar "osmode" os_old)<br/>(princ)<br/>);end of defun</p> 不太懂你的意思,先下載研究研究.感謝你! 改了改,加入了字线间距和字高的输入。(prompt "\n\n***欢迎使用水流畅制作的小工具***")
(prompt "\n\n***命令:DN***")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun dxf (code elist) (cdr (assoc code elist)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:dn (/ cmd_old os_old ss ss1 ss2 pt pt0 pt1 pt2 ang dn dn0 bdn_er bdn_oe)
(setq cmd_old (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq os_old (getvar "osmode"))
(setvar "osmode" 0)
;;
(command "style" "ly1" "ly1,ly11" "0" "0.7" "0" "" "" "")
(setvar "textsize" 300)
;;
(defun bdn_er (s) ; If an error (such as ESC) occurs
; while this command is active...
(if (/= msg "功能取消")
(if (= msg "退出 / 中止")
(princ)
(princ (strcat "\n功能取消!"))
)
)
(eval (read U:E))
(if bdn_oe ; If an old error routine exists
(setq *error* bdn_oe); then, reset it
)
(if temp
(redraw temp 1)
)
(princ)
)
(if *error* ; Set our new error handler
(setq bdn_oe*error*
*error* bdn_er
)
(setq *error* bdn_er)
)
;; Set undo groups and ends with (eval(read U:G)) or (eval(read U:E))
(setq U:G "(command \"undo\" \"group\")"
U:E "(command \"undo\" \"en\")"
)
(SETQ OLDGAP (GETVAR "DIMGAP"))
(SETQ OLDTH (GETVAR "TEXTSIZE"))
(SETQ GAP (GETDIST (STRCAT "\n输入字线间距 <" (GETVAR "DIMGAP") "> :"))
GAP (IF GAP GAP (GETVAR "DIMGAP")))
(SETVAR "DIMGAP" GAP)
(SETQ TXTH (GETDIST (STRCAT "\n输入字高 <" (GETVAR "TEXTSIZE") "> :"))
TXTH (IF TXTH TXTH (GETVAR "TEXTSIZE")))
(SETVAR "TEXTSIZE" TXTH)
(while (setq ss (entsel "\n请拾取需标注管径的管道<回车退出>:"))
(menucmd "P0=DN.p02")
(menucmd "P0=*")
(setq ss1 (entget (car ss)))
(setq ss2 (dxf 0 ss1))
(setq pt (car (cdr ss)))
(setq pt (osnap pt "NEA"))
(cond
((= ss2 "LINE")
(setq pt1 (dxf 10 ss1)
pt2 (dxf 11 ss1)
)
(setq ang0 (angle pt1 pt2))
(if (and (> ang0 (* PI 0.5)) (<= ang0 (* PI 1.5)))
(setq ang0 (+ ang0 PI))
)
(setq ang (+ ang0 (* PI 0.5)))
(setq pt0 (polar pt ang (* (getvar "textsize") 10)))
(setq pt (inters pt1 pt2 pt0 pt nil))
(setq pt (polar pt ang (getvar "DIMGAP")))
(setq dn0 "15")
(setq dn (getstring (strcat "\n请输入该管道管径<" dn0 ">:")))
(if (= dn "")
(setq dn dn0)
(setq dn0 dn)
)
(setq dn (strcat "DN" dn))
(command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)
) ;cond1
((= ss2 "LWPOLYLINE")
(setq ss1 (member (assoc 10 ss1) ss1))
(setq pt1 (dxf 10 ss1))
(setq r 1)
(while r
(setq ss1 (cdr ss1)
ss1 (member (assoc 10 ss1) ss1)
pt2 (dxf 10 ss1)
)
(setq dt1 (distance pt1 pt)
dt2 (distance pt pt2)
dt1 (+ dt1 dt2)
dt1 (rtos dt1 2 1)
dt1 (distof dt1 2)
dt2 (distance pt1 pt2)
dt2 (rtos dt2 2 1)
dt2 (distof dt2 2)
)
(if (= dt1 dt2)
(setq r nil)
(setq pt1 pt2)
)
) ;end while
(setq ang0 (angle pt1 pt2))
(if (and (> ang0 (* PI 0.5)) (<= ang0 (* PI 1.5)))
(setq ang0 (+ ang0 PI))
)
(setq ang (+ ang0 (* PI 0.5)))
(setq pt0 (polar pt ang (* (getvar "textsize") 2)))
(setq pt (inters pt1 pt2 pt0 pt nil))
(setq pt (polar pt ang (getvar "DIMGAP")))
(setq dn0 "15")
(setq dn (getstring (strcat "\n请输入该管道管径<" dn0 ">:")))
(if (= dn "")
(setq dn dn0)
(setq dn0 dn)
)
(setq dn (strcat "DN" dn))
(command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)
) ;cond2
(T (alert "\n所选图元不能进行管径标注!重新选取"))
) ;cond
);while
(SETVAR "DIMGAP" OLDGAP)
(SETVAR "TEXTSIZE" OLDTH)
(setvar "cmdecho" cmd_old)
(setvar "osmode" os_old)
(princ)
);end of defun
(setq pt0 (polar pt ang (* (getvar "textsize") 2)))
(setq pt (inters pt1 pt2 pt0 pt nil))
(setq pt (polar pt ang (* (getvar "textsize") 0.4)))
将其中2及0.4修改较小数值即可
页:
[1]