明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2127|回复: 7

lisp程序问题

[复制链接]
发表于 2002-7-25 12:48 | 显示全部楼层 |阅读模式
各位帮忙,看这程序为什么不能调用执行lisp程序中建立的SCR脚本文件,而非要等关闭了CAD当前文档后才能运行该SCR脚本?难道没有方法解决吗?请帮忙
(defun C:HH ()
  (vl-load-com)
  (setq FF0 "f:\\a.txt")
  (setq LEN (MC_GETFILE_LINE FF0))
  (setq LIEBIAO "")
  (setq P 0)
  (while (> LEN 0)
    (setq WENJIANMING (MC_GETFILE_TEXT FF0 P))
    (setq LIEBIAO (strcat LIEBIAO
                          (strcat "open "    WENJIANMING
                                  "\n"             "("        "load "
                                  "ttt.lsp"  ")"        "\n"
                                  "bb"             "\n"        "close "
                                  WENJIANMING                " n"
                                  "\n"
                                 )
                  )
    )
    (setq FF "f:\\aaa.scr")
    (setq FFA (open FF "w"))
    (write-line LIEBIAO FFA)
    (setq LEN (- LEN 1))
    (setq P (1+ P))
  )
  (close FFA)
  (command "script" "f:\\aaa.scr")
)

(defun MC_GETFILE_TEXT (FILES0 LINE0 / FN0 TEXT0)
  (setq LINE0 (+ 1 LINE0))
;;(setq files0 (findfile files0))
  (if FILES0
    (progn
      (setq FN0 (open FILES0 "r"))
      (if (<= LINE0 (MC_GETFILE_LINE FILES0))
        (progn
          (repeat LINE0
            (setq TEXT0 (read-line FN0))
          )
          (close FN0)
          TEXT0
        )
        NIL
      )
    )
    NIL
  )
)

;;;读取文件行数
(defun MC_GETFILE_LINE (FILES1 / TMPLST1 X1 FN1)
  (setq FILES1 (findfile FILES1))
  (if FILES1
    (progn
      (setq TMPLST1 0)
      (setq FN1 (open FILES1 "r"))
      (while (read-line FN1)
        (setq TMPLST1 (+ 1 TMPLST1))
      )
      (close FN1)
      TMPLST1
    )
    NIL
  )
)
发表于 2002-7-25 13:29 | 显示全部楼层

在LISP程序中使用能力更差的脚本文件,为什么?

 楼主| 发表于 2002-7-25 13:51 | 显示全部楼层

呵呵,陈老师,我是为了实现下面的功能。

我想用程序来检索到某一目录下的所有.dwg文件,将其文件名产生一个列表,然后,对列表文件进行批量处理,即打开文件然后执行lisp程序,然后用WBLOCK提取所有块到指定文件夹,然后关闭文件,因为好象只有这样做才能完成图纸的批量处理,脚本文件如下:
大家看,还能有别的办法完成这个目的吗?
open f:\inax\P-S01245.dwg
(load ttt.lsp)
bb
close f:\inax\P-S01245.dwg n
open f:\inax\P-S01246.dwg
(load ttt.lsp)
bb
close f:\inax\P-S01246.dwg n
open f:\inax\P-S01247.dwg
(load ttt.lsp)
bb
close f:\inax\P-S01247.dwg n
发表于 2002-7-25 16:13 | 显示全部楼层

插入-〉分解-〉处理-〉删除-〉清理...

在《Visual LISP for AutoCAD2000程序设计...》第五章中有专门的讨论和程序范例...
发表于 2002-7-25 16:34 | 显示全部楼层

你是不是想把一批dwg中的每一个文件中的Blocks提取出来?

你是不是想把一批dwg中的每一个文件中的Blocks提取出来?

如果是,可以不要这样做,不如:
0. 循环开始
1. 记录undo点
2. Insert 一个文件
3. 获取所有的BlockName列表
4. 剔除与Insert文件同名的那个BlockName,返回新的BlockName-list
5. 循环做wblock到指定的文件夹
6. undo回去
7. 下一个dwg文件...(循环)
 楼主| 发表于 2002-7-25 16:45 | 显示全部楼层

陈老师的程序我试了

运行了一20几个文件就出现致命错误了,我对陈老师的程序不明白,结果把我的原图都保存破坏掉了,我的意思是只打开原图,然后wblock写块,再关闭原图,不保存,陈老师帮忙该一下您的程序?
 楼主| 发表于 2002-7-25 16:56 | 显示全部楼层

版主的意思很明确

但我这样做起来对我来说还真挺难,我的图纸每张都很大,大约每张都八九百K,最难的问题还是,每3张图纸为一个类型,里面的块命名不会重复,但其余的都330张图纸就都是每3张为一组,命名也就相同了,但块内容是大多数都不同的,所以,是不能用插入图纸的方法来完成这个目的的,否则到头来提取的块只是那基本的3张中的块,所以我想把每张图纸按图号建一个文件夹,然后把图纸中的块写到相应文件夹中,这些以图纸名建文件夹及写块程序我都已经没问题了,现在就是懒了点,不想每张图纸都手动打开执行程序,所以就想用程序来进行批量相同操作。
发表于 2002-7-25 19:08 | 显示全部楼层

这个方法比较好。

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

本版积分规则

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

GMT+8, 2024-7-7 01:41 , Processed in 0.186964 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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