找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4032|回复: 6

[每日一码] (完整路径)改(相对路径)LSP,好像用不了,有大神能完善一下吗?

[复制链接]
发表于 2018-1-5 10:54:48 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 newer 于 2018-1-5 12:19 编辑

;;;;参照图块路径改为“相对路径” 且 自动重载XREF ---- 支持子目录

  1. ;;;;参照图块路径改为“相对路径” 且 自动重载XREF ---- 支持子目录
  2. (defun C:Tools-BLK-XrefPathAutoLoad
  3.        (/ ssg xpath i obj enl elist blkdef path n Sub_Path)
  4.   (setq ssg (ssget "x" '((0 . "insert"))))
  5.   (setq XPath (getvar "dwgprefix")) ;_取得当前文档路径
  6.   (setq i 0)
  7.   (setq n 0)
  8.   (if ssg
  9.     (repeat (sslength ssg)
  10.       (setq obj
  11.              (vla-item (vla-get-blocks
  12.                          (vla-get-activedocument (vlax-get-acad-object))
  13.                        )
  14.                        (cdr (assoc 2 (setq enl (entget (ssname ssg i)))))
  15.              )
  16.       )
  17.       (if (= (vla-get-isxref obj) :vlax-true) ;_判断给定的图块是否为XRef图块
  18.         (progn ;;(vla-put-path obj (strcat xpath (vla-get-name obj) ".dwg"));_参照图块路径改为“绝对路径
  19.                (setq elist (entget (tblobjname "block" (cdr (assoc 2 enl))))) ;_获取参照图块的图元表
  20.                (setq blkdef (vlax-ename->vla-object (cdr (assoc 330 elist))))
  21.                (setq path (vla-get-path blkdef)) ;_取得外部参照的路径
  22.                (setq m (vl-string-mismatch XPath path 0 0 t)) ;_前面有多少个相同的字符
  23.                (setq Sub_Path (substr path (1+ m)))
  24.                                         ;获取图块参照路径的子串
  25.                (vla-put-path blkdef (strcat ".\\" Sub_Path)) ;_参照图块路径改为“相对路径”
  26.                (setq n (1+ n))
  27.         )
  28.       )
  29.       (setq i (1+ i))
  30.     )
  31.   )
  32.   (if (> n 0)
  33.     (progn (command "_xref" "r" "*")
  34.            (prompt (strcat "\n总共有 \" "
  35.                            (itoa n)
  36.                            " \"个参照物体路径改为相对路径."
  37.                    )
  38.            )
  39.     )
  40.     (princ "\n**** 没有外部参照 或 外部参照没有加载 ****")
  41.   )
  42.   (princ)
  43. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2018-1-5 10:59:10 | 显示全部楼层
本帖最后由 newer 于 2018-1-5 12:21 编辑

;这几天修改别人的图,被参照图的绝对路径搞的很烦,一怒之下,写了一个改参照绝对路径为相对路径的lisp,还不够完满,运行效率不高,望高手帮修改指教.
  1. (defun c:xfx (/            ss          ffg        k     path  files path2        path3 tmq
  2.               m            m2          n        n2    total tst          temp        xpath i
  3.               obj
  4.              )
  5.   (vl-load-com)
  6.   (defun ffg-getfolder
  7.          (msg startpath / winshell shfolder ffg path1 catchit)
  8.     (setq winshell (vlax-create-object "Shell.Application"))
  9.     (setq shfolder (vlax-invoke-method
  10.                      winshell          'browseforfolder
  11.                      0                  msg               1
  12.                      startpath
  13.                     )
  14.     )
  15.     (setq
  16.       catchit (vl-catch-all-apply
  17.                 '(lambda ()
  18.                    (setq shfolder (vlax-get-property shfolder 'self))
  19.                    (setq path1 (vlax-get-property shfolder 'path))
  20.                  )
  21.               )
  22.     )
  23.     (if        (vl-catch-all-error-p catchit)
  24.       nil
  25.       path1
  26.     )
  27.   )
  28.   (setvar "cmdecho" 0)                        ;主程序
  29.   (setq        tst nil
  30.         m   0
  31.         ss  (ssget "x" '((0 . "insert")))
  32.   )
  33.   (setq ffg (getvar "dwgprefix"))        ;获取当前文件路径,
  34.   (setq k (vl-string-position 92 ffg 3 nil))
  35.                                         ;查找第二个"\",减少选择路径对话框展开层数(删除硬盘符号和第一级目录),不会有人把文件放在硬盘根目录吧?
  36.   (setq        path (ffg-getfolder
  37.                "请选择参照文件所在的目录:"
  38.                (substr ffg 1 k)
  39.              )
  40.   )                                        ;获取参照目录
  41.   (setq files (vl-directory-files path "*.dwg" 1)) ;列出目录下所有文件
  42.   (setq m (vl-string-mismatch ffg path 0 0)) ;前面有多少个相同的字符
  43.   (if (>= m (strlen ffg))
  44.     (progn (setq tst t)) ;_ 结束prgon
  45.     (progn (setq n     0
  46.                  n2    0
  47.                  path3 ""
  48.                  tmq   (substr path 1 m)
  49.            )                                ;参照路径前面相同部分
  50.            (setq path2 (vl-string-left-trim tmq ffg))
  51.                                         ;删除参照路径前面相同部分
  52.            (setq m2 (strlen path2))
  53.            (repeat m2
  54.              (setq temp (ascii (substr path2 (- m2 n) 1)))
  55.              (if (= temp 92)
  56.                (setq n2 (+ 1 n2))
  57.              ) ;_ 结束if
  58.              (setq n (+ 1 n))
  59.            ) ;_ 结束repeat
  60.            (repeat n2 (setq path3 (strcat ".." (chr 92) path3))) ;_ 结束repeat
  61.     ) ;_ 结束progn
  62.   ) ;_ 结束if
  63.   (if tst
  64.     (setq xpath (vl-string-left-trim ffg path))
  65.                                         ;删除参照前面的绝对路径,
  66.     (setq xpath (substr path (+ 1 m)))
  67.   )
  68.   (setq        i 0
  69.         total 0
  70.   )
  71.   (repeat (sslength ss)
  72.     (setq
  73.       obj (vla-item (vla-get-blocks
  74.                       (vla-get-activedocument (vlax-get-acad-object))
  75.                     )
  76.                     (cdr (assoc 2 (entget (ssname ss i))))
  77.           )
  78.     )
  79.     (if        (and (= (vla-get-isxref obj) :vlax-true)
  80.              (vl-position (strcat (vla-get-name obj) ".dwg") files)
  81.                                         ;参照图块是否在文件列表
  82.         )
  83.       (progn
  84.         (if (= xpath "")
  85.           (progn
  86.             (vla-put-path
  87.               obj
  88.               (strcat "." (chr 92) xpath (vla-get-name obj) ".dwg")
  89.             )
  90.           ) ;_ 结束progn
  91.           (progn
  92.             (if        tst
  93.               (vla-put-path
  94.                 obj
  95.                 (strcat        "."
  96.                         (chr 92)
  97.                         xpath
  98.                         (chr 92)
  99.                         (vla-get-name obj)
  100.                         ".dwg"
  101.                 )
  102.               )                                ;目录前面添加".\",目录后面添加"\"
  103.               (vla-put-path
  104.                 obj
  105.                 (strcat path3 xpath (chr 92) (vla-get-name obj) ".dwg")
  106.               )                                ;
  107.             ) ;_ 结束if
  108.           ) ;_ 结束progn
  109.         ) ;_ 结束if
  110.         (setq total (+ 1 total))
  111.       ) ;_ 结束progn
  112.     ) ;_ 结束if
  113.     (setq i (1+ i))
  114.   ) ;_ 结束repeat
  115.   (command "-xref" "r" "*")
  116.   (if (> total 0)
  117.     (prompt (strcat "\n总共有 \" "
  118.                     (itoa total)
  119.                     " \"个参照物体路径改为相对路径."
  120.             )
  121.     )
  122.     (prompt (strcat "\n未找到合适的参照物体路径!"))
  123.   )
  124.   (setvar "cmdecho" 1)
  125.   (princ)
  126. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-5 12:18:08 | 显示全部楼层
有问题,直接把遇到的情况描述清楚,比如哪里出错了,应该是什么等等。你认为效率不高,是哪里不高,有什么改进的想法?

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-5 12:21:58 | 显示全部楼层
另外,代码格式化后,请用论坛贴代码的方法贴源代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 194个

财富等级: 日进斗金

发表于 2018-1-5 16:04:08 | 显示全部楼层
适合参照块的还是参照图片的?论坛上好像有参照块的,没有参照图片的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-5 16:45:23 | 显示全部楼层

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2018-1-6 00:04:04 | 显示全部楼层
晓东工具箱太强大了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 12:06 , Processed in 0.395355 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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