铁路轨道lisp例程
我找到了一个lisp例程来制作2d铁路轨道,但其中有一些错误,我对编写lisp例程一无所知,因此我无法找出错误所在或如何修复它们。我正在使用Civil3d 2012。谢谢你在这方面的帮助。代码如下:
;从绘制为多段线的定义中心线创建铁路线(defun C:rrtrax(/curlyr rr cl rrlyr oldosnap rt lt e ename etype enttent osdone entstart cntr bulge rtoffltoff startpt TblLst bss blname lyrcount)(defun myerror(s);如果发生错误(如ESC或InvalidSelect);当此命令处于活动状态时。。。(如果(/=s“函数已取消”)(princ(strcat”\n错误:“s))(setvar“osmode”oldosnap)(命令“\u layer“s”curlyr”);恢复保存的模式(setq*error*olderr);Restore old*error*handler(princ))(命令“undo”“begin”)(setq olderr*error**error*myerror)(setq oldosnap(getvar“osmode”)(if(<oldosnap 16384)(setvar“osmode”(+16384 oldosnap))(setq CROLLYR(getvar“clayer”))(setq rrlyr“1-RR-TRACK”)(setq rrcl“RR cl”)(if(=(tblsearch“layer”rrlyr)nil)(命令“n”rrlyr“c”12“rrlyr”rrlyr“s”rrlyr“”)(命令“rrlyr”s上的“T”rrlyr”rrlyr“”)(if(=(tblsearch“layer”rrcl)nil)(命令“_layer”n“rrcl”)(命令“rrcl”上的“T”rrcl”)(defun osline()(setq rt(polar entstart(+(angle entstart entend)(/pi 2))1.0)lt(polar entstart(-angle entstart entend)(/pi 2))1.0)(doos rt lt);结束osline(defun osarc()(setq rt(polar entstart(angle entstart cntr)1.0)lt(polar entstart(angle cntr entstart)1.0))(doos rt lt);end osarc(defun dopoly()(setq osdone nilename(entnext ename)tent(entget ename)nent(entget(entnext ename))(while(/=“SEQEND”(cdr(assoc 0 nent)))(setq entstart(cdr(assoc 10 tent))entend(cdr(assoc 10 nent))bulge(cdr(assoc 42 tent))(if(=bulge 0.0)(drawline)(drawarc))(setq ename(entnext ename)tent(entget(entnext ename)а);end dopoly(defun drawine()(if(=osdone nil)(progn(osline)(setq startpt entstart)))(defun drawarc()(if(=osdone nil)(progn(osarc)(setq startpt entstart)))(defun doos(rt lt)(命令“\u offset”(/rr\u w 2)e rt“”)(命令“\u change”l“”p“”la“rrlyr”)(setq rtoff(entlast))(命令“\u offset”(/rr\u w 2)e lt“”)(命令“\u change”l“”p“”“la”rrlyr“”)(setq ltoff(entlast))(setq-osdone t));结束灾难;根据需要制作块(defun makebl()(entmake’((0。“block”)(2。“rr-tie”)(8。“1-rr-TRACK”)(70.0)(10 0.333 3.354 0))(entmake’((0。“LWPOLYLINE”)(100。“AcDbEntity”)(100。“AcDbPolyline”)(90.4)(10 0.00 0.00)(10 0.666 0.00)(10 0.666 6 6.708)(10 0.00 6.708)(70.129))(entmake’((0。“ENDBLK”))))(defun GetFilterTable(Tbl Nme/CurTbl)(setq TblLst nil)(while(setq CurTbl(tblnext Tbl(not CurTbl))(if(wcmatch(cdr(assoc 2 CurTbl))Nme)(setq TblLst(cons CurTbl TblLst)))(reverse TblLst))(defun insblock()(setq bss(ssget“_X”'((2。“rr tie”)))(ssadd rtoff bss)(ssadd ltoff bss)(if(=(GetFilterTable“BLOCK”“TRACKS-*”)nil)(setq blname“TRACKS-1”)(progn(setq lyrcount(1+(长度TblLst)))(setq blname t“TRACKS—”(rtos lyrcount )ааа)а);结束if(命令“-block”blname startpt bss”“)(命令“-insert”blname startpt 1“0”)(if(=rr\U w nil)(setq rr\U w 4.708))(princ(strcat“\nDraws美国标准 有什么想法吗? 什么样的错误?你能说得更具体些吗? 一些标准仪表尺寸看起来是:
轨道:
[列表]
钢轨内边缘之间[*]8’4-1\2”
头部[*]2-3\4“宽
底座处[*]5-1\2“宽
[*]6“高
[/列表]
领带:
[列表]
[*]9“宽x 7”高x 102”长
[*]19.5英寸居中
[/列表]
这些是你使用的尺寸吗?
-大卫 嗯,最后还有一个额外的权利。
HTH公司 尺寸对我来说很好。我面临的主要问题是:1。当我使用appload加载它时,它会立即请求输入,而不是等待我调用命令。2.加载后,除了它自动启动命令外,如果不再次使用appload,我将无法使用它。3。谢谢你在这方面的帮助。 听起来你需要像史蒂夫建议的那样查看额外的括号-大卫 我按照建议删除了最后一个括号,但这并没有改变错误。
我希望读数应该是4'8½“,否则就有了一个正在萌芽的宽轨 我很抱歉,但是这个例程写得太糟糕了,如果你想利用时间来尝试和删除它,那将是不明智的-大卫
页:
[1]
2