求助:哪位高手能帮忙编一个LISP
哪位高手能帮忙编一个LISP,(我想有一个LISP能实现由一个层偏移后,偏移的结果自动转换到另一个图层,效果如图。可以吗?谢谢哪! 这个很像Foxconn里的KK嘛﹐这里好多兄弟都可以的。 太简单了 <P>简单的很,QQ157828573</P>试试看
;增强的offset命令<BR>(defun c:py ( / ELAST roop do LAY_STR OFFDIST T_KEY T_STR T_STRLST) ;全局变量: CLAY_KEY<BR> (princ "\n xff.lsp=增强的offset-v1.2")<BR> (vl-load-com)<BR> (vl-cmdf ".undo" "be")<BR> (setq t_strlst '("Through-通过点确定距离." "offsetdist-锁定偏移距离." "当前层." "实体层.")<BR> elast (entlast)<BR> roop T<BR> offdist (if (/= -1 (getvar "offsetdist")) (getvar "offsetdist")) ;当/=1时存储offsetdist<BR> t_key (if offdist nil T)<BR> clay_key nil)<BR> (while roop<BR> (if t_key<BR> (setq t_str (nth 0 t_strlst))<BR> (setq t_str (nth 1 t_strlst))<BR> )<BR> (if clay_key<BR> (setq lay_str (nth 2 t_strlst))<BR> (setq lay_str (nth 3 t_strlst))<BR> )<BR> (foreach n (list "\n( 当前偏移方式:" t_str " 当前偏移距离值:" (getvar "offsetdist") " 偏移实体到:" lay_str " )") (princ n)) ;;foreach技巧;<BR> (initget " Undo Dist T Clay eXit")<BR> (setq do<BR> ;根据lucas建议,用下句提示代替.(entsel "\n Undo/Dist-调整偏移距离并设固定方式/T-偏移方式开关-(通过or固定)/Clay-偏移到当前层/eXit(空格或回车)/<选择偏移实体>:"))<BR> (entsel (strcat "\n 选择偏移实体/U-恢复/D-设距离/T-改为:"<BR> (if t_key "固定" "通过") "/C-改为:"<BR> (if clay_key "实体层" "当前层" ) "/<退出>:"))) <BR> (cond<BR> ((= 'LIST (type do)) ;选中实体.<BR> (if t_key<BR> (vl-cmdf ".offset" "Through" do (getpoint "\n偏移到点:") "") ;through 通过点 方式;<BR> (vl-cmdf ".offset"<BR> (if (= nil offdist)(setq offdist (getdist "\n输入新的偏移距离:")) offdist);固定offsetdist方式;;offsetdist=-1时需先得到新的偏移距离;<BR> do (getpoint (cadr do) "\n选择偏移方向:") "" ))<BR> (if (entnext elast) ;如生成新的物体;<BR> (progn<BR> (setq elast (entnext elast))<BR> (if clay_key<BR> (vla-put-layer (vlax-ename->vla-object elast) (getvar "clayer"))) ;vlax方法改实体层;<BR> )<BR> (princ "\n 错误:!!!无法偏移实体!!!") ;else,无法偏移实体的判定;<BR> )<BR> (if (/= (getvar "offsetdist") -1) (setq offdist (getvar "offsetdist"))) ;用于保留offsetdist/=-1时的数值,-1时没必要保留;<BR> );end case1<BR> ((= "Undo" do) (vl-cmdf ".u")<BR> (setvar "offsetdist" offdist)) ;undo时候不改变offsetdist,这个数值不影响t_key时候的正确执行;<BR> ((= "Dist" do) (setq offdist (getdist "\n输入新的偏移距离:")) ;存储offdist;<BR> (setq t_key nil)) ;setq t_str避免循环中设置的距离数值无效;<BR> ((= "T" do) (if t_key (setq t_key nil) ;偏移方式开关.<BR> (setq t_key T))) <BR> ((= "Clay" do) (if clay_key (setq clay_key nil)(setq clay_key T))) ;偏移到当前层/原有层--开关.<BR> ((or (= "eXit" do) ;退出.<BR> (and (= nil do)(= (getvar "errno") 52)))<BR> (setq roop nil))<BR> )<BR> );end while<BR> (vl-cmdf ".undo" "e") ;undo 结束标志.<BR> (princ)<BR>)感谢作者: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> 感谢楼主,程序我下载研究研究. 偏移的结果自动转换到另一个图层,好像不能达到这个目的呀?最好自动转换时还能选择要转换到的图层。
页:
[1]