明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1128|回复: 5

[经验] 快速制作并加载线型

[复制链接]
发表于 2024-6-15 21:27:24 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2024-10-2 16:36 编辑

  1. (DEFUN $xian-xing-zi-ding-yi2$ (LST                 /
  2.                                 $jia-zai-xian-xing$
  3.                                 $make-lin$         $write-lin$
  4.                                )
  5.                                         ;文字线型自定义
  6.                                         ;($xian-xing-zi-ding-yi2$(list (cons "字串"(list "-五星出东方-" "周伯通" "-7-")) (cons "间隔" nil)))
  7.   (defun $jia-zai-xian-xing$ (lin-path xxm / LinPath)
  8.                                         ;这里的线型是加载单线型  
  9.     (if        xxm
  10.       (if (tblobjname "LTYPE" xxm)
  11.         ()
  12.         (progn
  13.           (or (and lin-path (setq linpath (findfile lin-path)))
  14.               (setq linpath (findfile "zx.lin"))
  15.           )
  16.           (if
  17.             (not
  18.               (vl-catch-all-error-p
  19.                 (vl-catch-all-apply
  20.                   'vla-load
  21.                   (list
  22.                     (vla-get-Linetypes
  23.                       (vla-get-ActiveDocument
  24.                         (vlax-get-acad-object)
  25.                       )
  26.                     )
  27.                     xxm
  28.                     (vl-catch-all-apply 'findfile (LIST LinPath))
  29.                   )
  30.                 )
  31.               )
  32.             )
  33.              (tblobjname "LTYPE" xxm)
  34.           )
  35.           (IF (NOT (tblobjname "LTYPE" xxm))
  36.             (PROGN
  37.               (if (= (GETVAR 'PRODUCT) "ZWCAD")
  38.                 (setq linpath (FINDFILE "zwcadiso.lin"))
  39.                 (setq linpath (FINDFILE "acadiso.lin"))
  40.               )
  41.               (if
  42.                 (not
  43.                   (vl-catch-all-error-p
  44.                     (vl-catch-all-apply
  45.                       'vla-load
  46.                       (list
  47.                         (vla-get-Linetypes
  48.                           (vla-get-ActiveDocument
  49.                             (vlax-get-acad-object)
  50.                           )
  51.                         )
  52.                         xxm
  53.                         (findfile LinPath)
  54.                       )
  55.                     )
  56.                   )
  57.                 )
  58.                  (tblobjname "LTYPE" xxm)
  59.               )
  60.             )
  61.           )
  62.         )
  63.       )
  64.       (print "$jia-zai-xian-xing$  遇到空值")
  65.     )
  66.     (IF        xxm
  67.       (tblobjname "LTYPE" xxm)
  68.     )
  69.   )
  70.   (defun $make-lin$
  71.                     (str             lst    /             box     cadrlst carlst
  72.                      jg             L             LIN-STR relst   str-box-l
  73.                      strs
  74.                     )
  75.     (vl-catch-all-apply
  76.       'vla-put-Height
  77.       (list
  78.         (vla-item
  79.           (vla-get-TextStyles
  80.             (vla-get-ActiveDocument (vlax-get-acad-object))
  81.           )
  82.           "Standard"
  83.         )
  84.         0.0
  85.       )
  86.     )
  87.     (setq h 2.54)
  88.     (setq box (textbox (list (cons 1 str)
  89.                              (cons 7 "Standard")
  90.                              (cons 40 H)
  91.                              (cons 41 1.0)
  92.                        )
  93.               )
  94.     )
  95.     (setq str-box-L (ABS (APPLY '- (MAPCAR 'CAR BOX))))
  96.     (if        (AND str)
  97.       (progn
  98.         (SETQ LIN-STR (STRCAT "*" STR))
  99.         (SETQ LIN-STR (STRCAT LIN-STR "\n"))
  100.         (SETQ LIN-STR (STRCAT LIN-STR "A,"))
  101.         (or (and (SETQ JG (CDR (ASSOC "间隔" LST)))
  102.                  (member (type jg) (list 'int 'real))
  103.                  (> jg 0)
  104.                  (setq jg (vl-princ-to-string jg))
  105.                  (SETQ
  106.                    LIN-STR (STRCAT LIN-STR jg)
  107.                  )
  108.             )
  109.             (SETQ
  110.               LIN-STR (STRCAT LIN-STR
  111.                               (VL-PRINC-TO-STRING (* str-box-L 1.25))
  112.                       )
  113.             )
  114.         )
  115.         (SETQ LIN-STR (STRCAT LIN-STR ",-0.1,["))
  116.         (SETQ LIN-STR (STRCAT LIN-STR (VL-PRIN1-TO-STRING STR)))
  117.         (SETQ
  118.           LIN-STR
  119.            (STRCAT LIN-STR
  120.                    ",Standard,S=2.54,R=0.0,X=0.0,Y=-"
  121.                    (VL-PRIN1-TO-STRING (* h 0.5))
  122.                    "],"
  123.            )
  124.         )
  125.         (SETQ
  126.           LIN-STR
  127.            (STRCAT
  128.              LIN-STR
  129.              (strcat "-"
  130.                      (VL-PRINC-TO-STRING (+ str-box-L (* h 0.10)))

  131.              )
  132.            )
  133.         )
  134.       )
  135.     )
  136.     LIN-STR
  137.   )
  138.   (defun $write-lin$ (lin-path str / f lin-path)
  139.     (setq lin-path (strcat (getenv "temp") "\\zx.lin"))
  140.     (if        (and lin-path (findfile lin-path))
  141.       (vl-file-delete lin-path)
  142.     )
  143.     (PROGN
  144.       (SETQ F (open lin-path "W"))
  145.       (IF F
  146.         ()
  147.         (SETQ lin-path NIL)
  148.       )
  149.       (AND F (CLOSE F))
  150.       (SETQ F NIL)
  151.     )
  152.     (and lin-path (setq f (open lin-path "a")))
  153.     (and str f (write-line str f))
  154.     (and f (close f))
  155.     (IF        F
  156.       lin-path
  157.     )
  158.   )
  159.   (setq LIN-NAMES (cdr (assoc "字串" lst)))
  160.   (if (= (type LIN-NAMES) 'str)
  161.     (setq LIN-NAMES (list LIN-NAMES))
  162.   )
  163.   (MAPCAR
  164.     (FUNCTION
  165.       (LAMBDA (LIN-NAME)       
  166.         (IF ($jia-zai-xian-xing$ lin-path LIN-NAME)
  167.           ()
  168.           (PROGN
  169.             ($jia-zai-xian-xing$
  170.               ($write-lin$ lin-path ($make-lin$ LIN-NAME  lst))
  171.               LIN-NAME
  172.             )
  173.           )
  174.         )
  175.       )
  176.     )
  177.     LIN-NAMES
  178.   )
  179. )
  180. (defun str->chrlist (str / lst carlst cadrlst relst)
  181.                                         ;字符串转表,不是分割成表,不是分隔成表
  182.                                         ;(str->chrlist "数字123字母abc符号℃√⒙⑼<>《》()【】﹝﹞≮≯")(str->chrlist "")
  183.   (AND str (setq lst (vl-string->list str)))
  184.   (while lst
  185.     (setq carlst (car lst))
  186.     (setq cadrlst (cadr lst))
  187.     (if        (< carlst 129)
  188.       (progn (setq relst (cons (list carlst) relst))
  189.              (setq lst (cdr lst))
  190.       )
  191.       (progn (setq relst (cons (list carlst cadrlst) relst))
  192.              (setq lst (cddr lst))
  193.       )
  194.     )
  195.   )
  196.   (IF relst
  197.     (mapcar 'vl-list->string (reverse relst))
  198.   )
  199. )
  200. (vla-purgeall
  201.   (vla-get-activedocument (vlax-get-acad-object))
  202. )


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-15 22:25:11 | 显示全部楼层
感谢大佬的无私奉献
发表于 2024-6-15 22:43:02 | 显示全部楼层
这是一个完整的lisp吗
发表于 2024-6-17 08:32:38 | 显示全部楼层
感谢大佬的无私奉献
发表于 2024-6-18 08:12:14 | 显示全部楼层
收下了,谢谢
发表于 2024-6-18 17:19:11 | 显示全部楼层
厉害厉害,学到了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:29 , Processed in 0.157507 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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