明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2192|回复: 7

我的第一个LSP,另存为老版本。另外请教一个问题

  [复制链接]
发表于 2018-12-9 00:08:34 | 显示全部楼层 |阅读模式
本帖最后由 CAD新军 于 2018-12-9 00:10 编辑

我用2014画图发建筑和甲方都经常说版本太高打不开,所以发图前都要存为低版本,我一般选2007版本文件。实在常用就弄了个脚本,有三个命令。
1. cw 保存当前违建为2007格式
2. cwjt,保存当前文件后面是今天的日期,如果有同样格式的日期在最后会更新日期,即 “天面.dwg”会变成 “天面[2018-12-09].dwg”,但天面"[2018-12-01].dwg" 会变成 “天面[2018-12-09].dwg”
3. ct,出图用的,删掉一大堆计算书图层,另存为当前文件位置新建一个当前日期名字文件夹

请教一个问题就是,怎样把一个命令批量在多文件执行?比如我打开3个文件,怎样都执行我这个cw命令呢?


  1. ;;;本LSP有三个个命令,cw直接保存当前文件为07版本DWG,cwjt保存文件加日期后缀
  2. ;;;ct 为出图用,删除盈建科计算书图层,另存到【日期】文件夹,保存为2007格式

  3. ;;出图删除图层修改下面这行增加(setq delLayer (list "11"  "12"  "13"  "dsptext_planname"  "dsptext_col" "dsptext_beam"  "dsptext_wallcol"  "SPRE_SPECBE_LIAN"  "SPRE_SPECBE_TF" "SPRE_SPEC_HINGE" "SPRE_SPECCL_JIAO" "SPRE_SPECWA_SHORT" "jiantu"  "砼柱" "砼墙"  "砼梁" "板洞边线" "PKPM_WPJ" ))


  4. (defun c:cw()
  5.   ;;(setvar "oldCmdecho" (getvar "cmdecho"))
  6.   ;;(setvar "cmdecho" 0)
  7.   (setq oldExpert (getvar "expert" ))
  8.   (setvar "expert" 5)
  9.   (command "saveas" 2007 (strcat (getvar "dwgprefix")  (getvar "dwgname")))
  10.   (setvar "expert" oldExpert)
  11.   ;;(setvar "cmdecho" oldCmdecho)
  12.   (princ "保存为2007格式")
  13. )


  14. (defun c:cwjt()
  15. ;;;保存为今天日期并存为ACAD2007版本 prompt 2007 2013
  16. (setq dwgname (getvar "dwgname"))
  17. (setq dwgnamelen (strlen dwgname))
  18. (setq dwgname (substr dwgname 1 (- dwgnamelen 4)))

  19. (prompt "\n>空格保存默认版本,输入任意字符2007:")
  20.   (setq saveVersion (getstring))
  21.   (if (= saveVersion "") (setq saveVersion 2013) (setq saveVersion 2007))

  22. (defun mysaveas(newFileName)
  23.         ;;;(princ newFileName)
  24.   ;;(setvar "oldCmdecho" (getvar "cmdecho"))
  25.   ;;(setvar "cmdecho" 0)
  26.   (setq oldExpert (getvar "expert" ))
  27.   (setvar "expert" 5)
  28.   (command "saveas" saveVersion newFileName)
  29.   (setvar "expert" oldExpert)
  30.   ;;(setvar "cmdecho" oldCmdecho)
  31. )



  32. (setq cdate (rtos (getvar "cdate") 2 8))
  33. (setq savedate (strcat "[" (substr cdate 1 4) "-" (substr cdate 5 2) "-" (substr cdate 7 2) "]"))


  34. (if (> dwgnamelen 10)
  35.    ;;;长度足够在判断
  36.   (progn
  37.     (if (wcmatch dwgname "*`[####`-##`-##`]")
  38.       ;;;文件名后有日期
  39.         (progn
  40.          ;;; (strcat "\n" (substr dwgname 1 (- dwgnamelen 16)) savedate ".dwg")
  41.           (mysaveas (strcat (getvar "dwgprefix") (strcat (substr dwgname 1 (- dwgnamelen 16)) savedate ".dwg")))
  42.         )
  43.         ;;;文件名后没有日期
  44.        (progn
  45.      ;;;     (princ (strcat "\n" dwgname savedate ".dwg"))   
  46.           (mysaveas (strcat (getvar "dwgprefix") (strcat dwgname savedate ".dwg")) )
  47.          
  48.        )
  49.     )
  50.   )
  51.   ;;;长度不足,直接加
  52.   (progn
  53.     ;;;  (strcat "\n" dwgname savedate ".dwg")
  54.       (mysaveas (strcat (getvar "dwgprefix") (strcat dwgname savedate ".dwg")) )
  55.   )
  56. )

  57. )


  58. (defun c:ct()
  59.   ;;;################删除出图不要的图层
  60.   (setq AcadObject (vlax-get-acad-object)
  61.     AcadDocument (vla-get-ActiveDocument AcadObject)
  62.     LayersObj (vla-get-layers AcadDocument)
  63.   );end setq
  64.   (setq delLayer (list "11"  "12"  "13"  "dsptext_planname"  "dsptext_col" "dsptext_beam"  "dsptext_wallcol"  "SPRE_SPECBE_LIAN"  "SPRE_SPECBE_TF" "SPRE_SPEC_HINGE" "SPRE_SPECCL_JIAO" "SPRE_SPECWA_SHORT" "jiantu"  "砼柱" "砼墙"  "砼梁" "板洞边线" "PKPM_WPJ" ))

  65.   
  66.   (vlax-for vlay LayersObj
  67.       (if (vl-position (vla-get-name vlay) delLayer)
  68.         (progn
  69.           (princ (vla-get-name vlay))
  70.           (vl-cmdf "_.-laydel" "_N" (vla-get-name vlay) "" "_Y")
  71.         )
  72.       )
  73.       
  74.   );end vlax-for
  75.   
  76.   
  77.   ;保存为2007格式到日期子目录
  78.   (setq cdate (rtos (getvar "cdate") 2 0))
  79.   (setq oldExpert (getvar "expert" ))
  80.   (setvar "expert" 5)
  81.   (vl-mkdir (strcat (getvar "dwgprefix") cdate))
  82.   (command "saveas" 2007 (strcat (getvar "dwgprefix") cdate "\\" (getvar "dwgname")))
  83.   (princ  (strcat "保存到" (getvar "dwgprefix") cdate "\\" (getvar "dwgname")))
  84.   (setvar "expert" oldExpert)
  85. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-12-10 12:53:00 | 显示全部楼层
可以尝试将lisp文件名改为acad.lsp,最后一行写 (c:cw),放在需要批量处理的dwg文件夹内,然后打开dwg文件,就会自动执行acad.lsp。
发表于 2018-12-11 21:47:18 | 显示全部楼层
还不错,第一个程序能做出来,鼓励一下
发表于 2018-12-13 10:06:04 | 显示全部楼层
只是单独存为旧版,改选项的是不是也可以
 楼主| 发表于 2018-12-15 20:41:07 | 显示全部楼层
qq1547325443 发表于 2018-12-13 10:06
只是单独存为旧版,改选项的是不是也可以

保存为当版本和保存为旧版本会快很多。我平时都存为新版本的,只有发给其他专业或者甲方时会另存为低版本。
发表于 2018-12-20 22:40:23 | 显示全部楼层
很流鼻啊简直太棒了
发表于 2024-6-26 01:34:50 | 显示全部楼层
很实用的功能,感谢
发表于 2024-6-29 15:08:56 | 显示全部楼层
程序不长,功能却很实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 23:02 , Processed in 0.225572 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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