明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1727|回复: 11

插件修改

[复制链接]
发表于 2021-8-15 08:40:37 | 显示全部楼层 |阅读模式
各位大神们,帮忙修改一下插件,让它默认为虚线[X]线型,颜色为6,不要每次都要输入X命令,太麻烦了

本帖子中包含更多资源

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

x
发表于 2021-8-15 15:27:29 | 显示全部楼层
tigcat 发表于 2021-8-15 14:45
楼主:1、虚线的线型名是“dash”还是什么?
2、现在的颜色是红色?不像要红色?



(defun c:kc (/ *error* ang l1 ltype mpt1 os out pt1 pt2 pt3 ptlst)
  (defun *error* (msg)
    (if        (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
      (setvar "OSMODE" os)
    )
    (princ)
  )
;;;;;;----------------------------------------------------
  (setq os (getvar "OSMODE"))
  (setvar "OSMODE" 1025)
;;;        (initget "X")
;;;        (setq pt1 (getpoint "\n第一点[虚线< X >]:"))
;;;        (cond
;;;                ((or (equal pt1 "x") (equal pt1 "X"))
  (while (setq pt1 (getpoint "\n第一点:"))
    (setq pt2        (getpoint pt1 "\n第二点[相邻点]:")
          pt3        (getcorner pt1 "\n第三点[对角点]:")
          L1        (distance pt1 pt2)
          ang        (angle pt2 pt1)
          mpt1        (polar pt3 ang (* 0.5 L1))
          ptlst        (list pt1 mpt1 pt2)
          Ltype        (vlax-for each
                          (vla-get-Linetypes
                            (vla-get-activedocument (vlax-get-acad-object))
                          )
                  (setq out (cons (vla-get-Name each) out))
                )
    )
    (if        (member "JIS_09_15" ltype)
      (entmake (append
                 (list '(0 . "LWPOLYLINE")
                       '(100 . "AcDbEntity")
                       '(100 . "AcDbPolyline")
                       (cons 6 "JIS_09_15")
                       (cons 62 6)
                       (cons 90 (length ptlst))
                 )
                 (mapcar '(lambda (x) (cons 10 x)) ptlst)
               )
      )
      (progn
        (vla-Load (vla-get-Linetypes
                    (vla-get-ActiveDocument (vlax-get-acad-object))
                  )
                  "JIS_09_15"
                  (findfile "acadiso.lin")
        )
        (entmake (append
                   (list '(0 . "LWPOLYLINE")
                         '(100 . "AcDbEntity")
                         '(100 . "AcDbPolyline")
                         (cons 6 "JIS_09_15")
                         (cons 62 6)
                         (cons 90 (length ptlst))
                   )
                   (mapcar '(lambda (x) (cons 10 x)) ptlst)
                 )
        )
      )
    )
  )
;;;                )
;;;                (T
;;;                        (while pt1
;;;                                (setq pt2 (getpoint pt1 "\n第二点[相邻点]:")
;;;                                        pt3 (getcorner pt1 "\n第三点[对角点]:")
;;;                                        L1 (distance pt1 pt2)
;;;                                        ang (angle pt2 pt1)
;;;                                        mpt1 (polar pt3 ang (* 0.5 L1))
;;;                                        ptlst (list pt1 mpt1 pt2)
;;;                                )
;;;                                (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length ptlst))) (mapcar '(lambda (x) (cons 10 x)) ptlst)))
;;;                                (setq pt1 (getpoint "\n第一点:"))
;;;                        )
;;;                )

  (setvar "OSMODE" os)
  (princ)
)
回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-16 21:08:27 | 显示全部楼层
l982414603 发表于 2021-8-16 08:11
感谢,就是要这种效果,请问怎么设置线宽为0.09

  1. ;202108162107修改
  2. (defun c:kc (/ *error* ang l1 ltype mpt1 os out pt1 pt2 pt3 ptlst os1)
  3.   (defun *error* (msg)
  4.     (if        (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
  5.       (progn
  6.       (setvar "OSMODE" os)
  7.       (setvar "PLINEWID" os1)
  8.       )
  9.     )
  10.     (princ)
  11.   )
  12. ;;;;;;----------------------------------------------------
  13.   (setq os (getvar "OSMODE"))
  14.     (setq os1 (getvar "plinewid"))
  15.   (setvar "OSMODE" 1025)
  16. ;;;    (setvar "plinewid" 0.09)
  17. ;;;        (initget "X")
  18. ;;;        (setq pt1 (getpoint "\n第一点[虚线< X >]:"))
  19. ;;;        (cond
  20. ;;;                ((or (equal pt1 "x") (equal pt1 "X"))
  21.   (while (setq pt1 (getpoint "\n第一点:"))
  22.     (setq pt2        (getpoint pt1 "\n第二点[相邻点]:")
  23.           pt3        (getcorner pt1 "\n第三点[对角点]:")
  24.           L1        (distance pt1 pt2)
  25.           ang        (angle pt2 pt1)
  26.           mpt1        (polar pt3 ang (* 0.5 L1))
  27.           ptlst        (list pt1 mpt1 pt2)
  28.           Ltype        (vlax-for each
  29.                           (vla-get-Linetypes
  30.                             (vla-get-activedocument (vlax-get-acad-object))
  31.                           )
  32.                   (setq out (cons (vla-get-Name each) out))
  33.                 )
  34.     )
  35.     (if        (member "JIS_09_15" ltype)
  36.       (entmake (append
  37.                  (list '(0 . "LWPOLYLINE")
  38.                        '(100 . "AcDbEntity")
  39.                        '(100 . "AcDbPolyline")
  40.                        (cons 6 "JIS_09_15")
  41.                        (cons 62 6)
  42.                        (cons 43 0.09)
  43.                        (cons 90 (length ptlst))
  44.                  )
  45.                  (mapcar '(lambda (x) (cons 10 x)) ptlst)
  46.                )
  47.       )
  48.       (progn
  49.         (vla-Load (vla-get-Linetypes
  50.                     (vla-get-ActiveDocument (vlax-get-acad-object))
  51.                   )
  52.                   "JIS_09_15"
  53.                   (findfile "acadiso.lin")
  54.         )
  55.         (entmake (append
  56.                    (list '(0 . "LWPOLYLINE")
  57.                          '(100 . "AcDbEntity")
  58.                          '(100 . "AcDbPolyline")
  59.                          (cons 6 "JIS_09_15")
  60.                          (cons 43 0.09)
  61.                          (cons 62 6)
  62.                          (cons 90 (length ptlst))
  63.                    )
  64.                    (mapcar '(lambda (x) (cons 10 x)) ptlst)
  65.                  )
  66.         )
  67.       )
  68.     )
  69.   )
  70. ;;;                )
  71. ;;;                (T
  72. ;;;                        (while pt1
  73. ;;;                                (setq pt2 (getpoint pt1 "\n第二点[相邻点]:")
  74. ;;;                                        pt3 (getcorner pt1 "\n第三点[对角点]:")
  75. ;;;                                        L1 (distance pt1 pt2)
  76. ;;;                                        ang (angle pt2 pt1)
  77. ;;;                                        mpt1 (polar pt3 ang (* 0.5 L1))
  78. ;;;                                        ptlst (list pt1 mpt1 pt2)
  79. ;;;                                )
  80. ;;;                                (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length ptlst))) (mapcar '(lambda (x) (cons 10 x)) ptlst)))
  81. ;;;                                (setq pt1 (getpoint "\n第一点:"))
  82. ;;;                        )
  83. ;;;                )

  84.   (setvar "OSMODE" os)
  85.     (SETVAR "plinewid" os1)
  86.   (princ)
  87. )
  88.   (prompt "\n******程序运行命令<kc>******")
  89.   (prin1)
发表于 2021-8-15 14:45:28 | 显示全部楼层
楼主:1、虚线的线型名是“dash”还是什么?
2、现在的颜色是红色?不像要红色?
发表于 2021-8-15 19:50:30 | 显示全部楼层
另外来一个简单版,没加入循环处理,局部变量,出错处理,线型若不存在也没有加载行为.楼主自行更改下.
  1. (defun c:tt ()
  2.   (setvar "cmdecho" 0)
  3.   (setq oldos (getvar 'osmode))
  4.   (setvar 'osmode 0)
  5.   (princ "\n选择画框的多段线(仅研究4条边4个顶点的情况):")
  6.   (setq en (entsel))
  7.   (setq pt (cadr en))
  8.   (setq ptm (osnap pt "mid"))
  9.   ;;;(setq en (ssname (ssget ":s:e" '((0 . "LWPOLYLINE"))) 0))
  10.   (setq en_data (entget (car en)))
  11.   (setq ptv nil)
  12.   (foreach x en_data
  13.     (if  (= (car x) 10)
  14.       (setq ptv (cons (cdr x) ptv))
  15.     )
  16.   )
  17.   (setq vt1 (nth 0 ptv))
  18.   (setq vt2 (nth 1 ptv))
  19.   (setq vt3 (nth 2 ptv))
  20.   (setq vt4 (nth 3 ptv))
  21.   (cond ( (equal (angle ptm vt4) (angle vt3 vt4) 1e-5)
  22.    (setq ptj1 vt1)
  23.    (setq ptj2 vt2)
  24.    )
  25.   ( (equal (angle ptm vt2) (angle vt1 vt2) 1e-5)
  26.    (setq ptj1 vt3)
  27.    (setq ptj2 vt4)
  28.    )
  29.          ( (equal (angle ptm vt3) (angle vt2 vt3) 1e-5)
  30.    (setq ptj1 vt4)
  31.    (setq ptj2 vt1)
  32.    )
  33.    ( (equal (angle ptm vt1) (angle vt4 vt1) 1e-5)
  34.    (setq ptj1 vt2)
  35.    (setq ptj2 vt3)
  36.    )
  37.   ) ;|end cond|;
  38.   (setq ptlst (list ptj1 ptm ptj2))
  39.   (entmake (append
  40.      (list '(0 . "LWPOLYLINE")
  41.            '(100 . "AcDbEntity")
  42.            '(100 . "AcDbPolyline")
  43.            (cons 6 "dash")
  44.            (cons 62 6)
  45.            (cons 90 (length ptlst))
  46.      )
  47.      (mapcar '(lambda (x) (cons 10 x)) ptlst)
  48.          )
  49.       )
  50. ;;;  (c:tt)
  51.   (prin1)   
  52. )

发表于 2021-8-15 19:58:40 | 显示全部楼层
tigcat 发表于 2021-8-15 19:50
另外来一个简单版,没加入循环处理,局部变量,出错处理,线型若不存在也没有加载行为.楼主自行更改下.

最后觉得你直接画多段线不是更快,直接选好颜色线型,点3个点不就出来一个多段线,要这代码费事?
 楼主| 发表于 2021-8-16 08:11:45 | 显示全部楼层
tigcat 发表于 2021-8-15 15:27
(defun c:kc (/ *error* ang l1 ltype mpt1 os out pt1 pt2 pt3 ptlst)
  (defun *error* (msg)
   ...

感谢,就是要这种效果,请问怎么设置线宽为0.09
 楼主| 发表于 2021-8-17 08:52:09 | 显示全部楼层

感谢,就是要这样的效果
发表于 2021-8-17 09:43:07 | 显示全部楼层
要点3次鼠标,感觉意义不大。
发表于 2021-8-17 09:47:17 来自手机 | 显示全部楼层
本帖最后由 Myday 于 2021-8-17 09:49 编辑

同意楼上,太麻烦,我做的是靠近那一侧,点一下就可以绘制。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-25 12:44 , Processed in 0.175626 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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