hxjhzm 发表于 2006-10-10 11:41:00

求助:哪位高手能帮忙编一个LISP

哪位高手能帮忙编一个LISP,(我想有一个LISP能实现由一个层偏移后,偏移的结果自动转换到另一个图层,效果如图。可以吗?谢谢哪!

xbtang 发表于 2006-11-2 10:25:00

这个很像Foxconn里的KK嘛﹐这里好多兄弟都可以的。

北斗七星 发表于 2006-11-2 21:48:00

太简单了

leonlxr 发表于 2006-11-18 16:22:00

<P>简单的很,QQ157828573</P>

ctclsc 发表于 2006-11-22 12:42:00

试试看

;增强的offset命令<BR>(defun c:py (&nbsp; / ELAST roop do LAY_STR OFFDIST T_KEY T_STR T_STRLST) ;全局变量: CLAY_KEY<BR>&nbsp; (princ "\n xff.lsp=增强的offset-v1.2")<BR>&nbsp; (vl-load-com)<BR>&nbsp; (vl-cmdf ".undo" "be")<BR>&nbsp; (setq t_strlst '("Through-通过点确定距离." "offsetdist-锁定偏移距离." "当前层." "实体层.")<BR>&nbsp;elast (entlast)<BR>&nbsp;roop T<BR>&nbsp;offdist (if (/= -1 (getvar "offsetdist")) (getvar "offsetdist"))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;当/=1时存储offsetdist<BR>&nbsp;t_key (if offdist nil T)<BR>&nbsp;clay_key nil)<BR>&nbsp; (while roop<BR>&nbsp;&nbsp;&nbsp; (if t_key<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq t_str (nth 0 t_strlst))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq t_str (nth 1 t_strlst))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if clay_key<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lay_str (nth 2 t_strlst))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lay_str (nth 3 t_strlst))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (foreach n (list "\n( 当前偏移方式:" t_str "&nbsp;&nbsp; 当前偏移距离值:" (getvar "offsetdist") "&nbsp;&nbsp; 偏移实体到:" lay_str " )") (princ n)) ;;foreach技巧;<BR>&nbsp;&nbsp;&nbsp; (initget " Undo Dist T Clay eXit")<BR>&nbsp;&nbsp;&nbsp; (setq do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;根据lucas建议,用下句提示代替.(entsel "\n Undo/Dist-调整偏移距离并设固定方式/T-偏移方式开关-(通过or固定)/Clay-偏移到当前层/eXit(空格或回车)/&lt;选择偏移实体&gt;:"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entsel (strcat "\n 选择偏移实体/U-恢复/D-设距离/T-改为:"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if t_key "固定" "通过") "/C-改为:"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if clay_key&nbsp; "实体层" "当前层" )&nbsp;&nbsp; "/&lt;退出&gt;:"))) <BR>&nbsp;&nbsp;&nbsp; (cond<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= 'LIST (type do))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;选中实体.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if t_key<BR>&nbsp; (vl-cmdf ".offset" "Through" do (getpoint "\n偏移到点:") "")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;through 通过点 方式;<BR>&nbsp; (vl-cmdf ".offset"<BR>&nbsp;&nbsp;&nbsp;&nbsp; (if (= nil offdist)(setq offdist (getdist "\n输入新的偏移距离:")) offdist);固定offsetdist方式;;offsetdist=-1时需先得到新的偏移距离;<BR>&nbsp;&nbsp;&nbsp;&nbsp; do (getpoint (cadr do) "\n选择偏移方向:") "" ))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (entnext elast)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;如生成新的物体;<BR>&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp; (setq elast (entnext elast))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if clay_key<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-layer (vlax-ename-&gt;vla-object elast) (getvar "clayer")))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;vlax方法改实体层;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp; (princ "\n 错误:!!!无法偏移实体!!!")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;else,无法偏移实体的判定;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (/= (getvar "offsetdist") -1) (setq offdist (getvar "offsetdist")))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;用于保留offsetdist/=-1时的数值,-1时没必要保留;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );end case1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= "Undo" do) (vl-cmdf ".u")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setvar "offsetdist" offdist))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;undo时候不改变offsetdist,这个数值不影响t_key时候的正确执行;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= "Dist" do) (setq offdist (getdist "\n输入新的偏移距离:"))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;存储offdist;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq t_key nil))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;setq t_str避免循环中设置的距离数值无效;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= "T" do) (if t_key (setq t_key nil)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;偏移方式开关.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq t_key T)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= "Clay" do) (if clay_key (setq clay_key nil)(setq clay_key T)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;偏移到当前层/原有层--开关.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((or (= "eXit" do)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;退出.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and (= nil do)(= (getvar "errno") 52)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq roop nil))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; );end while<BR>&nbsp; (vl-cmdf ".undo" "e")&nbsp;&nbsp;&nbsp;&nbsp; ;undo 结束标志.<BR>&nbsp; (princ)<BR>)

hxjhzm 发表于 2008-1-6 09:51:00

感谢作者:ctclsc

<p><strong><font face="Verdana" color="#61b713">给ctclsc</font></strong></p><p><strong><font face="Verdana" color="#61b713">非常感谢你的帮忙,你帮我写的LISP对我帮助很大,谢谢你,如果你有兴趣,我这还有一些半成品,因不太完善,想请你帮忙给修改一下。</font></strong></p><p><strong><font face="Verdana" color="#61b713"></font></strong></p>

yoyoho 发表于 2008-1-14 12:52:00

感谢楼主,程序我下载研究研究.

freefeng 发表于 2008-5-13 21:51:00

偏移的结果自动转换到另一个图层,好像不能达到这个目的呀?最好自动转换时还能选择要转换到的图层。
页: [1]
查看完整版本: 求助:哪位高手能帮忙编一个LISP