乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 115|回复: 5

lisp程序问题

[复制链接]

21

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
131
发表于 2002-7-25 12:48:00 | 显示全部楼层 |阅读模式
各位帮忙,看这程序为什么不能调用执行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
  )
)
回复

使用道具 举报

21

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
131
发表于 2002-7-25 13:51:00 | 显示全部楼层
我想用程序来检索到某一目录下的所有.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
回复

使用道具 举报

22

主题

248

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

20

主题

653

帖子

15

银币

中流砥柱

Rank: 25

铜币
733
发表于 2002-7-25 16:34:00 | 显示全部楼层
你是不是想把一批dwg中的每一个文件中的Blocks提取出来?
如果是,可以不要这样做,不如:
0. 循环开始
1. 记录undo点
2. Insert 一个文件
3. 获取所有的BlockName列表
4. 剔除与Insert文件同名的那个BlockName,返回新的BlockName-list
5. 循环做wblock到指定的文件夹
6. undo回去
7. 下一个dwg文件...(循环)
回复

使用道具 举报

21

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

21

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-5-25 07:13 , Processed in 2.239907 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表