citykunan 发表于 2004-2-12 09:34:00

批量bind图纸(绑定xref)

我从前看了龙版主的一些批量处理文件的程序,我想做一个可以批量bind外部引用(xref)的程序,不知怎么改。请那位高手帮忙看看。


;;一个VLISP的批量处理范例<BR>;;从这个范例可以了解VLISP如何批量处理图档<BR>;;虽然速度慢了点,但非常实用<BR>;;By LUCAS(龙龙仔)<BR>;;批量修改图层颜色                                                                                                                                                                                                                                                                                                                                               <BR>;;                                                                                                                                                                                                                                                                                                                                                                                                                                                                               <BR>;;虽配合Expresstools__(acetutil.arx)                                                                                                                                                                                               <BR>;;为加速程序执行,程序将设定系统变量ACADLSPASDOC                                                                                                       <BR>;;即&lt;只载入 acad.lsp 至 AutoCAD 执行期所开启的第一个图面&gt;                       <BR>;;当然程序结束后,会还原系统变量ACADLSPASDOC <BR>;;<BR>;;For AutoCad 2000+<BR>;;Usage: (CH_LAY_COLOR (acad_colordlg 7))<BR>;;Usage: (CH_LAY_COLOR 7)                                                                                                                       


(arxload "acetutil.arx" NIL)<BR>(vl-load-com)<BR>(defun CH_LAY_COLOR (COL                                       /                                                       HOLDECHO APP       DWGNAME<BR>                                               PREFIX_DWG                                                       NN QQ       HOLDLSP<BR>                                               WW                                               ENT_LAY<BR>                                       )<BR>       (setq HOLDECHO (getvar "cmdecho"))<BR>       (setvar "cmdecho" 0)<BR>       (setq PREFIX_DWG<BR>       (strcat<BR>                       (vl-string-right-trim<BR>                                       "\\"<BR>                                       (strcase (acet-ui-pickdir<BR>               "选择目录"<BR>               (vl-string-right-trim "\\" (getvar "dwgprefix"))<BR>               "移除未使用之具名参考"<BR>                                                       )<BR>                                       )<BR>                       )<BR>                       "\\"<BR>       )<BR>       )<BR>       (setq HOLDLSP (getvar "ACADLSPASDOC"))<BR>       (setvar "acadlspasdoc" 0)<BR>       (setq QQ (vl-directory-files PREFIX_DWG "*.DWG"))<BR>       (setq NN 0)<BR>       (if (/= QQ NIL)<BR>                       (progn<BR>                                       (setq APP (vlax-get-acad-object))<BR>                                       (repeat (length QQ)<BR>        (setq DWGNAME (strcase (strcat PREFIX_DWG (nth NN QQ))))<BR>        (setq WW (vla-open (vla-get-documents APP) DWGNAME))<BR>        (vlax-for ENT_LAY (vla-get-layers WW)<BR>               (vla-put-color ENT_LAY COL)<BR>        )<BR>        (vla-save WW)<BR>        (prompt (strcat "\n" DWGNAME " &lt;修改图层颜色完成&gt;!!!"))<BR>        (vla-close WW :vlax-false)<BR>        (setq NN (1+ NN))<BR>                                       )<BR>                                       (vlax-release-object WW)<BR>                                       (vlax-release-object APP)<BR>                       )<BR>                       (prompt "\n所选目录中未有任何图档!!!")<BR>       )<BR>       (setvar "acadlspasdoc" HOLDLSP)<BR>       (setvar "cmdecho" HOLDECHO)<BR>       (princ)<BR>)<BR>(princ)



我知道要把        (vlax-for ENT_LAY (vla-get-layers WW)<BR>                                                                                                                                                                               (vla-put-color ENT_LAY COL)<BR>                                                                                                                                                                       )       改掉。


但不知怎么改,试了很久也是不出,望高手指点。


谢谢。<BR>

meflying 发表于 2004-2-12 09:48:00

你想改成什么呢?


这是ACTIVEX对象操作,你熟悉一下ACTIVEX就容易了

citykunan 发表于 2004-2-12 10:02:00

飞版主我知道这是activex的操作,可是我手边没有这样的书,程序中的一些参数我也看不懂。


我是想有一些图纸用了xref命令去引用其他的图纸,这些被引用的图纸如果改变了路径,引用这些图纸的图,就找不到他们。我们可以用(command "-xref" "b" "*")把这些所有被引用图纸绑定进来,这样就不会被影响了。但这必须打开每一张图进行单独操作。我看了用activex的办法可以实现批量操作,这样就方便很多了。但又不知如何更改,真是难者不会啊。


       

citykunan 发表于 2004-2-16 10:10:00

我用vb编了一个,可到vb开发区去看看。

龙龙仔 发表于 2004-11-9 12:41:00

本帖最后由 作者 于 2004-11-11 10:31:29 编辑

;;BIND XREF BY OBJECTDBX做出来了(.VLX)--只供测试       


;;使用前请copy原图





citykunan 发表于 2004-11-10 14:23:00

万分感谢。

citykunan 发表于 2004-11-10 14:28:00

好象不能用,是不是和CAD的版本有关,我用的是2002.


Error: ActiveX Server returned the error: unknown name: Path"ActiveX Server <BR>returned the error: unknown name: Path"

龙龙仔 发表于 2004-11-10 15:44:00

有测试图吗?

citykunan 发表于 2004-11-10 16:27:00

其中a,b是有xref的。 (你复制到本地后,xref的路径变了,可以在库搜索路径上添加,这样就可以看到xref了)
       

龙龙仔 发表于 2004-11-11 09:46:00

本帖最后由 作者 于 2004-11-11 10:17:33 编辑 <br /><br /> ;;注意:只BIND进看到的东西<BR>;;OBJECTDBX METHOD 缺点:会失去预览图<BR>;;BY 龙龙仔(LUCAS)<BR>


-&gt;注意:附件已更新
页: [1] 2
查看完整版本: 批量bind图纸(绑定xref)