明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4910|回复: 10

script 脚本应用 - 开新图并在新图中运行lisp程序

[复制链接]
发表于 2013-1-16 02:47 | 显示全部楼层 |阅读模式
本帖最后由 millermin 于 2013-2-3 09:10 编辑

一程序,运行结果不如意。程序打开指定文件,然后在布局里找到指定文字,将文字数据串取出,更新显示后存盘退出。数据串在主程序里已经完成。
我先打开一个空文件,然后运行程序,图形文件打开以后,当前文件仍然停留在空文件,未能切换到哪个新打开的文件。结果程序后半段部分只能对空文件操作,因此得到错误结果。我 该如何修改,使程序可以操作新打开的文件。



(defun C:center ( )
(vl-load-com)
(setq txt "MAR. 2013")
(setq file (getfiled "Select a drawing" "" "dwg" 0))
(setq acadobj (vlax-get-acad-object))
(setq doc(vla-get-documents acadobj))
(vla-open doc file)

(setq ss(ssget "x" '((0 . "TEXT,MTEXT"))))
(setq m 0)
(repeat (sslength ss)
        (setq item(ssname ss m))
        (setq  str (cdr (assco 1 (entget item))))
        (if (= txt str)
            (entmod (entget item))
        )
        (setq m (+ 1 m))
)
(close file)
)

 楼主| 发表于 2013-2-1 13:32 | 显示全部楼层
经过第三轮修改,终于获得成功。基本思维是:在即时创建一个script文件,将每个图像文件需要做的工作逐个文件第写入script文件里,再运行这个文件,最后删除这个文件。其实就三句,头尾是开关图形文件,中间运行一个对图形操作的lisp程序,即可。
缺点是不可以按需选择部分文件,要么只做一个文件,要么所有文件都的做。所以文件夹里不能有非工程需要的其他图形文件。
程序如下:

(defun c:center ()
  
(setq path(folder "CHOOSE YOUR DRAWING FILES PATH ONLY -- SHEET NUMBER "))
(setq path(strcat path "\\"))

(setq file-list
   (mapcar '(lambda (dwgname) (strcat path dwgname))
         (vl-directory-files path "*.dwg")
   )
)
(setq currentdwg (strcat path (getvar "dwgname")))
(setq file-list(vl-remove currentdwg file-list))



(setq openfile (open (setq file (strcat path "myscript.scr")) "w"))
               (foreach f file-list
                    (write-line (strcat "_.open \"" f "\"") openfile)
                    (write-line "c2" openfile)
                    (write-line "_.qsave _.close" openfile)
                )
                (close openfile)
                (command ".script" file)
                (vl-file-delete file)
(princ)
)

评分

参与人数 2明经币 +1 金钱 +30 收起 理由
tigcat + 1 + 10 真的非常实用
xsso + 20 赞一个!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2013-1-16 08:24 | 显示全部楼层
偶都是将图insert插入空白图中处理,然后在用WBLOCK写出去。
 楼主| 发表于 2013-1-19 08:06 | 显示全部楼层
等结果,自己顶。
发表于 2013-1-19 08:42 | 显示全部楼层
 楼主| 发表于 2013-2-1 10:22 | 显示全部楼层
本帖最后由 millermin 于 2013-2-1 10:27 编辑

程序修改了,还是不行。同时红色字符也不懂意义。倒不是等程序要用,而是借题学习掌握函数用法。望指导。

(defun C:c1 ( )
(vl-load-com)

(setvar "sdi" 0)
(setvar "filedia" 0)

(setq file (getfiled "Select a drawing" "" "dwg" 0))
(setq obj-new (vlax-get-acad-object))
(setq doc-new (vla-get-activedocument obj-new))

(vla-sendcommand doc-new (strcat "(command \"_.OPEN\")\n" file "\n"))


(vla-sendcommand doc-new "(c:c2)\n")
(vla-sendcommand doc-new "(close file )\n")

(setvar "filedia" 1)
)

发表于 2013-2-1 22:47 | 显示全部楼层
看中文解释,你做的跟我刚刚研究的批量操作原理差不多,不过我做的是将我预先想做的操作做成LSP,然后利用(vl-load-all)加载到之后打开的每张图纸,历完每张图纸后将CAD关了
好像你的方法比我的好,研究一下你的成果
发表于 2013-5-31 08:51 | 显示全部楼层
ZZXXQQ 发表于 2013-1-16 08:24
偶都是将图insert插入空白图中处理,然后在用WBLOCK写出去。

好办法,不过如果模型图纸空间都有内容就有问题了;
我一般用单文件操作模式(setvar "SDI" )
发表于 2013-10-27 01:50 | 显示全部楼层
对于批处理我一般都是让程序在空图上将图一个个的insert进来,进行处理,然后SAVEAS, 删图、purge,下一个。。。。。最后关CAD有点好象有时会因会比例尺不一样而导致线型号比例会出问题
发表于 2019-6-22 14:24 | 显示全部楼层
百尺竿头更进一步,答主能否加入判断自动识别dwg而忽略文件夹内的其他文件呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 13:32 , Processed in 0.149954 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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