lz689706 发表于 2009-11-7 15:50:00

[求助]一个管径标注的LSP请高手帮助修改一下

本帖最后由 作者 于 2009-11-16 20:40:44 编辑 <br /><br /> <p>修改要求:1.选择多义线时能够将管径标注在鼠标点取的位置。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.管径距管线的距离120mm。</p><p>(DEFUN C:ggg(/ cstr cstr0 cstr1 a0 ab num num1 pt pt0 pt1 zang1)<br/>;;;defun err<br/>&nbsp;&nbsp;&nbsp; (defun err (msg)<br/>&nbsp;&nbsp;&nbsp; (setq *error* olderr)<br/>&nbsp;&nbsp;&nbsp; (setvar "osmode" ccmd)<br/>&nbsp;&nbsp;&nbsp; (setvar "clayer" clay)<br/>&nbsp;&nbsp;&nbsp; (setq num nil)<br/>&nbsp;&nbsp;&nbsp; (princ "操作错误!请先键入NEA,再选择管线!")<br/>&nbsp;&nbsp;&nbsp; (princ)&nbsp; <br/>&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;for defun fi-err<br/>;;;main&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq olderr *error* *error* err)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq clay (getvar "clayer"))&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ccmd (getvar "osmode"))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setvar "osmode" 0)<br/>&nbsp;(setq sc1 sc) ;;;get current scale<br/>;;;the following sets current scale<br/>&nbsp;(if (or (null sc) (&lt;= sc 0))<br/>&nbsp; (if (not (numberp sc))<br/>&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sc 100 sc1 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (initget (+ 2 4))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sc (getreal (strcat "图纸比例--1:&lt;" (rtos sc1) "&gt;")))<br/></p>

ZZXXQQ 发表于 2009-11-8 21:45:00

本帖最后由 作者 于 2009-11-22 11:16:18 编辑


;明经 ZZXXQQ 2009.11.8-2009.11.22 改
(defun c:ggg(/ cstr cstr0 cstr1 a0 ab num num1 pt pt1 zang1)
(defun err (msg)
(setq *error* olderr)
(setvar "osmode" ccmd)
(setvar "clayer" clay)
(setq num nil)
(princ msg)
(princ)   
)
;;;main
(setq olderr *error* *error* err)
(setq clay (getvar "clayer"))
(setq ccmd (getvar "osmode"))
(setvar "osmode" 0)
(setq sc1 (if (and (numberp sc) (> sc 0)) sc 100)) ;;;get current scale
;;;the following sets current scale
(initget (+ 2 4))
(setq sc (getreal (strcat "图纸比例--1:<" (rtos sc1) ">")))
(setq sc (if sc sc sc1))
(setq num 1 num1 1)
(setq hh (* 2.5 sc))
(while (setq A0 (ENTSEL "\n选择要标注的管线:"))
(setq pt (cadr A0))
(setq AA (car A0))
(if (wcmatch (cdr(assoc 0 (entget aa))) "LINE,*POLYLINE,SPLINE") (progn
   (setq lnm (cdr(assoc 8 (entget aa))))
   (cond
    ((= lnm "排水管") (setq cstr1 "100"))
    ((= lnm "雨水") (setq cstr1 "150"))
    ((= lnm "给水管") (setq cstr1 "15"))
    ((= lnm "热水") (setq cstr1 "15"))
    ((= lnm "消防") (setq cstr1 "100"))
    ((or (= lnm "喷淋") (= lnm "水幕"))
   (setq num (getint (strcat "\n请输入此喷头前的喷头数<" (itoa num) ">:")))
   (if (= num nil) (setq num num1) (setq num1 (+ num num1) num num1))
   (if num
      (cond
       ((= num 1) (setq cstr1 "25"))
       ((= num 4) (setq cstr1 "32"))
       ((< 5 num 8) (setq cstr1 "40"))
       ((< 7 num 11) (setq cstr1 "50"))
       ((< 10 num 15) (setq cstr1 "70"))
       ((< 14 num 17) (setq cstr1 "80"))
       ((< 16 num 61) (setq cstr1 "100"))
       ((> num 60) (setq cstr1 "150"))
      )
   )
    )
    (T (setq cstr1 "10"))
   )
   (if (and (= (type cstr0) 'STR) (> (strlen cstr0) 0)) (setq cstr1 cstr0))
   (princ "默认管径值是")(princ cstr1)
   (setq cstr (getstring "\n请输入管径:"))
   (if (= cstr "")(setq cstr cstr1))
   (setvar "clayer" lnm)
   (setq pt1 (osnap pt "NEA")
         ang (angle pt1 pt)
         ang (if (or (equal ang 0 0.0001) (> ang pi)) (- ang pi))
         pt1 (polar pt1 ang 120)
         ang (/ (* (- ang (/ pi 2)) 180) pi))
;   (command "lengthen" aa "")
;   (setq len (strcat "DN" cstr "-" (rtos (getvar "PERIMETER") 2)))
   (command "text" "S" "DIM_FONT1" "C" pt1 hh ang (strcat "DN" cstr))
   (command "chprop" "l" "" "c" "2" "")
   (if (or (= lnm "Z喷淋")(= lnm "水幕"))
    (setq num1 (1+ num1) cstr0 nill)
    (setq cstr0 cstr)
   );for if
))
);for while
(setq *error* olderr)
(setvar "clayer" clay)
(setvar "osmode" ccmd)
(princ)
)

包仁的花生壳 发表于 2020-4-6 14:54:34

eii 发表于 2019-7-17 12:28
ZZXXQQ 总栽树,我乘凉哈根据ZZXXQQ 的代码调整了下,主要修改了不能连续标注的bug,另外将文字离管 ...

下载不了了,正在急用看看大神的作品怎么样的

eii 发表于 2019-7-17 12:28:53

ZZXXQQ 总栽树,我乘凉哈根据ZZXXQQ 的代码调整了下,主要修改了不能连续标注的bug,另外将文字离管线的距离与文字的高度关联
命令:tt

lz689706 发表于 2009-11-14 14:54:00

<p>你好!非常感谢你的帮助。1.我的要求是在line和pline上都可以标注,你帮我修改的文件不能在line上标注了。另外我只要求标注管径就可以,不需要管径和长度同时标注,请取消长度。2.测试时很容易出错,再次感谢你的帮助。</p>

ZZXXQQ 发表于 2009-11-14 15:12:00

二楼已改,再试试。

lz689706 发表于 2009-11-15 18:59:00

<p>你好zzxxQQ今天试啦一下,挺好的,还想请你再调整一下。</p><p>一、管线的默认值应该根据点选的不同管线而不同,排水管DN100 给水管DN15.....我想应该跟下面这段有关。</p><ol><li>((= lnm "排水管") (setq cstr1 "150")) </li><li>&nbsp;&nbsp;&nbsp; ((= lnm "雨水") (setq cstr1 "150")) </li><li>&nbsp;&nbsp;&nbsp; ((= lnm "给水管") (setq cstr1 "15")) </li><li>&nbsp;&nbsp;&nbsp; ((= lnm "热水") (setq cstr1 "15")) </li><li>&nbsp;&nbsp;&nbsp; ((= lnm "消防") (setq cstr1 "100"))</li></ol><p>二、第一次加载输入图纸比例即可。</p><p>三、管径文字标注的位置,当我点选的位置偏下时,标注会跑到管线的下方,这不符合制图规范。水平管线应在线的上方,始终按顺时方向,竖向管线,标注应在左侧,这个调整会不会很麻烦。</p><p>第一个问题是最需改进的,如果以后给排水的网友能用到这个程序,我和他们向你表示感谢!</p><p></p><p></p>

ZZXXQQ 发表于 2009-11-16 19:59:00

二楼又改了。再试试。

lz689706 发表于 2009-11-16 22:25:00

<p>标注管道时会出现下面的错误。</p><p>GGG 图纸比例--1:&lt;100&gt;<br/>选择要标注的管线:默认管径值是10<br/>请输入管径:<br/>参数类型错误: numberp: nil</p>

ZZXXQQ 发表于 2009-11-21 11:17:00

第50行错了。<br/>应将(T (setq cstr1 10))<br/>改成(T (setq cstr1 "10"))

lz689706 发表于 2009-11-21 14:29:00

你好zzxxQQ,可能我说的不太明白,管径的默认值应该是变化的,当我点取排水管时,默认的管径应为DN100,即第29行的值,我点取给水管时,默认的管径应为DN15,即第31行的值,以此类推,当点取喷淋管时,管径根据喷头的数量是变化的,39~46行的值。

ZZXXQQ 发表于 2009-11-22 11:18:00

二楼又改了改,再试试。
页: [1] 2
查看完整版本: [求助]一个管径标注的LSP请高手帮助修改一下