明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1066|回复: 17

[提问] 请教如何用LISP获取CAD中的所有填充图案名

[复制链接]
发表于 2023-6-7 18:18 | 显示全部楼层 |阅读模式

请教各位大神、如何用lisp获取ANSI、ISO和其他预定义中的所有图案名、
自定义填充知道可以搜索关联路径下的pat文件。
预定义的不知道该如何搜索了

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-6-9 20:27 | 显示全部楼层
本帖最后由 edata 于 2023-6-9 20:33 编辑

  1. (defun parsepatfile  (fn / fd hp ln)
  2.   (if
  3.     (and
  4.       (setq fn (findfile fn))
  5.       (setq fd (open fn "r"))
  6.     )
  7.      (progn
  8.        (while  (setq ln (read-line fd))
  9.          (if (wcmatch ln "`**`,*")
  10.            (setq hp
  11.                   (cons
  12.                     (strcase (substr ln 2 (1- (vl-string-position 44 ln))))
  13.                     hp
  14.                   )
  15.            )
  16.          )
  17.        )
  18.        (close fd)
  19.        (reverse hp)
  20.      )
  21.   )
  22. )


  1. (parsepatfile (findfile (if (zerop (getvar 'MEASUREMENT)) "acad.pat" "acadiso.pat")))
复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-7 20:37 | 显示全部楼层
  1. ;;说明:获得图档中包含的填充图案列表
  2. ;;返回:填充图案列表
  3. (defun lm-get-hatchlist (/ lst )
  4.         (defun unique ( lst )
  5.                 (if lst (cons (car lst) (unique (vl-remove (car lst) (cdr lst)))))
  6.         )
  7.         (defun fixdir ( str )
  8.                 (vl-string-right-trim "\\" (vl-string-translate "/" "\\" str))
  9.         )
  10.         (defun parsesupportpaths ( str / pos )
  11.                 (if (setq pos (vl-string-position 59 str))
  12.                         (vl-remove "" (cons (substr str 1 pos) (parsesupportpaths (substr str (+ pos 2)))))
  13.                         (list str)
  14.                 )
  15.         )
  16.         (defun parsepatfile ( fn / fd hp ln )
  17.                 (if
  18.                         (and
  19.                                 (setq fn (findfile fn))
  20.                                 (setq fd (open fn "r"))
  21.                         )
  22.                         (progn
  23.                                 (while (setq ln (read-line fd))
  24.                                         (if (wcmatch ln "`**`,*")
  25.                                                 (setq hp (cons (strcase (substr ln 2 (1- (vl-string-position 44 ln)))) hp))
  26.                                         )
  27.                                 )
  28.                                 (close fd)
  29.                                 (reverse hp)
  30.                         )
  31.                 )
  32.         )
  33.        
  34.         (foreach dir (cons (getvar 'dwgprefix) (parsesupportpaths (getenv "ACAD")))
  35.                 (foreach pat (vl-directory-files dir "*.pat" 1)
  36.                         (setq lst (cons (parsepatfile (strcat (fixdir dir) "\\" pat)) lst))
  37.                 )
  38.         )
  39.         (vl-sort (unique (apply 'append lst)) '<)
  40. )
 楼主| 发表于 2023-6-7 20:58 | 显示全部楼层

你这个程序我在论坛里面搜到过、但是我想要的不是这个、我想要的就是截图那个对话框里面的填充图案名、主要是想判断某一个填充是否能用MA去刷
发表于 2023-6-7 21:30 | 显示全部楼层
本帖最后由 kucha007 于 2023-6-7 21:32 编辑
xiaocainiao 发表于 2023-6-7 20:58
你这个程序我在论坛里面搜到过、但是我想要的不是这个、我想要的就是截图那个对话框里面的填充图案名、主 ...

试试这样,抓取一下错误?
  1. (setq HPNam (cdr (Assoc 2 (Entget (car (nentsel))))))
  2. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'setvar (list "HPNAME" HPNam))))
  3.   (princ "\n图案存在")
  4.   (princ "\n图案不存在")
  5. )
  6. (princ)

发表于 2023-6-7 22:18 | 显示全部楼层

神光大侠哪里有您的身影,厉害了
发表于 2023-6-7 22:56 | 显示全部楼层
czb203 发表于 2023-6-7 22:18
神光大侠哪里有您的身影,厉害了

闲着没事就上来逛逛  嫖点代码
发表于 2023-6-7 22:57 | 显示全部楼层
  1. (defun c:ListHatchPatterns (/ ss i)
  2.   (setq ss (ssget "_X" '((0 . "HATCH"))))
  3.   (if ss
  4.     (progn
  5.       (setq i 0)
  6.       (while (< i (sslength ss))
  7.         (setq ent (ssname ss i))
  8.         (setq patname (cdr (assoc 2 (entget ent))))
  9.         (princ (strcat "\n" patname))
  10.         (setq i (1+ i))
  11.       )
  12.     )
  13.     (princ "\nNo hatch patterns found.")
  14.   )
  15.   (princ)
  16. )
发表于 2023-6-7 22:57 | 显示全部楼层
xiaocainiao 发表于 2023-6-7 20:58
你这个程序我在论坛里面搜到过、但是我想要的不是这个、我想要的就是截图那个对话框里面的填充图案名、主 ...

我测试的是对话框里面的都出来了
 楼主| 发表于 2023-6-8 09:05 | 显示全部楼层
飞雪神光 发表于 2023-6-7 22:57
我测试的是对话框里面的都出来了

对话框里面的会出来、但是一些用不了的填充也会出来、我主要是想要判断图纸中的某一个填充是否可以使用、你发到这个程序是获取文件中的所有填充
 楼主| 发表于 2023-6-8 09:06 | 显示全部楼层
kucha007 发表于 2023-6-7 21:30
试试这样,抓取一下错误?

我试了一下貌似不太行、不过还是非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 05:31 , Processed in 0.271909 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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