找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 903|回复: 6

[LISP函数]:问个关于打印的问题,高手一定要过来看看。

[复制链接]
发表于 2006-3-9 22:23:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我有已设置好的“打印样式”acad.stb,我想把它复制到C:\Documents and Settings\“用户名”\Application Data\Autodesk\AutoCAD 2005\R16.1\chs\Plot Styles下,怎么用LSP实现?每台机的“用户名”又是不同的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-3-16 00:07:18 | 显示全部楼层
首先我建议你在标题中要写明确求助什么内容。这个标题太笼统了。

抽空给你做了一个比较完整的例子:


  1. [FONT=courier new]
  2. ([color=#800040]defun[/color] qf_FSO_CopyFile (src dest [color=#0000ff]/[/color] fso catchit)
  3.   ([color=#0000ff]setq[/color]    catchit
  4.      ([color=#0000ff]vl-catch-all-apply[/color]
  5.        (function
  6.          ([color=#800040]lambda[/color] ()
  7.            ([color=#0000ff]setq[/color] fso
  8.               ([color=#0000ff]vlax-create-object[/color] [color=#ff00ff]"Scripting.FileSystemObject"[/color])
  9.            )
  10.            ([color=#0000ff]if[/color] ([color=#0000ff]or[/color] ([color=#0000ff]not[/color] ([color=#0000ff]findfile[/color] dest)) ; 目标不存在
  11.                ([color=#0000ff]and[/color]
  12.              ([color=#0000ff]findfile[/color] dest) ; 目标文存在但比较旧
  13.              (> ([color=#0000ff]vlax-get-property[/color]
  14.                   ([color=#0000ff]vlax-invoke-method[/color]
  15.                 fso
  16.                 'getfile
  17.                 ([color=#0000ff]findfile[/color] src)
  18.                   )
  19.                   'datelastmodified
  20.                 )
  21.                 ([color=#0000ff]vlax-get-property[/color]
  22.                   ([color=#0000ff]vlax-invoke-method[/color]
  23.                 fso
  24.                 'getfile
  25.                 ([color=#0000ff]findfile[/color] dest)
  26.                   )
  27.                   'datelastmodified
  28.                 )
  29.              )
  30.                )
  31.            )
  32.          ([color=#0000ff]progn[/color]
  33.            ([color=#0000ff]if[/color] ([color=#0000ff]findfile[/color] dest)
  34.              ([color=#0000ff]vl-file-delete[/color] dest)
  35.            )
  36.            ([color=#0000ff]vlax-invoke-method[/color] fso 'copyfile ([color=#0000ff]findfile[/color] src) dest -1)
  37.            ([color=#0000ff]princ[/color] [color=#ff00ff]"\n"[/color])
  38.            ([color=#0000ff]princ[/color] ([color=#0000ff]findfile[/color] dest))
  39.            ([color=#0000ff]princ[/color] [color=#ff00ff]"已更新."[/color])
  40.          )
  41.            )
  42.            ([color=#0000ff]vlax-release-object[/color] fso)
  43.          )                ;end of [color=#800040]lambda[/color]
  44.        )                ;end of function
  45.        nil
  46.      )
  47.   )
  48.   ([color=#0000ff]if[/color] ([color=#0000ff]vl-catch-all-error-p[/color] catchit)
  49.     nil
  50.     'T
  51.   )
  52. )
  53. ([color=#800040]defun[/color] copyfile (src dest)
  54.   ([color=#0000ff]if[/color] ([color=#0000ff]null[/color] ( qf_FSO_CopyFile src dest))
  55. [color=#008000]    ;; 如果采用FSO复制文件失败的话可以在这里定义其它复制方式[/color]
  56. [color=#008000]    ;; (vl_copyfile src dest) [/color]
  57.     nil
  58.   )
  59. )
  60. ([color=#800040]defun[/color] installpstyles (src [color=#0000ff]/[/color] acadver dest)
  61.   ([color=#0000ff]setq[/color] acadver ([color=#0000ff]atof[/color] ([color=#0000ff]getvar[/color] [color=#ff00ff]"acadver"[/color])))
  62.   ([color=#0000ff]if[/color] ([color=#0000ff]and[/color] (>= acadver 15.0) (< acadver 16.0))
  63. [color=#008000]                    ; AutoCAD 2000/2000i/2002[/color]
  64.     ([color=#0000ff]setq[/color] dest ([color=#0000ff]strcat[/color] ([color=#0000ff]vl-filename-directory[/color] ([color=#0000ff]findfile[/color] [color=#ff00ff]"acad.exe"[/color]))
  65.                "\\Plot Styles\"
  66.                src
  67.            )
  68.     )
  69. [color=#008000]                        ; else AutoCAD 2004+[/color]
  70.     ([color=#0000ff]setq[/color] dest ([color=#0000ff]strcat[/color] ([color=#0000ff]getvar[/color] [color=#ff00ff]"ROAMABLEROOTPREFIX"[/color])
  71.                "Plot Styles\"
  72.                src
  73.            )
  74.     )
  75.   )
  76.   ( copyfile src dest)
  77. )

  78. [color=#008000];; 正式安装这些STB[/color]
  79. ([color=#0000ff]mapcar[/color]    ' installpstyles
  80.     '([color=#ff00ff]"acad.stb"[/color] [color=#ff00ff]"mystb.stb"[/color] [color=#ff00ff]"CTB2STB.stb"[/color]
  81.      )
  82. )
  83. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-16 00:17:18 | 显示全部楼层
简述一下思路。

我先试用过vl自带的文件复制函数。发现它对文件修改日期设置不对头。所以另外写了一个文件复制函数。注意:当你的Windows的FSO系统被强制手动封闭时这个函数也有可能失败的,一般情况下这个方式没有问题,除非你改动了Windows的这些基本服务。你也可以考虑其它方式复制,比如用shell调用系统的copy命令之类。我就不尝试了。

思路是这样的:比较系统中的文件与我的Src文件。在我的文件比较新的或系统中不存在我的文件的情况下才执行复制。我想你是要用它来安装stb。这样可以保证只有你的新stb改过之后才执行安装动作(copy)。不会导致每次启动AutoCAD加载这个lsp时都执行复制。

Plot Style的位置不同的autoCAD版本不一样。你看一下程序中就明白。
AutoCAD 2004 以上的版本可以通过(getvar "ROAMABLEROOTPREFIX")来做到你的顶楼的要求。

btw,
在你的LISP程序第一行加一句这个:
(vl-load-com)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-16 07:40:21 | 显示全部楼层
何必这么麻烦呢,复制粘贴一下就可以了

怎么回事啊,附件显示不出来[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-18 23:58:56 | 显示全部楼层
秋枫,你2楼的程序要怎么执行?我的是2005可以吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-19 20:49:53 | 显示全部楼层
可以。

这是LISP程序啊。你为什么不试一下呢?

使用这个安装程序还是需要了解一些基本的LISP……二楼用的都是基本的LISP调用。你应该看得懂

二楼的代码可以看到从AutoCAD 2000至2004+ (2004/5/6)情况都考虑了。注释中写得很清楚。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 00:25:45 | 显示全部楼层
那如果我要把我的“样板文件”acad.dwt复制到
C:\Documents and Settings\“用户名”\Local Settings\Application Data\Autodesk\AutoCAD 2005\R16.1\chs\Template呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 10:32 , Processed in 0.318070 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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