CAD插件源文件修改线宽度免费学习

在CAD中只有多段线可以设置宽度、直线、圆、弧、样条曲线都无法设置宽度,要想设置宽度,还需要将这些图形转换成多段线,圆用编辑多段线PE命令还没法直接转换。
在网上看到一个插件,可以直接选择多段线、直线、圆和弧后设置宽度,省略了转换的步骤,不知道大家能不能用得上,在这里分享给大家。
百度网盘分享被百度屏蔽了,下面直接将代码发给大家,大家复制粘贴到写字版中,另存为PW.LSP或其他文件名的LSP文件。
代码如下:
(defun pw_err (s)
 (princ “\n命令中止!”)
 (command “ucs” “restore” “recent” ^c)
 (if sset
   (progn
     (setq sscnt (sslength sset))
     (while (> sscnt 0)
   (redraw (ssname sset (setq sscnt (1- sscnt))) 4)
     )
   )
 )
 (setvar “clayer” old_clayer)
 (setvar “cecolor” old_cecolor)
 (setvar “celtype” old_celtype)
 (setvar “celtscale” old_celtscale)
 (setvar “osmode” old_osmode)
 (setvar “dimzin” old_dimzin)
 (setvar “blipmode” old_blipmode)
 (setq *error* old_err)
 (gc)
 (princ)
)

(expand 5)
(defun c:pw ()
 (command “_.undo” “_begin”)
 (setq    old_err    *error*
   *error*    pw_err
 )
 (princ
   “”
 )
 (setq old_clayer (getvar “clayer”))
 (setq old_cecolor (getvar “cecolor”))
 (setq old_celtype (getvar “celtype”))
 (setq old_celtscale (getvar “celtscale”))
 (setq old_osmode (getvar “osmode”))
 (setq old_dimzin (getvar “dimzin”))
 (setq old_blipmode (getvar “blipmode”))
 (setvar “cmdecho” 0)
 (setvar “osmode” 0)
 (setvar “dimzin” 8)
 (setvar “blipmode” 0)

 (if (= (tblsearch “ucs” “recent”) nil)
   (command “ucs” “save” “recent” ^c)
   (command “ucs” “save” “recent” “y” ^c)
 )
 (command “ucs” “” ^c)

 (setq sset (ssget))
 (if (null sset)
   (progn
     (princ “\n未选择到物体!”)
     (exit)
   )
 )

 (setq    sscnt     (sslength sset)
   lwplsset (ssadd)
   plsset     (ssadd)
   lsset     (ssadd)
   arcsset     (ssadd)
   ccsset     (ssadd)
 )

 (while (> sscnt 0)
   (setq temp (ssname sset (setq sscnt (1- sscnt))))
   (setq temptype (cdr (assoc 0 (entget temp))))
   (cond (
      (= temptype “LWPOLYLINE”)
      (ssadd temp lwplsset)
     )
     (
      (= temptype “POLYLINE”)
      (ssadd temp plsset)
     )
     (
      (= temptype “LINE”)
      (ssadd temp lsset)
     )
     (
      (= temptype “ARC”)
      (ssadd temp arcsset)
     )
     (
      (= temptype “CIRCLE”)
      (ssadd temp ccsset)
     )
   )
 )

 (setq lwplsscnt (sslength lwplsset))
 (setq plsscnt (sslength plsset))
 (setq lsscnt (sslength lsset))
 (setq arcsscnt (sslength arcsset))
 (setq ccsscnt (sslength ccsset))

 (if (and (= lwplsscnt 0)
      (= plsscnt 0)
      (= lsscnt 0)
      (= arcsscnt 0)
      (= ccsscnt 0)
     )
   (progn (princ
        “\n未选择到任何有效的 (LW)POLYLINE、LINE、ARC 或 CIRCLE!”
      )
      (exit)
   )
 )

 (princ (strcat “\n统计: 选中 ”
        (itoa lwplsscnt)
        ” 个 LWPOLYLINE,”
        (itoa plsscnt)
        ” 个 POLYLINE,”
        (itoa lsscnt)
        ” 个 LINE,”
        (itoa arcsscnt)
        ” 个 ARC,”
        (itoa ccsscnt)
        ” 个 CIRCLE.\n”
    )
 )

 (while (> lwplsscnt 0)
   (redraw (ssname lwplsset (setq lwplsscnt (1- lwplsscnt))) 3)
 )
 (while (> plsscnt 0)
   (redraw (ssname plsset (setq plsscnt (1- plsscnt))) 3)
 )
 (while (> lsscnt 0)
   (redraw (ssname lsset (setq lsscnt (1- lsscnt))) 3)
 )
 (while (> arcsscnt 0)
   (redraw (ssname arcsset (setq arcsscnt (1- arcsscnt))) 3)
 )
 (while (> ccsscnt 0)
   (redraw (ssname ccsset (setq ccsscnt (1- ccsscnt))) 3)
 )

 (setq plwid (getvar “plinewid”))
 (initget 4)
 (setq    input (getreal (strcat “\n请输入多段线宽度 <”
                  (rtos (getvar “plinewid”)2 5)
                  “>:”
              )
         )
 )

 (if input
   (setq plwid input)
 )

 (setvar “plinewid” plwid)

 (setq lwplsscnt (sslength lwplsset))
 (setq plsscnt (sslength plsset))
 (setq lsscnt (sslength lsset))
 (setq arcsscnt (sslength arcsset))
 (setq ccsscnt (sslength ccsset))

 (while (> lwplsscnt 0)
   (command “pedit”
        (ssname lwplsset (setq lwplsscnt (1- lwplsscnt)))
        “w”
        plwid
        “”
        ^C^C
   )
 )

 (while (> plsscnt 0)
   (command “pedit”
        (ssname plsset (setq plsscnt (1- plsscnt)))
        “w”
        plwid
        “”
        ^C^C
   )
 )

 (while (> lsscnt 0)
   (command “pedit”
        (ssname lsset (setq lsscnt (1- lsscnt)))
        “”
        “w”
        plwid
        “”
        ^C^C
   )
 )

 (while (> arcsscnt 0)
   (command “pedit”
        (ssname arcsset (setq arcsscnt (1- arcsscnt)))
        “”
        “w”
        plwid
        “”
        ^C^C
   )
 )

 (while (> ccsscnt 0)
   (setq cc (ssname ccsset (setq ccsscnt (1- ccsscnt))))
   (setq cclist (entget cc))
   (setq ccdia (* (cdr (assoc 40 cclist)) 2))
   (setq centpt (cdr (assoc 10 cclist)))
   (setq cclayer (cdr (assoc 8 cclist)))
   (if    (assoc 62 cclist)
     (setq cccolor (itoa (cdr (assoc 62 cclist))))
   )
   (if    (assoc 6 cclist)
     (setq ccltype (cdr (assoc 6 cclist)))
   )
   (if    (assoc 48 cclist)
     (setq cclts (cdr (assoc 48 cclist)))
   )
   (entdel cc)

   (if    (> ccdia plwid)
     (progn
   (setq nj (- ccdia plwid))
   (setq njpluswid (+ ccdia plwid))
     )

     (progn
   (setq nj 0)
   (setq njpluswid ccdia)
   (princ “\n输入宽度大于或等于圆直径,将填充圆!”)
     )

   )

   (setvar “clayer” cclayer)
   (if    cccolor
     (setvar “cecolor” cccolor)
     (setvar “cecolor” “bylayer”)
   )
   (if    ccltype
     (setvar “celtype” ccltype)
     (setvar “celtype” “bylayer”)
   )
   (if    cclts
     (setvar “celtscale” cclts)
     (setvar “celtscale” 1)
   )
   (command “DONUT” nj njpluswid centpt “” ^c)
 )

 (command “ucs” “restore” “recent” ^c)

 (setq sscnt (sslength sset))
 (while (> sscnt 0)
   (redraw (ssname sset (setq sscnt (1- sscnt))) 4)
 )
 (setvar “clayer” old_clayer)
 (setvar “cecolor” old_cecolor)
 (setvar “celtype” old_celtype)
 (setvar “celtscale” old_celtscale)
 (setvar “osmode” old_osmode)
 (setvar “dimzin” old_dimzin)
 (setvar “blipmode” old_blipmode)
 (command “_.undo” “_end”)
 (gc)
 (princ)
)

使用方法如下:

1、输入AP,回车,加载下载的插件。

2、输入PW,回车,选择要转化的线后回车,如图所示。

CAD插件-修改线宽度
3、根据提示输入宽度后,回车,满足条件的线就被设置为指定宽度。此插件处理不了样条曲线。

CAD插件-修改线宽度

    为您推荐

    返回顶部
    首页
    电子图书
    视频教程
    搜索
    会员