zark 发表于 2009-9-27 14:14:00

[建议]关于批处理的建议和本人一点思路

<p>本人是从事测绘行业的,很多时候成果出来就是一大堆,验收有问题也要改一大堆,虽然有时</p><p>工作很简单,但是数量太多了,做起来很烦。</p><p>于是本人就迫切需要知道通过什么接口可以做出批处理函数,希望大家不吝赐教</p><p>本人愚味,想到了一个很土很土的方法,讲出来大家不要笑掉大牙哈,思路来自CAD病毒。</p><p>假设现在需要将20幅图里的多余图层或块名清除,可以用PURGE,打开20幅,清理20次就行了</p><p>。本人现在利用ACAD.LSP。能一步做到位,具体方法如下:</p><p>新建一个文件,文件名为acad.lsp</p><p>内容:</p><p>&nbsp; (defun s::startup ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "purge" "a" "*" "n")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (prin1)<br/>)</p><p>存放位置:将该文件放在CAD的搜索路径中,比如C:\Program Files\AutoCAD 2004</p><p>操作:打开ACAD绘图软件,然后执行:文件-打开,然后一次性选择需要清理的那20幅图,最后点击“打开”,哈哈,是不是每一幅图都自动清理呀?<br/>(注:如果文件太多,不可一次性全部选择,本人曾一次打开60幅图,结果内存不足,死机了哈)</p><p><br/>本人举了一个很笨很笨的例子实现了批处理,但是这个方法真的很笨呀,用完还要把ACAD。LSP删掉。所以真心希望我们的版主们多花点心,研究下让LSP实现批处理,谢谢谢谢谢谢.........</p><p>想学习批处理的朋友们<br/>顶<br/>要顶<br/>一定顶<br/>真的要顶<br/>用千斤顶顶<br/>.............</p><p></p><p><br/></p>

liu_kunlun 发表于 2009-9-27 15:46:00

本帖最后由 作者 于 2009-9-27 18:52:01 编辑 <br /><br /> <p>方法很好。</p><p>你试一下:将 (setq S::STARTUP (append S::STARTUP (list (command "purge" "a" "*" "n"))))写到acad.mnl中,该文件在....support文件夹中。</p><p>或许应该:将 (setq S::STARTUP (append S::STARTUP '((command "purge" "a" "*" "n"))))写到acad.mnl中,该文件在....support文件夹中。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>

langson 发表于 2009-9-27 16:25:00

<p>能不能编一种程序,打开一个对话框,然后通过浏览,选择需要编辑的文件,这样比较直观</p>

aicr317 发表于 2009-9-28 17:02:00

<p>或许从这里,能给你点启发:</p><p>;;;;;;这是一个参照指定目录下所有DWG文件的程序</p><p>(defun dim_scei_xrefdwg ()<br/>&nbsp; (setvar "CMDECHO" 0)<br/>&nbsp; (vl-load-com)<br/>&nbsp; (if (entlast) (command ".erase" "all" ""))<br/>&nbsp; (setq fn (if fn fn ""))<br/>&nbsp; (if (setq fn (getfiled "选择文件" fn "dwg" 2)) (progn<br/>&nbsp;&nbsp; (setq strpath (vl-filename-directory fn)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fl (vl-directory-files strPath "*.dwg" 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i 0)<br/>&nbsp;&nbsp; (repeat (length fl)<br/>&nbsp;&nbsp;&nbsp; (setq fnm (strcat strpath "/" (nth i fl)) i (1+ i))<br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp; (command "-insert" fnm "0,0")&nbsp;&nbsp;;;;;;;;;;;;;;;;这里换成(command "purge" "a" "*" "n")不知可行否,下班了,回家再测试!<br/>&nbsp;&nbsp;&nbsp; (while (not (zerop (getvar "CMDACTIVE"))) (command ""))<br/>&nbsp;&nbsp; )<br/>&nbsp; ))<br/>&nbsp; (setvar "CMDECHO" 1)<br/>&nbsp; (princ)<br/>)</p>

langson 发表于 2009-9-30 09:05:00

<p>非常感谢哦</p>

phoenixdjq 发表于 2009-9-30 11:43:00

<p>本论坛就有这样的帖子,你找一下</p><p></p>

zml84 发表于 2009-9-30 18:01:00

.                      .

狂刀lxx 发表于 2009-9-30 19:02:00

arx写的?

客人 发表于 2009-9-30 21:20:00

老前辈的成果参考:<br/><a href="http://www.cadtutor.net/forum/showthread.php?t=39718">http://www.cadtutor.net/forum/showthread.php?t=39718</a><br/><a href="http://web2.airmail.net/terrycad/LISP/Scrs.Lsp">http://web2.airmail.net/terrycad/LISP/Scrs.Lsp</a><br/><a href="http://through-the-interface.typepad.com/through_the_interface/2009/06/batch-processing-autocad-drawings-from-lisp-without-sdi.html">http://through-the-interface.typepad.com/through_the_interface/2009/06/batch-processing-autocad-drawings-from-lisp-without-sdi.html</a><br/>

phoenixdjq 发表于 2009-9-30 21:22:00

<p>忘了是哪个版主写的了</p><p>vba写的,还有一个lisp写的</p>
页: [1] 2
查看完整版本: [建议]关于批处理的建议和本人一点思路