hydkot 发表于 2004-5-24 21:44:00

请高手帮忙

网上down了一个绘制螺栓的lisp程序,加载运行后提示:错误: AutoCAD 变量设置被拒绝: "clayer" "xshx"


本人很菜,请各位高手看以下如何修改。


程序如下


;绘制螺栓                                               <BR>;bolt.lsp


(defun dtr (a)<BR>(* pi (/ a 180.00))<BR>)


;绘制螺栓头<BR>(defun headface ()<BR>(setq f (- d 0.025))<BR>(setq dist1 (/ (- head_dia f) 2))<BR>(setq pt27 (polar pt8 0 dist1))<BR>(setq pt28 (polar pt7 (dtr 180) dist1))<BR>(setq pt29 (polar pt9 0 dist1))<BR>(setq pt30 (polar pt10 (dtr 180) dist1))<BR>(command "line" pt29 pt27 "")<BR>(command "line" pt30 pt28 "")<BR>(setq pt31a (polar pt9 0 (/ DIST1 2)))<BR>(SETQ pt31 (polar pt31a (dtr 90) (float (/ head_thick 10))))<BR>(setq pt32a (polar pt2 (dtr 90) head_thick))<BR>(setq pt32 (polar pt32a (dtr 90) (float (/ head_thick 10))))<BR>(setq pt33a (polar pt30 0 (/ dist1 2)))<BR>(setq pt33 (polar pt33a (dtr 90) (float (/ head_thick 10))))<BR>(command "arc" pt29 pt31 pt9)<BR>(command "arc" pt30 pt32 pt29)<BR>(command "arc" pt10 pt33 pt30)<BR>(command "erase" erase_ent "")<BR>(command "line" pt31 pt33 "")<BR>)


;绘制螺母<BR>(defun nutface ()<BR>(setq pt18 (polar pt14 0 dist1))<BR>(setq pt17 (polar pt15 0 dist1))<BR>(setq pt19 (polar pt13 pi dist1))<BR>(setq pt20 (polar pt12 pi dist1))<BR>(command "line" pt18 pt17 "")<BR>(command "line" pt19 pt20 "")<BR>(setq pt21a (polar pt15 0 (/ DIST1 2)))<BR>(SETQ pt21 (polar pt21a (dtr 270) (float (/ nut_thick 20))))<BR>(setq pt22 (polar pt11 (dtr 270) (float (/ nut_thick 10))))<BR>(setq pt23a (polar pt20 0 (/ dist1 2)))<BR>(setq pt23 (polar pt23a (dtr 270) (float (/ nut_thick 20))))<BR>(command "arc" pt20 pt23 pt12)<BR>(command "arc" pt17 pt22 pt20)<BR>(setq e8 (entlast))<BR>(command "arc" pt15 pt21 pt17)<BR>(command "explode" ent )<BR>(command "erase" pt11 "")<BR>(command "line" pt21 pt23 "")<BR>(setq dist2 (distance pt21 pt23))<BR>(setq picpt (polar pt21 0 (/ dist2 2))) <BR>(command "trim" e8 "" picpt "")<BR>)


;绘制螺栓端部<BR>(defun hexagon ()<BR>(if (&lt; l 6)<BR>(setq thread_len (+ (* 2 d) 0.25))<BR>(setq thread_len (+ (* 2 d) 0.5))<BR>)<BR>(if (&gt; (* 2 d) l)<BR>(setq thread_len (* 1.5 d))<BR>)<BR>(setq head_dia (* 2 d))       ;d为螺栓头宽度<BR>(setq head_thick (* 0.66667 d))       ;d为螺栓头厚度<BR>(setq nut_thick (* 0.9 d))<BR>(setq halfdia (/ d 2))<BR>(setq p1 (polar pt 0 (- halfdia 0.5)))<BR>(setq p2 (polar p1 (dtr 90) thread_len))<BR>(setq p3 (polar p2 pi (- d 1)))<BR>(setq p4 (polar pt pi (- halfdia 0.5)))<BR>(setq pt2 (polar pt (dtr 90) l))<BR>(setq pt3 (polar pt2 0 (/ d 2)))<BR>(setq pt4 (polar pt2 pi (/ d 2)))<BR>(setq pt5 (polar pt 0 (/ d 2)))<BR>(setq pt6 (polar pt pi (/ d 2)))<BR>(setq pt7 (polar pt2 0 (/ head_dia 2)))<BR>(setq pt8 (polar pt2 pi (/ head_dia 2)))<BR>(setq pt9 (polar pt8 (dtr 90) head_thick))<BR>(setq pt10 (polar pt7 (dtr 90) head_thick))<BR>(setq p2a (polar p2 0 0.5))<BR>(setq p3a (polar p3 pi 0.5))<BR>(setq thpt1 (polar pt6 (dtr 90) 0.5))<BR>(setq thpt2 (polar pt5 (dtr 90) 0.5))<BR>(setvar "clayer" "xshx")<BR>(command "line" p2 p1 "")<BR>(command "line" p3 p4 "")<BR>(setvar "clayer" "shx")<BR>(command "line" p2a p3a "")<BR>(command "pline" pt4 thpt1 p4 p1 thpt2 pt3 "")<BR>(command "line" thpt1 thpt2 "")<BR>(setq entit (entlast))<BR>(setq pt11 (getpoint "\n选择螺母底部中心: "))<BR>(setq pt12 (polar pt11 0 (/ head_dia 2)))<BR>(setq pt13 (polar pt12 (dtr 90) nut_thick))<BR>(setq pt14 (polar pt13 pi head_dia))<BR>(setq pt15 (polar pt14 (dtr 270) nut_thick))<BR>(command "line" pt10 pt7 pt8 pt9 "")<BR>(command "pline" pt12 pt13 pt14 pt15 "c")<BR>(setq ent (entlast))<BR>(setq pt16 (polar pt (dtr 90) (+ l (* 3 head_thick))))<BR>(command "circle" pt16 "d" (* 1.732 d) )<BR>(command "polygon" "6" pt16 "c" (/ (* 1.732 d) 2))<BR>)


(defun hexagon1 ()<BR>(if (&lt; l 6)<BR>(setq thread_len (+ (* 2 d) 0.25))<BR>(setq thread_len (+ (* 2 d) 0.5))<BR>)<BR>(if (&gt; (* 2 d) l)<BR>(setq thread_len (* 1.5 d))<BR>)<BR>(setq head_dia (* 2 d))       ;d为螺栓头宽度<BR>(setq head_thick (* 0.66667 d))        ;d为螺栓头厚度<BR>(setq nut_thick (* 0.9 d))<BR>(setq halfdia (/ d 2))<BR>(setq p1 (polar pt 0 (- halfdia 0.5)))<BR>(setq p2 (polar p1 (dtr 90) thread_len))<BR>(setq p3 (polar p2 pi (- d 1)))<BR>(setq p4 (polar pt pi (- halfdia 0.5)))<BR>(setq pt2 (polar pt (dtr 90) l))<BR>(setq pt3 (polar pt2 0 (/ d 2)))<BR>(setq pt4 (polar pt2 pi (/ d 2)))<BR>(setq pt5 (polar pt 0 (/ d 2)))<BR>(setq pt6 (polar pt pi (/ d 2)))<BR>(setq pt7 (polar pt2 0 (/ head_dia 2)))<BR>(setq pt8 (polar pt2 pi (/ head_dia 2)))<BR>(setq pt9 (polar pt8 (dtr 90) head_thick))<BR>(setq pt10 (polar pt7 (dtr 90) head_thick))<BR>(setq p2a (polar p2 0 0.5))<BR>(setq p3a (polar p3 pi 0.5))<BR>(setq thpt1 (polar pt6 (dtr 90) 0.5))<BR>(setq thpt2 (polar pt5 (dtr 90) 0.5))<BR>(setvar "clayer" "xshx")<BR>(command "line" p2 p1 "")<BR>(command "line" p3 p4 "")<BR>(setvar "clayer" "shx")<BR>(command "line" p2a p3a "")<BR>(command "pline" pt4 thpt1 p4 p1 thpt2 pt3 "")<BR>(command "line" thpt1 thpt2 "")<BR>(setq entit (entlast))<BR>(command "line" pt7 pt10 "")<BR>(command "line" pt10 pt9 "")<BR>(setq erase_ent(entlast))<BR>(command "line" pt9 pt8 "")<BR>(command "line" pt8 pt7 "" )<BR>(setq entit (entlast))<BR>(setq pt16 (polar pt (dtr 90) (+ l (* 3 head_thick))))<BR>(command "circle" pt16 "d" (* 1.732 d) )<BR>(command "polygon" "6" pt16 "c" (/ (* 1.732 d) 2))<BR>)


(defun C:bolt ()<BR>(setvar "cmdecho" 0)<BR>(setvar "osmode" 0)<BR>(setq snaps (getvar "snap"))<BR>(setq l (getdist "\n输入螺栓长度: "))<BR>(setq d (getdist "\n输入螺栓直径: "))<BR>(setq new_snap (/ d 2))<BR>(command "snap" new_snap)<BR>(setq pt (getpoint "\n输入螺栓中心点: "))<BR>(initget 1 "Y y n N")<BR>(setq answer (getkword "\n需要螺母吗?(Y/N): "))<BR>(if (= answer "Y")<BR>(progn<BR>(hexagon)<BR>(headface)<BR>(nutface)<BR>)<BR>(progn<BR>(hexagon1)<BR>(headface)<BR>)<BR>)<BR>(setvar "snapmode" 0)<BR>(setvar "osmode" 1023)<BR>)

Taoyimaier 发表于 2004-5-24 21:46:00

程序我没有看,你运行程序前,先添加一个层吧,命名为xshx,再试一下

hydkot 发表于 2004-5-24 21:53:00

谢谢指点。


新建层后仍出现错误提示,但画出两条直线,如螺栓直12,则两线间距11。


继续求教。

wzh 发表于 2004-5-24 23:56:00

再加一个层:shx

hydkot 发表于 2004-5-25 21:53:00

按楼上指点可以绘出螺栓螺母了,谢谢!
页: [1]
查看完整版本: 请高手帮忙