实用的LSP源代码,值得参考
liminnet
liminnet Lv.5
2007年08月09日 10:21:24
只看楼主

(defun c:cd (/) (setvar "cmdecho" 1) (setq a1 (getpoint "第一点")) (princ "") (setq a2 (getpoint "第二点")) (princ "") (setq ang (* (/ (angle a1 a2) pi) 180)) (setq dist (rtos (/ (distance a1 a2) 1000) 2 1))

(defun c:cd (/)
(setvar "cmdecho" 1)
(setq a1 (getpoint "第一点"))
(princ "
")
(setq a2 (getpoint "第二点"))
(princ "
")
(setq ang (* (/ (angle a1 a2) pi) 180))
(setq dist (rtos (/ (distance a1 a2) 1000) 2 1))
(setq dist1 (strcat "L=" dist "m"))
(setq a3 (getpoint "文字插入点"))
(command "text" a3 "350" ang dist1)
)


我想在这段代码里点功能就是提示我;管径Dn=多少,i=多少,然后用人工输入数据,出
来的效果是这样子:管径Dn=300 L=9.8m i=0.008,大哥大姐帮帮忙啊
免费打赏
水的畅想
2007年08月24日 18:27:41
82楼
给你一段
看看能不能解决~


(defun C:FFW ()
(ret0)
(setq oldblp (getvar "blipmode")
oldech (getvar "cmdecho")
olderr *error*
linetype1 (getvar "celtype")
layer1 (getvar "clayer")
color1 (getvar "cecolor")
)
(setvar "blipmode" 0)
(setvar "cmdecho" 0)
(defun *error* (msg)
(princ "\n")
(princ msg)
(setvar "blipmode" oldblp)
(setvar "cmdecho" oldech)
(setq *error* olderr)
(princ)
)
(prompt "\n请选择要改变宽度的线,弧,圆及多义线.")
(setq p (ssget))
(setq w (getreal "\n请输入宽度<0.5>:"))
(if (not w) (setq w 0.5))
(setq w (* plot_scale w))
(setq l 0 m 0 n (sslength p))
(while (< l n)
(setq q (ssname p l))
(setq ent (entget q))
(setq b (cdr (assoc 0 ent)))
(if (member b ’("LINE" "ARC"))
(progn
(command "PEDIT" q "y" "w" w "x")
(setq m (+ 1 m))
)
)
(if (= "LWPOLYLINE" b)
(progn
(command "PEDIT" q "w" w "x")
(setq m (+ 1 m))
)
)
(if (= "CIRCLE" b)
(progn
(if (assoc 6 ent) (setq linetype0 (cdr (assoc 6 ent))) (setq linetype0 "bylayer"))
(setq layer0 (cdr (assoc 8 ent)))
(if (assoc 62 ent) (setq color0 (cdr (assoc 62 ent))) (setq color0 "bylayer"))
(setq center0 (cdr (assoc 10 ent)))
(setq radius0 (cdr (assoc 40 ent)))
(setq diameter0 (* 2 radius0))
(entdel q)
(command "color" color0)
(command "layer" "s" layer0 "")
(command "linetype" "s" linetype0 "")
(if (> w diameter0)
(progn
(princ "\n\t 因线宽大于圆的直径,故将该圆填充")
(princ)
(setq rad-out (* 2 radius0)
rad-in 0
)
)
)
(if (<= w diameter0)
(progn
(setq rad-out (+ (* 2 radius0) w)
rad-in (- (* 2 radius0) w)
)
)
)
(command "donut" rad-in rad-out center0 "")
(setq m (+ 1 m))
)
)
(setq l (+ 1 l))
)
(if (= 0 m)
(progn
(princ "\n\t 没有任何线,弧,圆及多义线被选中")
(princ)
)
)
(setvar "blipmode" oldblp)
(setvar "cmdecho" oldech)
(setq *error* olderr)
(command "color" color1)
(command "layer" "s" layer1 "")
(command "linetype" "s" linetype1 "")
(princ)
)
(princ)


(defun ret0 ()
(if (not plot_scale) (progn(setq plot_scale0 (getreal "\n出图比例(默认:100)"))(if (= plot_scale0 nil) (setq plot_scale0 100)(princ)) (setq plot_scale plot_scale0))(setq plot_scale plot_scale0))
(if (not hight) (progn(setq hight0 (getreal "\n文字高度(默认:3.5)"))(if (= hight0 nil) (setq hight0 2.5)(princ)) (setq hight hight0))(setq hight hight0))
(setq hz_hight (* plot_scale hight))
(princ)
)


回复
sailorcwx
2007年08月24日 20:45:11
83楼
11
回复
liminnet
2007年08月25日 10:19:25
84楼
浪大哥,我试了一下,整体上是对的,但没有宽度的多段线和块里有没有宽度的多段线这两种是不应该提示也考虑已选在对象里面的,这点要是再完善一下就完美无暇了
回复
gpszx1981
2007年08月25日 10:28:45
85楼

我想世界上没有那么多完美的事情吧?
不知道你是怎么理解块的~
既然是块
那么一般都是一样的东西做成块
方便快捷
而不是做成块然后去修改的
回复
sailorcwx
2007年08月25日 15:21:46
86楼
你把程序的第二句
(setq YH_ss (ssget ’((0 . "LWPOLYLINE,INSERT"))))
改成
(setq YH_ss (ssget ’((-4 . "<OR")(0 . "INSERT")(-4 . "<AND")(0 . "LWPOLYLINE")(-4 . "<NOT")(43 . 0)(-4 . "NOT>")(-4 . "AND>")(-4 . "OR>"))))
就可以了
回复
liminnet
2007年08月25日 16:41:29
87楼
加载后提示:参数类型错误: consp "INSERT",帮我看看呀,浪大哥
回复
sailorcwx
2007年08月25日 23:37:10
88楼
都说论坛会把半角的符号转成全角的啦!程序里面是没有全角符号的!
回复
liminnet
2007年08月26日 20:57:55
89楼
浪大哥,我都不知道那些要改成半角,不知道那些符号要改过来,我水平有限了,你就帮我改过来吗,好不好,浪大哥,麻烦了
回复
winds039044025
2007年08月28日 16:32:13
90楼
哥们你也有点贪了真的~~
不过浪大哥的确是我们学习的榜样啊!!!
回复
fb39338693
2007年09月26日 11:08:01
91楼
在学校学过LISP,当初感觉学的还可以,不过后来都忘记了。真可惜了,工作中用得也不多,看热闹来了
回复

相关推荐

APP内打开