[求助]一个管径标注的LSP请高手帮助修改一下
本帖最后由 作者 于 2009-11-16 20:40:44 编辑 <br /><br /> <p>修改要求:1.选择多义线时能够将管径标注在鼠标点取的位置。</p><p> 2.管径距管线的距离120mm。</p><p>(DEFUN C:ggg(/ cstr cstr0 cstr1 a0 ab num num1 pt pt0 pt1 zang1)<br/>;;;defun err<br/> (defun err (msg)<br/> (setq *error* olderr)<br/> (setvar "osmode" ccmd)<br/> (setvar "clayer" clay)<br/> (setq num nil)<br/> (princ "操作错误!请先键入NEA,再选择管线!")<br/> (princ) <br/> ) ;for defun fi-err<br/>;;;main <br/> (setq olderr *error* *error* err)<br/> (setq clay (getvar "clayer")) <br/> (setq ccmd (getvar "osmode"))<br/> (setvar "osmode" 0)<br/> (setq sc1 sc) ;;;get current scale<br/>;;;the following sets current scale<br/> (if (or (null sc) (<= sc 0))<br/> (if (not (numberp sc))<br/> (progn<br/> (setq sc 100 sc1 100)<br/> (initget (+ 2 4))<br/> (setq sc (getreal (strcat "图纸比例--1:<" (rtos sc1) ">")))<br/></p> 本帖最后由 作者 于 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)
)
eii 发表于 2019-7-17 12:28
ZZXXQQ 总栽树,我乘凉哈根据ZZXXQQ 的代码调整了下,主要修改了不能连续标注的bug,另外将文字离管 ...
下载不了了,正在急用看看大神的作品怎么样的 ZZXXQQ 总栽树,我乘凉哈根据ZZXXQQ 的代码调整了下,主要修改了不能连续标注的bug,另外将文字离管线的距离与文字的高度关联
命令:tt <p>你好!非常感谢你的帮助。1.我的要求是在line和pline上都可以标注,你帮我修改的文件不能在line上标注了。另外我只要求标注管径就可以,不需要管径和长度同时标注,请取消长度。2.测试时很容易出错,再次感谢你的帮助。</p> 二楼已改,再试试。 <p>你好zzxxQQ今天试啦一下,挺好的,还想请你再调整一下。</p><p>一、管线的默认值应该根据点选的不同管线而不同,排水管DN100 给水管DN15.....我想应该跟下面这段有关。</p><ol><li>((= lnm "排水管") (setq cstr1 "150")) </li><li> ((= lnm "雨水") (setq cstr1 "150")) </li><li> ((= lnm "给水管") (setq cstr1 "15")) </li><li> ((= lnm "热水") (setq cstr1 "15")) </li><li> ((= lnm "消防") (setq cstr1 "100"))</li></ol><p>二、第一次加载输入图纸比例即可。</p><p>三、管径文字标注的位置,当我点选的位置偏下时,标注会跑到管线的下方,这不符合制图规范。水平管线应在线的上方,始终按顺时方向,竖向管线,标注应在左侧,这个调整会不会很麻烦。</p><p>第一个问题是最需改进的,如果以后给排水的网友能用到这个程序,我和他们向你表示感谢!</p><p></p><p></p> 二楼又改了。再试试。 <p>标注管道时会出现下面的错误。</p><p>GGG 图纸比例--1:<100><br/>选择要标注的管线:默认管径值是10<br/>请输入管径:<br/>参数类型错误: numberp: nil</p> 第50行错了。<br/>应将(T (setq cstr1 10))<br/>改成(T (setq cstr1 "10")) 你好zzxxQQ,可能我说的不太明白,管径的默认值应该是变化的,当我点取排水管时,默认的管径应为DN100,即第29行的值,我点取给水管时,默认的管径应为DN15,即第31行的值,以此类推,当点取喷淋管时,管径根据喷头的数量是变化的,39~46行的值。 二楼又改了改,再试试。
页:
[1]
2