Lisp例程帮助?
谁能帮我运行一个旧的lisp例程(我爸爸20-30年前写的)?我目前正在运行AutoCAD Civil 3D 2015。我爸爸在2000年就不再和CAD玩了。在AutoCAD C3D 2010中,我可以实现这一点。我在autocad的windows中拖放了该命令。没有错误。我插入了两个街区“PARKN”和“PARKS”。然后我在命令行中输入DRAWPARK。然后,我选择了一条多段线(我试图将plinetype更改为0和1),并得到了这样的响应“错误:错误的参数类型:lentyp nil”。有人知道怎么读这篇文章,可能会告诉我什么吗?我在谷歌上搜索了这个,现在我又回到了cadtutor。net获取更多帮助。提前感谢!以下是文本:
(DEFUN C:DRAWPARK(/)
(如果(=nil(tblsearch“block”“parkn”))
(程序
(命令“insert”“parkn”(列表0 0)1 1 0)
(命令“erase”(entlast)“”)
); 结束程序
); 如果结束
(如果(=零(tblsearch“block”“parks”))
(程序
(命令“insert”“parks”(列表0 0)1 1 0)
(命令“erase”(entlast)“”)
); 结束程序
); 如果结束
(setq ent(entget(car(setq poly(entsel“Select Polyline:”))))
(setq en(entnext(cdr(assoc-1 ent)))
(setq ed(entget en))
(setq pt1(cdr(assoc 10 ed)))
;(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)
(setq pt2(cadr poly))
(setq pt3(获取点“哪一边?”))
(setq)
x2(汽车pt2)
x1(汽车pt1)
x3(pt3车)
y1(cadr pt1)
y2(cadr pt2)
y3(cadr pt3)
)
(setq left(*(-x1 x2)(-y1 y3)))
(setq right(*(-y1 y2)(-x1 x3)))
(setq rslt(-左-右))
(如果
(
(setq哪个“parkn”)
(setq哪个“公园”)
)
(setq x1 nil x2 nil x3 nil y1 nil y2 nil y3 nil left nil right nil rslt nil)
(setq pt1 nil pt2 nil pt3 nil ent nil en nil en2 nil ed nil ed2 nil)
;(menucmd“p0=parkpop”)
;(menucmd“p0=*”)
(setq howmany(getint“多少个空格:”))
;(menucmd“p0=pop0”)
(
命令“divide”poly“b”哪个“y”多少)
(命令“erase”poly“”)
(命令“redraw”)
(普林斯)
) 问题似乎就在这里
(setq en (entnext (cdr (assoc -1 ent))))
如果绘图是全新的(就像我测试此代码时一样),entnext返回nil。
我创建了一个新的图形,创建了两个块“parks”和“parkn”,绘制了一条多段线并运行了代码。正如你所说,代码出错了。然后,我绘制了另一条多段线,并重新运行代码,选择与之前相同的多段线。然后代码执行到最后。
由于不知道代码的意图,我无法提供修复。
当做
hippe013
P、 你应该用代码标签包装你的代码。
P、 我们试着用“MEASURE”命令来代替。(几乎做了同样的事情。) 只是一个建议,在未来这已经提到过,现在可能有42个“帮助这个Lisp程序”的帖子。“停车Lisp程序的问题”是更好的描述。
你的问题的答案是神奇的停车场。dwg是作为CIV3D的一部分提供的示例dwg,它包含了各种动态停车场布局工具。
另一个
; draw car park bays at multi angles
; By Alan H 2011
(princ "\n ")
(princ "\nTo use type npark90 or npark45 or npark30 or npark60 :")
(setq oldsnap (getvar "osmode"))
(setq oldlayer (getvar "clayer"))
(setvar "cmdecho" 0)
(defun lw ()
(prompt "\nPlease enter kerb length < ")
(prin1 width)
(prompt ">: ")
(setq newhoriz (getreal))
(if (= newhoriz nil)
(princ)
(setq width newhoriz)
)
(prompt "\nPlease enter kerb length < ")
(prin1 length)
(prompt ">: ")
(setq newhoriz (getreal))
(if (= newhoriz nil)
(princ)
(setq length newhoriz)
)
(setq pt1 (getpoint "\npick 1st point to place start : "))
(setq pt2 (getpoint "\nPick 2nd or end point for orientation"))
(setvar "osmode" 0)
(setq pt7 (getpoint "\Pick pt on car park side : "))
)
(defun dpark ()
(command "pline" pt1 pt3 pt4 pt5 "c")
(setq distp1p3 (distance pt1 pt3)) ; length of bay along kerb
(setq n (- (fix (/ (distance pt1 pt2) distp1p3))1))
; no of car park bays
(repeat n
(command "copy" "L" "" pt1 pt3)
)
(setvar "osmode" oldsnap)
(setvar "clayer" oldlayer)
)
(defun c:npark90 ()
(setq width 2.5)
(setq length 4.
(lw)
(setq ang (angle pt1 pt2))
(setq ang5 (angle pt2 pt7))
(setq diffang (- ang ang5))
(if (> diffang 1.5707)
(setq ang2 (- ang 1.570796))
(setq ang2 (+ ang 1.570796))
)
(setq ang3 (+ ang 3.1415926))
(setq ang4 (- ang 1.570796))
(setq pt3 (polar pt1 ang length))
(setq pt4 (polar pt3 ang2 width))
(setq pt5 (polar pt4 ang3 length))
(dpark)
)
(defun c:npark45 ()
(setq width 2.5)
(setq length 5.1)
(lw)
(setq length (* 1.414213 length)) ; fudge factor sq root 2 for 45
(setq width (* 1.414213 width))
(setq ang (angle pt1 pt2))
(setq ang5 (angle pt2 pt7))
(setq diffang (- ang ang5))
(if (> diffang 1.5707)
(setq ang2 (- ang 0.7853981))
(setq ang2 (+ ang 0.7853981))
)
(setq ang3 (angle pt2 pt1))
(setq ang4 (- ang 0.7853981))
(setq pt3 (polar pt1 ang width))
(setq pt4 (polar pt3 ang2 length))
(setq pt5 (polar pt4 ang3 width))
(dpark)
(princ)
)
(defun c:npark30 ()
(setq width 2.5)
(setq length 4.5)
(lw)
(setq length (* 2.0 length))
(setq width (* 2.0 width))
(setq ang (angle pt1 pt2))
(setq ang5 (angle pt2 pt7))
(setq diffang (- ang ang5))
(if (> diffang 1.5707)
(setq ang2 (- ang 0.52359877))
(setq ang2 (+ ang 0.52359877))
)
(setq ang3 (angle pt2 pt1))
(setq ang4 (- ang 0.52359877))
(setq pt3 (polar pt1 ang width))
(setq pt4 (polar pt3 ang2 length))
(setq pt5 (polar pt4 ang3 width))
(dpark)
(princ)
)
(defun c:npark60 ()
(setq width 2.5)
(setq length 5.3)
(lw)
(setq length (* 1.1176 length)) ; fudge factor approx 1.16
(setq width (* 1.1548 width))
(setq ang (angle pt1 pt2))
(setq ang5 (angle pt2 pt7))
(setq diffang (- ang ang5))
(if (> diffang 1.5707)
(setq ang2 (- ang 1.0471975))
(setq ang2 (+ ang 1.0471975))
)
(setq ang3 (angle pt2 pt1))
(setq ang4 (- ang 1.0471975))
(setq pt3 (polar pt1 ang width))
(setq pt4 (polar pt3 ang2 length))
(setq pt5 (polar pt4 ang3 width))
(dpark)
(princ)
)
页:
[1]