明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 726613

[已解答] 文件夹与样板文件加载

[复制链接]
发表于 2013-5-19 07:54 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-5-19 07:57 编辑
726613 发表于 2013-5-18 19:55
请问朋友,我还是解决不了,请帮我再详细点,谢谢


  1. ;;; 双击Setup.dwg时,会Autocad其所在文件夹内的acad.lsp,故本文件命为acad.lsp,并文件Setup.dwg放在一起
  2. ;;; 第一步 检测自定命令是否能执行,否则将Setup.dwg所在文件夹内的所有对象全部拷贝到支持文件夹内
  3. ;;;第二步,增加<支持文件搜索路径>
  4. ;;;第三步,增加菜单
  5. ;;;第四点,在启动组加入
  6. (defun s::startup (/ FROM SUPPORTLIST TO)
  7.   (vl-load-com)
  8.   ;;1  创建目录
  9.   ;;用法: (vldos-mkdir DirectoryToCreate[STRING])
  10.   ;;参数: 目录的全路径名. 此函数会自动创建参数中所有不存在的目录.
  11.   ;;说明: 可创建多层目录.
  12.   ;;返回值:[成功]创建目录的全路径名;[失败]: NIL
  13.   (Defun vldos-MkDir (Folder / FolderX Fil FFF Pos DIR DRV)
  14.     (if (null (setq Fil (vlax-get-or-create-object "Scripting.FileSystemObject")))
  15.       (setq Folder nil)
  16.       (progn (while (vl-string-search "/" Folder)
  17.                (setq Folder (vl-string-subst "\\" "/" Folder))
  18.              )
  19.              (if (wcmatch Folder "*\\")
  20.                (setq Folder (substr Folder 1 (1- (strlen Folder))))
  21.              )
  22.              (setq FolderX Folder)
  23.              (while (setq Pos (vl-string-search "\\" Folder))
  24.                (setq FFF    (cons (substr Folder 1 Pos) FFF)
  25.                      Folder (substr Folder (+ Pos 2))
  26.                )
  27.              )
  28.              (setq FFF (reverse (cons Folder FFF))
  29.                    DRV (car FFF)
  30.                    FFF (cdr FFF)
  31.              )
  32.              (foreach DIR FFF
  33.                (if (null (vl-file-directory-p (setq DRV (strcat DRV "\\" DIR))))
  34.                  (vlax-invoke-method Fil 'createfolder DRV)
  35.                )
  36.              )
  37.              (vlax-release-object Fil)
  38.              (if (setq Folder (vl-file-directory-p FolderX))
  39.                (setq Folder (vldos-formatpath FolderX))
  40.              )
  41.       )
  42.     )
  43.     Folder
  44.   )
  45.   ;;2  转换路径中字符 "/" 为 "\\" 并返回大写值
  46.   ;;用法: (vldos-formatpath PathStringToFormat[STRING])
  47.   ;;参数1: 路径字符串
  48.   ;;说明: 此函数转换字符 "/" 为 "\\".
  49.   ;;返回值:[成功]: 转换后的字符串;[失败]: None
  50.   (Defun vldos-formatpath (string)
  51.     (while (vl-string-search "/" string) (setq string (vl-string-subst "\\" "/" string)))
  52.     (while (vl-string-search "[url=]\\\\[/url]" string)
  53.       (setq string (vl-string-subst "\\" "[url=]\\\\[/url]" string))
  54.     )
  55.     (setq string (strcase string))
  56.     string
  57.   )
  58.   ;;3  复制文件或目录
  59.   ;;用法: (vldos-copy SourceFile/Directory[STRING] TargetFile/Directory[STRING])
  60.   ;;参数1: 源文件或目录
  61.   ;;参数2: 目标目录. 如果包含 "*\\" or "*/", 此函数将在此路径下创建相同的子目录.
  62.   ;;说明:  复制文件或目录.
  63.   ;;返回值:[成功]: 复制的文件或目录字符串;[失败]: NIL
  64.   ;;例(vldos-copy2 "D:\\HH" "D:\\DD")此法将HH下的内容(包括文件夹),均放在DD下
  65.   (Defun vldos-copy2 (From to / rtn)
  66.     (cond ((vl-file-directory-p From)
  67.            (if (< (strlen to) 3)
  68.              (setq to (strcat to "\\"))
  69.              (if (not (vl-file-directory-p to))
  70.                (vldos-mkdir to)
  71.              )
  72.            )
  73.            (if (setq Rtn (vlax-get-or-create-object "Scripting.FileSystemObject"))
  74.              (progn (vlax-invoke-method Rtn 'CopyFolder From to T)
  75.                     (vlax-release-object Rtn)
  76.                     (if (vl-file-directory-p to)
  77.                       (setq Rtn (vldos-formatpath to))
  78.                     )
  79.              )
  80.            )
  81.           )
  82.           ((findfile From)
  83.            (vl-file-copy From to)
  84.            (if (setq rtn (findfile to))
  85.              (setq rtn (vldos-formatpath rtn))
  86.            )
  87.           )
  88.     )
  89.     rtn
  90.   )
  91.   ;;4  解析字符串为表
  92.   (defun strParse (Str Delimiter / SearchStr StringLen return n char)
  93.     (setq SearchStr Str)
  94.     (setq StringLen (strlen SearchStr))
  95.     (setq return '())
  96.     (while (> StringLen 0)
  97.       (setq n 1)
  98.       (setq char (substr SearchStr 1 1))
  99.       (while (and (/= char Delimiter) (/= char ""))
  100.         (setq n (1+ n))
  101.         (setq char (substr SearchStr n 1))
  102.       )
  103.       (setq return (cons (substr SearchStr 1 (1- n)) return))
  104.       (setq SearchStr (substr SearchStr (1+ n) StringLen))
  105.       (setq StringLen (strlen SearchStr))
  106.     )
  107.     (reverse return)
  108.   )
  109.   ;;5 反解析表为字符串
  110.   (defun StrUnParse (Lst Delimiter / return)
  111.     (setq return "")
  112.     (foreach str Lst (setq return (strcat return Delimiter str)))
  113.     (substr return 2)
  114.   )
  115.   ;;6 移除支持文件搜索路径
  116.   (defun QF_RemoveSupportPath (PathToRemove / supportlist)
  117.     (setq supportlist (strparse (getenv "ACAD") ";"))
  118.     (setq supportlist (vl-remove "" supportlist))
  119.     (setq supportlist (vl-remove-if '(lambda (x) (= (strcase x) (strcase PathToRemove)))
  120.                                     supportlist
  121.                       )
  122.     )
  123.     (setenv "ACAD" (strUnParse supportlist ";"))
  124.   )
  125.   ;;7 添加支持文件搜索路径
  126.   ;; 第二个参数如果为真, 插最前,否则插最后
  127.   (defun AddSupportPath (PathToAdd isFirst / supportlist)
  128.     (QF_RemoveSupportPath PathToAdd)
  129.     (setq supportlist (strparse (getenv "ACAD") ";"))
  130.     (setq supportlist (vl-remove "" supportlist))
  131.     (if isFirst
  132.       (setq supportlist (cons PathToAdd supportlist))
  133.       (setq supportlist (append supportlist (list PathToAdd)))
  134.     )
  135.     (setenv "ACAD" (strUnParse supportlist ";"))
  136.   )
  137.   ;;8 在启动组加入
  138.   ;; 示例(addToStartupSuite
  139.   ;; "D:\\DT\\DTIImain.lsp")
  140.   (defun addToStartupSuite (filename / CT DEFAULT N NUMSTARTUP REGPATH REVISION VERSION)
  141.     (setq regpath  "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD"
  142.           revision (vl-registry-read regpath "CurVer")
  143.           version  (vl-registry-read (setq regpath (strcat regpath "\\" revision)) "CurVer")
  144.           default  (vl-registry-read (setq regpath (strcat regpath "\\" version "\\Profiles")))
  145.           regpath  (strcat regpath "\\" default "\\Dialogs\\Appload\\Startup")
  146.           ct       1
  147.     )
  148.     (if (setq numstartup (vl-registry-read regpath "NumStartup"))
  149.       (progn
  150.         (setq n (1+ (atoi numstartup)))
  151.         (while (and (< ct n)
  152.                     (/= filename (vl-registry-read regpath (strcat (itoa ct) "Startup")))
  153.                )
  154.           (setq ct (1+ ct))
  155.         )
  156.       )
  157.       (setq n 1)
  158.     )
  159.     (if (= n ct)
  160.       (progn (vl-registry-write regpath (strcat (itoa n) "Startup") filename)
  161.              (vl-registry-write regpath "NumStartup" (itoa n))
  162.       )
  163.     )
  164.   )
  165.   ;;9 主程序
  166.   ;;9.1第一步 拷贝到支持文件目录下.自己定义的DTIImain.lsp已经在支持目录下
  167.   (if (not C:HH)
  168.     (progn (setq From (getvar "dwgprefix"))
  169.            (setq supportlist (strparse (getenv "ACAD") ";"))
  170.            (setq to (car (vl-remove "" supportlist)))
  171.            (vldos-copy2 From to)
  172.     )
  173.   )
  174.   ;;9.2第二步 添加支持文件路径
  175.   (if (not (findfile "TD75gljs.VLX"))
  176.     (progn (AddSupportPath (strcat to "\\td75") nil)
  177.            (AddSupportPath (strcat to "\\Fonts") nil)
  178.     )
  179.   )
  180.   ;;9.3 第三步,在启动组中添加路径   
  181.   (addToStartupSuite (findfile "DTIImain.lsp"))
  182.   ;;9.4  加载自定义菜单  
  183.   (if (not (menugroup "CXinZhi"))
  184.     (command "menuload" "CXinZhi.mnu")
  185.   )
  186.   ;;9.5  自定义局部菜单放在倒数第三位
  187.   (defun mccad-placemenu (/ CNT)
  188.     (setq CNT 1)
  189.     (while (< CNT 24)
  190.       (if (menucmd (strcat "P" (itoa CNT) ".1=?"))
  191.         (setq CNT (1+ CNT))
  192.         (progn (if (> CNT 2)
  193.                  (setq CNT (- CNT 2))
  194.                  (setq CNT 2)
  195.                )
  196.                (menucmd (strcat "p" (itoa CNT) "=+CXinZhi.pop179"))
  197.                (setq CNT 25)
  198.         )
  199.       )
  200.     )
  201.   )
  202.   (mccad-placemenu)
  203. )
  204. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  205. (IF (and (NOT C:HH) (findfile "DTIImain.lsp"))
  206.   (LOAD "DTIImain.lsp")
  207. )
  208. ;;(command "CLOSE" "Y")在acad.lsp所在文件夹内的.dwg会自动关闭


本帖子中包含更多资源

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

x
 楼主| 发表于 2013-5-19 10:23 | 显示全部楼层
自贡黄明儒 发表于 2013-5-19 07:54

这个好像是程序打包的引导程序,由于本人水平有限,很难读懂。请赐教,另附上菜单文件等

将yxm.vlx文件添加到启动组

本帖子中包含更多资源

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

x

点评

http://bbs.mjtd.com/thread-101501-1-1.html 见老大回复  发表于 2013-5-19 13:30
发表于 2013-5-19 20:30 | 显示全部楼层
这样也可以,但后面的不行

;自动添加搜索路径(cabinsummer 2012-4-15)
;(setq sp (getenv "ACAD"))
;(setq path '(
;"E:\\00\\CAD外挂\\燕秀工具箱"
;"E:\\00\\CAD外挂"
;))
 楼主| 发表于 2013-5-20 08:24 | 显示全部楼层

;;;用加载本程序自动增加
;;;第一步,添加支持文件搜索路径:将c:xzh、c:xzh\\dwg、c:xzh\\bmp三个文件夹
   添加到支持文件搜索路径
;;;第二步,添加快速新建样板文件:将c:xzh\\xzh.dwt文件添加到快速新建样板文件里

;;;第三步,增加菜单:将c:xzh\\xzh.mns菜单文件增加

;;;第四步,将c:xzh\\yxm.vlx添加到启动组里
(defun c:jz (/ FROM SUPPORTLIST TO)
  (vl-load-com)
  ;;1  创建目录
  ;;用法: (vldos-mkdir DirectoryToCreate[STRING])
  ;;参数: 目录的全路径名. 此函数会自动创建参数中所有不存在的目录.
  ;;说明: 可创建多层目录.
  ;;返回值:[成功]创建目录的全路径名;[失败]: NIL
  (Defun vldos-MkDir (Folder / FolderX Fil FFF Pos DIR DRV)
    (if (null (setq Fil (vlax-get-or-create-object "Scripting.FileSystemObject")))
      (setq Folder nil)
      (progn (while (vl-string-search "/" Folder)
               (setq Folder (vl-string-subst "\\" "/" Folder))
             )
             (if (wcmatch Folder "*\\")
               (setq Folder (substr Folder 1 (1- (strlen Folder))))
             )
             (setq FolderX Folder)
             (while (setq Pos (vl-string-search "\\" Folder))
               (setq FFF    (cons (substr Folder 1 Pos) FFF)
                     Folder (substr Folder (+ Pos 2))
               )
             )
             (setq FFF (reverse (cons Folder FFF))
                   DRV (car FFF)
                   FFF (cdr FFF)
             )
             (foreach DIR FFF
               (if (null (vl-file-directory-p (setq DRV (strcat DRV "\\" DIR))))
                 (vlax-invoke-method Fil 'createfolder DRV)
               )
             )
             (vlax-release-object Fil)
             (if (setq Folder (vl-file-directory-p FolderX))
               (setq Folder (vldos-formatpath FolderX))
             )
      )
    )
    Folder
  )
  ;;2  转换路径中字符 "/" 为 "\\" 并返回大写值
  ;;用法: (vldos-formatpath PathStringToFormat[STRING])
  ;;参数1: 路径字符串
  ;;说明: 此函数转换字符 "/" 为 "\\".
  ;;返回值:[成功]: 转换后的字符串;[失败]: None
  (Defun vldos-formatpath (string)
    (while (vl-string-search "/" string) (setq string (vl-string-subst "\\" "/"
string)))
    (while (vl-string-search "[url=]\\\\[/url]" string)
      (setq string (vl-string-subst "\\" "[url=]\\\\[/url]" string))
    )
    (setq string (strcase string))
    string
  )
  ;;3  复制文件或目录
  ;;用法: (vldos-copy SourceFile/Directory[STRING] TargetFile/Directory[STRING])
  ;;参数1: 源文件或目录
  ;;参数2: 目标目录. 如果包含 "*\\" or "*/", 此函数将在此路径下创建相同的子目录.
  ;;说明:  复制文件或目录.
  ;;返回值:[成功]: 复制的文件或目录字符串;[失败]: NIL
  ;;例(vldos-copy2 "D:\\HH" "D:\\DD")此法将HH下的内容(包括文件夹),均放在DD下
  (Defun vldos-copy2 (From to / rtn)
    (cond ((vl-file-directory-p From)
           (if (< (strlen to) 3)
             (setq to (strcat to "\\"))
             (if (not (vl-file-directory-p to))
               (vldos-mkdir to)
             )
           )
           (if (setq Rtn (vlax-get-or-create-object "Scripting.FileSystemObject"))
             (progn (vlax-invoke-method Rtn 'CopyFolder From to T)
                    (vlax-release-object Rtn)
                    (if (vl-file-directory-p to)
                      (setq Rtn (vldos-formatpath to))
                    )
             )
           )
          )
          ((findfile From)
           (vl-file-copy From to)
           (if (setq rtn (findfile to))
             (setq rtn (vldos-formatpath rtn))
           )
          )
    )
    rtn
  )
  ;;4  解析字符串为表
  (defun strParse (Str Delimiter / SearchStr StringLen return n char)
    (setq SearchStr Str)
    (setq StringLen (strlen SearchStr))
    (setq return '())
    (while (> StringLen 0)
      (setq n 1)
      (setq char (substr SearchStr 1 1))
      (while (and (/= char Delimiter) (/= char ""))
        (setq n (1+ n))
        (setq char (substr SearchStr n 1))
      )
      (setq return (cons (substr SearchStr 1 (1- n)) return))
      (setq SearchStr (substr SearchStr (1+ n) StringLen))
      (setq StringLen (strlen SearchStr))
    )
    (reverse return)
  )
  ;;5 反解析表为字符串
  (defun StrUnParse (Lst Delimiter / return)
    (setq return "")
    (foreach str Lst (setq return (strcat return Delimiter str)))
    (substr return 2)
  )
  ;;6 移除支持文件搜索路径
  (defun QF_RemoveSupportPath (PathToRemove / supportlist)
    (setq supportlist (strparse (getenv "ACAD") ";"))
    (setq supportlist (vl-remove "" supportlist))
    (setq supportlist (vl-remove-if '(lambda (x) (= (strcase x) (strcase PathToRemove)))
                                    supportlist
                      )
    )
    (setenv "ACAD" (strUnParse supportlist ";"))
  )
  ;;7 添加支持文件搜索路径
  ;; 第二个参数如果为真, 插最前,否则插最后
  (defun AddSupportPath (PathToAdd isFirst / supportlist)
    (QF_RemoveSupportPath PathToAdd)
    (setq supportlist (strparse (getenv "ACAD") ";"))
    (setq supportlist (vl-remove "" supportlist))
    (if isFirst
      (setq supportlist (cons PathToAdd supportlist))
      (setq supportlist (append supportlist (list PathToAdd)))
    )
    (setenv "ACAD" (strUnParse supportlist ";"))
  )
  ;;8 在启动组加入
  ;; 示例(addToStartupSuite
  ;; "c:\\xzh\\yxm.vlx")
  (defun addToStartupSuite (filename / CT DEFAULT N NUMSTARTUP REGPATH REVISION VERSION)
    (setq regpath  "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD"
          revision (vl-registry-read regpath "CurVer")
          version  (vl-registry-read (setq regpath (strcat regpath "\\" revision))
"CurVer")
          default  (vl-registry-read (setq regpath (strcat regpath "\\" version
"\\Profiles")))
          regpath  (strcat regpath "\\" default "\\Dialogs\\Appload\\Startup")
          ct       1
    )
    (if (setq numstartup (vl-registry-read regpath "NumStartup"))
      (progn
        (setq n (1+ (atoi numstartup)))
        (while (and (< ct n)
                    (/= filename (vl-registry-read regpath (strcat (itoa ct)
"Startup")))
               )
          (setq ct (1+ ct))
        )
      )
      (setq n 1)
    )
    (if (= n ct)
      (progn (vl-registry-write regpath (strcat (itoa n) "Startup") filename)
             (vl-registry-write regpath "NumStartup" (itoa n))
      )
    )
  )
  ;;9 主程序
  ;;9.1第一步 拷贝到支持文件目录下.
  (if (not C:HH)
    (progn (setq From (getvar "dwgprefix"))
           (setq supportlist (strparse (getenv "ACAD") ";"))
           (setq to (car (vl-remove "" supportlist)))
           (vldos-copy2 From to)
    )
  )
  ;;9.2第二步 添加支持文件路径
  (if (not (findfile "c:xzh\\xzh.dwt"))
    (progn (AddSupportPath (strcat to "C:\\xzh") nil)
           (AddSupportPath (strcat to "C:\\xzh\\dwg") nil)
           (AddSupportPath (strcat to "C:\\xzh\\bmp") nil)
    )
  )
  ;;9.3 第三步,在启动组中添加路径   
  (addToStartupSuite (findfile "yxm.vlx"))
  ;;9.4  加载自定义菜单  
  (if (not (menugroup "xzh"))
    (command "menuload" "xzh.mns")
  )
  ;;9.5  自定义局部菜单放在倒数第三位
  (defun mccad-placemenu (/ CNT)
    (setq CNT 1)
    (while (< CNT 24)
      (if (menucmd (strcat "P" (itoa CNT) ".1=?"))
        (setq CNT (1+ CNT))
        (progn (if (> CNT 2)
                 (setq CNT (- CNT 2))
                 (setq CNT 2)
               )
               (menucmd (strcat "p" (itoa CNT) "=+xzh.pop12"))
               (menucmd (strcat "p" (itoa CNT) "=+xzh.pop13"))
               (menucmd (strcat "p" (itoa CNT) "=+xzh.pop14"))
               (menucmd (strcat "p" (itoa CNT) "=+xzh.pop15"))
               (menucmd (strcat "p" (itoa CNT) "=+xzh.pop16"))
               (setq CNT 25)
        )
      )
    )
  )
  (mccad-placemenu)
)
;;
(IF (and (NOT C:HH)
   (findfile "yxm.vlx"))
  (LOAD "yxm")
)

以上应如何修改才能,用加载的办法来实现呢?请高手指点
发表于 2016-3-7 01:07 | 显示全部楼层
顶下,留个记号,下次好找
发表于 2022-10-13 19:27 | 显示全部楼层
(vla-put-QNewTemplateFile
(vla-get-Files(vla-get-Preferences(vlax-get-acad-object)))
"c:\\xzh\\xzh.dwt"
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 12:44 , Processed in 0.306980 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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