需要帮助从R1获取LiSP
在我工作的地方,我们有在Autocad R12中使用的LISP文件。。它用于命名闭合多段线,并在该多段线内插入文本。
我试图在AutoCAD 2007中使用它,但似乎无法使其工作。我一直在接近尾声时出现“lentyp nil”错误。。。
代码如下:
有人能帮忙吗? 快速看一下,我认为创建者的意思是用于多段线,而不是LWMOLYLINES,因为它包含“entnext”来获取顶点。
我可能会重写它以用于LWD多段线,但目前没有时间
李
六羟甲基三聚氰胺六甲醚。
使用LwPolyline需要什么?
我认为整个LISP需要重新编写tbh,错误捕捉的方式不多,而且LISP似乎有点不稳定。
看看我能做什么 好的,试一试——我不确定你到底想要什么,但如果你需要修改什么,请告诉我
1
我注意到的一件事是,将其设置为检查它是否为多段线。所有部分都将始终是多段线,我们正在尝试这样做。我真的不认为你需要检查并制作多段线。
知道它为什么停止了吗? 我的道歉伙计-我的愚蠢错误
;;;============姓名。lsp=============;;;;;;函数:;;;将使用工件代码标记曲线,;;;模块、方向、材料和说明;;;;;;平台:;;;无限制,仅在ACAD 2004上测试;;;;;;曲线兼容性:;;;圆弧、圆、椭圆、*多段线、,;;;区域和样条。;;;;;;作者:;;;版权所有(c)04.2009 Lee McDonnell;;;(联系CADTutor.net的李·麦克);;;;;;版本:;;;1.002.04.09;;;;;; ======================================(defun c:namer(/*error*ptxt deText cEnt cObj Area motxt dtxt mtxt tStr tBox tWid tHgt ClsPt btPt tpPt pt1 pt2 pt3 pt4 tAngl tObj)(vl load com)(defun*error*(msg)(redraw)(if tObj(entdel tObj))(if ovar(mapcar‘setvar vlst ovar))(if(not(member msg’(“函数已取消”“退出/退出中止”))(princ(strcat”\n错误:“(strcase msg)))(princ))(setq vlst’(“CLAYER”“OSMODE”“CMDECHO”)ovar(mapcar'getvar vlst))(mapcar'setvar(cdr vlst)'(0 0))(if(not(tblsearch“LAYER”“NAME”)(命令“_-LAYER”“\u M”“NAME”“\u C”“2”“NAME”“)(或mo:def(setq mo:def“BK”)(或d:def(setq d:def“R”)(或M:def(setq M:def“L”))(setq ptxt”“detxt”“)(if(和(setq cEnt(car(entsel“\n选择要标签的曲线:”)))(成员(cdr(assoc 0(entget cEnt)))“(“ARC”“CIRCLE”“ELLIPSE”“LWPOLYLINE”“POLYLINE”“REGION”“SPLINE”))(progn(setq cObj(vlax ename->vla object cEnt)Area(rtos(vla get Area cObj)2 0))(while(=ptxt“”)(setq ptxt(getstring“\n输入段代码:”)(setq ptxt(substr ptxt 1 3))(while(not(member motxt’(“BK”“DK”“SC”“BC”“AR”“AC”)))(setq motxt(strcase(getstring(strcat“\n输入模块:”)(or(and(eq-motxt”“)(setq-motxt-mo:def))(setq-mo:def-motxt))(while(not(member-dtxt”“(“R”“L”“S”))(setq-dtxt(strcat“\n输入方向:”))(or(and(eq-dtxt”“)(setq-dtxt d:def-dtxt)))(while(not(member-mtxt”“(“R”“L”“S”)))))(而L“S”P“d”Q“E”))(setq mtxt(strcase(getstring(strcat”\n输入材料:”)(或(和(eq mtxt“”)(setq mtxt m:def))(setq m:def mtxt))(while(=detxt“”)(setq detxt(getstring t”\n输入说明:))(setq detxt(substr detxt 1 20)tStr(strcat ptxt(chr 45)motxt(chr 45)dtxt(chr 45)mtxt(chr 45)区域(chr 45)45)文字)tBox(textbox(list(cons 1 tStr)))tWid(-(caadr tBox)(caar tBox))tHgt(-(cadadr tBox)(cadar tBox))(while(=5(car(setq grdat(grread t 1))))(redraw)(if(='list(type(setq sPt(cadr grdat)))(progn(setq ClsPt(vlax curve getclosestpoint to cObj sPt)cAngl(angle ClsPt sPt)btPt(polar ClsPt cAngl(/(getvar“TEXTSIZE”)2.0))tpPt(极性ClsPt cAngl(+(/(getvar“TEXTSIZE”)2.0)tHgt)midPt(极性btPt cAngl(/(距离btPt tpPt)2.0))pt1(极性btPt(+cAngl(/pi 2))(/tWid 2.0))pt2(极性btPt(-cAngl(/pi 2))(/tWid 2.0))pt3(极性tpPt(+cAngl(/pi 2))(/tWid 2.0))pt4(极性tpPt(-cAngl(/pi 2))(/tWid 2.0))(grvecs(列出51 pt1 pt2 51 pt2 pt4 51 pt1 pt3 51 pt3 pt4 щ))(setq tAngl(-cAngl(/pi 2))(if(and(>tAngl 0)( 哇!
这很有效。太棒了。
只有几个问题:
1.我们可以不用连字符把文本放在一起吗?
2.我们可以这样做,而不是平方英寸,它把平方英尺的文字行?
3.我们能把它变成普通文本而不是多行文字吗?
非常感谢你的工作!这真的会帮上大忙。我试着看一下代码,看看你做了什么来修改它以满足我的需要,但我记不清了。哈哈,我对LISP代码知之甚少。在过去,我能够在较新版本的CAD中使用一些东西,但我不是这方面的专家。
谢谢
在新版本中排序-现在使用空格。
排序后,根据平方英尺调整面积。
创建的文本应为单行DTEXT,而不是多行文字
新版本:
;;;============姓名。lsp=============;;;;;;函数:;;;将使用工件代码标记曲线,;;;模块、方向、材料和说明;;;;;;平台:;;;无限制,仅在ACAD 2004上测试;;;;;;曲线兼容性:;;;圆弧、圆、椭圆、*多段线、,;;;区域和样条。;;;;;;作者:;;;版权所有(c)04.2009 Lee McDonnell;;;(联系CADTutor.net的李·麦克);;;;;;版本:;;;1.002.04.09;;;2.003.04.09;;;;;; ======================================(defun c:namer(/*error*ptxt deText cEnt cObj Area motxt dtxt mtxt tStr tBox tWid tHgt ClsPt btPt tpPt pt1 pt2 pt3 pt4 tAngl tObj)(vl load com)(defun*error*(msg)(redraw)(if tObj(entdel tObj))(if ovar(mapcar‘setvar vlst ovar))(if(not(member msg’(“函数已取消”“退出/退出中止”))(princ(strcat”\n错误:“(strcase msg)))(princ))(setq vlst’(“CLAYER”“OSMODE”“CMDECHO”)ovar(mapcar'getvar vlst))(mapcar'setvar(cdr vlst)'(0 0))(if(not(tblsearch“LAYER”“NAME”)(命令“_-LAYER”“\u M”“NAME”“\u C”“2”“NAME”“)(或mo:def(setq mo:def“BK”)(或d:def(setq d:def“R”)(或M:def(setq M:def“L”))(setq ptxt”“detxt”“)(if(和(setq cEnt(car(entsel“\n选择要标签的曲线:”)))(成员(cdr(assoc 0(entget cEnt)))“(“ARC”“CIRCLE”“ELLIPSE”“LWPOLYLINE”“POLYLINE”“REGION”“SPLINE”))(progn(setq cObj(vlax ename->vla object cEnt)Area(rtos(/(vla get Area cObj)144.0)2 0))(while(=ptxt“”)(setq ptxt(getstring“\n输入段代码:”)(setq ptxt(substr ptxt 1 3))(while(not(member motxt’(“BK”“DK”“SC”“BC”“AR”“AC”)))(setq motxt(strcase(getstring(strcat“\n输入模块:”)(or(and(eq-motxt”“)(setq-motxt-mo:def))(setq-mo:def-motxt))(while(not(member-dtxt”“(“R”“L”“S”))(setq-dtxt(strcat“\n输入方向:”))(or(and(eq-dtxt”“)(setq-dtxt d:def-dtxt)))(while(not(member-mtxt”“(“R”“L”“S”)))))(而L“S”P“d”Q“E”))(setq mtxt(strcase(getstring(strcat”\n输入材料:”)(或(和(eq mtxt“”)(setq mtxt m:def))(setq m:def mtxt))(while(=detxt“”)(setq detxt(getstring t”\n输入说明:))(setq detxt(substr detxt 1 20)tStr(strcat ptxt(chr 32)motxt(chr 32)dtxt(chr 32)mtxt(chr 32)区域(chr 32)32)文字)tBox(文本框(列表(cons 1 tStr)))tWid(-caadr tBox)(caar tBox))tHgt(-cadadr tBox)(cadar tBox))(提示“\n空间文本…”)(while(=5(car(setq grdat(grread t 1)))(redraw)(if(='list(type(setq sPt(cadr grdat)))(progn(setq ClsPt(vlax curve getClosestPointto cObj sPt)cAngl(angle ClsPt sPt)btPt(polar ClsPt cAngl(/(getvar“TEXTSIZE”)2.0))tpPt(polar ClsPt cAngl(+(/(getvar“TEXTSIZE”)2.0)tHgt))midPt(polar btPt cAngl(/(distance btPt tpPt)2.0))pt1(极性btPt(+cAngl(/pi 2))(/tWid 2.0))pt2(极性btPt(-cAngl(/pi 2))(/tWid 2.0))pt3(极性tpPt(+cAngl(/pi 2))(/tWid 2.0))pt4(极性tpPt(-cAngl(/pi 2))(/tWid 2.0))(grvecs(列表51 pt1 pt2 51 pt2 51 pt4 51 pt1 pt3 51 pt3 51 pt3 pt4 k))(setq tAngl(-cAngl(/pi 2))(if(和(>tAngl 0)( 伙计,你真快!
一切都很好!
我在多行文字上发了个屁。事实上这已经是我需要的了!
我不想强加于人,但有没有办法让平方英尺始终位于小数点后两位,即使是整数?例如,1将是1.00?这很难做到吗?或者我可以改变自己? 天哪,李。
这就是我所说的检修和老Lisp程序。很不错的。
编辑:不是拼写纳粹,但这是“兼容性”,而不是“兼容性”
页:
[1]
2