wowan1314 发表于 2007-11-7 19:59:00

[求助] 会编程的进来看看

<p>有个LSP程序在线上标字!但是标注的字离线太远了点! 请帮忙修改下!与线的距离缩短到一半就好了!</p><p>(prompt "\n\n***欢迎使用水流畅制作的小工具***")<br/>(prompt "\n\n***命令:DN***")<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun dxf (code elist)<br/>&nbsp; (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/>&nbsp; (setq cmd_old (getvar "cmdecho"))<br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (setq os_old (getvar "osmode"))<br/>&nbsp; (setvar "osmode" 0)<br/>;;<br/>&nbsp;&nbsp; (command "style" "ly1" "ly1,ly11" "0" "0.7" "0" "" "" "")<br/>&nbsp;&nbsp; (setvar "textsize" 300)<br/>;;<br/>&nbsp; (defun bdn_er&nbsp;(s)&nbsp;&nbsp;&nbsp;; If an error (such as ESC) occurs<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; while this command is active...<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(/= msg "功能取消")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= msg "退出 / 中止")<br/>&nbsp;(princ)<br/>&nbsp;(princ (strcat "\n功能取消!"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (eval (read U:E))<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;bdn_oe&nbsp;&nbsp;&nbsp;&nbsp;; If an old error routine exists<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq *error* bdn_oe)&nbsp;&nbsp;; then, reset it<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;temp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (redraw temp 1)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (princ)<br/>&nbsp; )<br/>&nbsp; (if *error*&nbsp;&nbsp;&nbsp;&nbsp;; Set our new error handler<br/>&nbsp;&nbsp;&nbsp; (setq bdn_oe&nbsp; *error*<br/>&nbsp;&nbsp; *error* bdn_er<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq *error* bdn_er)<br/>&nbsp; )</p><p>&nbsp; ;; Set undo groups and ends with (eval(read U:G)) or (eval(read U:E))<br/>&nbsp; (setq&nbsp;U:G "(command \"undo\" \"group\")"<br/>&nbsp;U:E "(command \"undo\" \"en\")"<br/>&nbsp; )<br/>(while<br/>&nbsp; (setq ss (entsel "\n请拾取需标注管径的管道&lt;回车退出&gt;:"))<br/>&nbsp; (menucmd "P0=DN.p02")<br/>&nbsp; (menucmd "P0=*")<br/>&nbsp; (setq ss1 (entget (car ss)))<br/>&nbsp; (setq ss2 (dxf 0 ss1))<br/>&nbsp; (setq pt (car (cdr ss)))<br/>&nbsp; (setq pt (osnap pt "NEA"))<br/>&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((= ss2 "LINE")</p><p>&nbsp;&nbsp;&nbsp;&nbsp; (setq pt1 (dxf 10 ss1)<br/>&nbsp;&nbsp;&nbsp; pt2 (dxf 11 ss1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang0 (angle pt1 pt2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and (&gt; ang0 (* PI 0.5)) (&lt;= ang0 (* PI 1.5)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang0 (+ ang0 PI))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang (+ ang0 (* PI 0.5)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt0 (polar pt ang (* (getvar "textsize") 10)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (inters pt1 pt2 pt0 pt nil))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (polar pt ang (* (getvar "textsize") 0.35)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn0 "15")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn (getstring (strcat "\n请输入该管道管径&lt;" dn0 "&gt;:")))<br/>&nbsp;&nbsp;&nbsp; (if<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (= dn "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn dn0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn0 dn)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn (strcat "DN" dn))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)<br/>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;cond1</p><p><br/>&nbsp; ((= ss2 "LWPOLYLINE")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss1 (member (assoc 10 ss1) ss1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt1 (dxf 10 ss1))</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq r 1)<br/>&nbsp;&nbsp;&nbsp; (while r<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss1 (cdr ss1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ss1 (member (assoc 10 ss1) ss1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt2 (dxf 10 ss1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</p><p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dt1 (distance pt1 pt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt2 (distance pt pt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt1 (+ dt1 dt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt1 (rtos dt1 2 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt1 (distof dt1 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt2 (distance pt1 pt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt2 (rtos dt2 2 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt2 (distof dt2 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= dt1 dt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq r nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt1 pt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp; ;end while<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang0 (angle pt1 pt2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and (&gt; ang0 (* PI 0.5)) (&lt;= ang0 (* PI 1.5)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang0 (+ ang0 PI))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ang (+ ang0 (* PI 0.5)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt0 (polar pt ang (* (getvar "textsize") 2)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (inters pt1 pt2 pt0 pt nil))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (polar pt ang (* (getvar "textsize") 0.4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn0 "15")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn (getstring (strcat "\n请输入该管道管径&lt;" dn0 "&gt;:")))<br/>&nbsp;&nbsp;&nbsp; (if<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (= dn "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn dn0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn0 dn)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq dn (strcat "DN" dn))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.text" "C" pt (getvar "textsize") (angtos ang0 0 3) dn)</p><p>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;cond2<br/>&nbsp; (T<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (alert "\n所选图元不能进行管径标注!重新选取")<br/>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;T<br/>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;cond<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;while<br/>(setvar "cmdecho" cmd_old)<br/>(setvar "osmode" os_old)<br/>(princ)<br/>);end of defun</p>

yoyoho 发表于 2007-11-13 00:42:00

不太懂你的意思,先下載研究研究.感謝你!

ZZXXQQ 发表于 2007-11-20 16:05:00

改了改,加入了字线间距和字高的输入。


(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

gghpoc 发表于 2008-1-3 20:28:00

(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]
查看完整版本: [求助] 会编程的进来看看