明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1998|回复: 8

一个批量处理的问题

[复制链接]
发表于 2004-7-15 14:34 | 显示全部楼层 |阅读模式
这是龙版主做的一个批量处理图形的程序,我想把它改成在每个图形上都画一条直线,可是总是出错,不知为什么?
;;一个VLISP的批量处理范例
;;从这个范例可以了解VLISP批量处理图档
;;虽然速度慢了点,但非常实用
;;By LUCAS(龙龙仔)
;;从文件移除未使用之具名参考
;;
;;虽配合Expresstools__(acetutil.arx)
;;为加度程序执行,程序将设定系统变量ACADLSPASDOC
;;即<只载入 acad.lsp 至 AutoCAD 执行期所开启的第一个图面>
;;当然程序结束后,会还原系统变量ACADLSPASDOC
;;
;;Usage: (PURGEALL <循环次数>)
;;Usage: (PURGEALL 5) (arxload "acetutil.arx" NIL)
(vl-load-com)
(defun C:BANTCHLINE ( / HOLDECHO APP DWGNAME PREFIX_DWG NN QQ HOLDLSP
WW)
(setq HOLDECHO (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq PREFIX_DWG
(strcat
(strcase (acet-ui-pickdir
"选择目录"
(vl-string-right-trim "\\" (getvar "dwgprefix"))
"移除未使用之具名参考"
)
)
"\\"
)
)
(setq HOLDLSP (getvar "ACADLSPASDOC"))
(setvar "acadlspasdoc" 0)
(setq QQ (vl-directory-files PREFIX_DWG "*.DWG"))
(setq NN 0)
(if (/= QQ NIL)
(progn
(setq APP (vlax-get-acad-object))
(repeat (length QQ)
(setq DWGNAME (strcase (strcat PREFIX_DWG (nth NN QQ))))
(setq WW (vla-open (vla-get-documents APP) DWGNAME))
; (repeat TIMES (vla-purgeall WW)) (command "line" "0,0" "100,100" "")
(setq WW (vla-get-documents APP)) (vla-save WW)
(prompt (strcat "\n" DWGNAME " <URGE完成>!!!"))
(vla-close WW :vlax-false)
(setq NN (1+ NN))
)
(vlax-release-object WW)
(vlax-release-object APP)
)
(prompt "\n所选目录中未有任何图档!!!")
)
(setvar "acadlspasdoc" HOLDLSP)
(setvar "cmdecho" HOLDECHO)
(princ)
)
(princ)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-7-15 15:27 | 显示全部楼层
画线使用addline,


在新打开的图形只能使用ACTIVEX方法来操作
 楼主| 发表于 2004-7-15 15:57 | 显示全部楼层
原来是这样啊,我想做一个批量BIND的功能,看来用这个方法不行了.不知版主有什么好的办法?谢谢.
 楼主| 发表于 2004-7-15 17:33 | 显示全部楼层
这段代码可以将一张图中load的xref给bind,我原来是想和龙版主的程序结合一些做一个批量bind的程序,没想到“造化弄人”啊!!! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;判断xref的状态:overlay,attachment; load, unload和not found的显示是一样的.
(defun lx (/ i elist code statu1 statu2 block ent xref_name cmd)
(setq block (ssget "x" '((0 . "INSERT"))))
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.undo" "be")
(setq i 0)
(repeat (sslength block)
(setq ent (ssname block i))
(if (= (isxref ent) t) ;first if
( progn
(if ;if1
(= (logand (setq code
(cdr
(assoc 70
(setq elist (entget (tblobjname "block" (cdr (assoc 2 (entget ent))))))
;要先把xref的图元变成block的形式
)
) ;end cdr
)
4
) ;end logand
4
);end =

(progn (setq xref_name (cdr (assoc 2 elist))) ;prgon2
(if (= (logand code 8) 8)
(setq statu1"Overlay")
(setq statu1 "Attachment")

)
(if (= (logand code 32) 32)
(setq statu2 "Loaded")
(setq statu2 "Unloaded or Not found")

)
(if (= statu2 "Loaded")
(progn
(command "-xref" "b" xref_name )
(prompt (strcat "\n" xref_name " is binded" ))
)
)

(setq statu2 nil)
(cdr (assoc 1 elist))
) ;end prgon2
) ;end if1
; (prompt (strcat "\n" xref_name ": " statu1"..." statu2 ))
);end progn
);end first if
(setq i (1+ i))
);end repeat
(command "_.undo" "e")
(setvar "cmdecho" cmd)
(print)
;(prompt "︻┳一..........")
(print) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;判断是block还是xref
;如果图块为一个外部参照则返回T
;样例 (isxref (car (entsel)))
(defun isxref (block)
(= 4
(logand
(cdr
(assoc
70
(entget (tblobjname "block" (cdr (assoc 2 (entget block)))))
)
)
4
)
)
)
发表于 2004-7-15 17:35 | 显示全部楼层
不管造化的问题,你学会了ActiveX技术就可以了
 楼主| 发表于 2004-7-23 11:45 | 显示全部楼层
activeX我也很想学,但是有时看不懂,都是VL开头的东东。看来还是要努力啊。
发表于 2004-7-23 12:24 | 显示全部楼层
ActiveX没法做到批量BIND!放弃吧!
 楼主| 发表于 2004-7-23 14:27 | 显示全部楼层
我现在是这样做的:


先将support中的acad.mnl改成acad_leo.mnl,再在程序中写一个acad.mnl文件,当打开图形时就会自动加载acad.mnl中的程序.执行完程序将创造的acad.mnl文件删除,最后将acad_leo.mnl再改回acad.mnl文件.


这样就可以实现批处理用任何lisp写的程序了。


不过这有一个缺点,当程序运行的时候如果按esc或突然中断程序,就无法将acad_leo.mnl文件还原,以后再用cad时会有麻烦的。不知各位高手还有什么好办法。(但是这个程序现在我自己用用还是可以的 :))
发表于 2005-7-15 00:41 | 显示全部楼层

黑侠

请问可以给个示例吗?本人一直想做lsp的批量处理,一直没有成果,只能做到打开文件,之后的命令无法运行,哪为高人可以指点一二??

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-7 18:40 , Processed in 0.227133 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表