打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
几个有用的CAD的加载程序LISP

几个有用的CAD的加载程序LISP (2013-01-10 18:58:27)转载▼

标签: cad加载程序 杂谈 分类: CAD应用

1.图层命令

;;; -----------------------------------------------------------------

;;; 2 图层命令

;;; ------------------------------------------------------------------

;;;  2.1 LayerOff 关闭物体所在的层(单选)

(defun c:1 (/ ent lname)

 (setvar "cmdecho" 0)

 (setq ent (entsel "\nPick an entity on the target layer: "))

 (if ent

  (progn

   (setq ent (entget (car ent)))

   (setq lname (cdr (assoc 8 ent)))

  )

  (setq lname (getstring "\nNot to selected, Input layer name: "))

 )

 (if (= (getvar "clayer") lname)

  (setvar "clayer" "0")

 )

 (command "layer" "off" lname "")

 (princ)

)

;;;  2.2 LayerOffM 关闭物体所在的层(多选)

(Defun C:LayerOffM ()

 (setvar "cmdecho" 0)

 (prompt "\nSelect entities to turn off:")

 (setq ss (ssget))

 (if (and

    ss

    (sslength ss)

    0

   )

  (progn

   (setq ct 0

      len (sslength ss)

      cl (getvar "clayer")

   )

   (command ".layer")

   (while (< ct len)

    (setq la (cdr (assoc 8 (entget (ssname ss ct)))))

    (if (/= cl la)

     (command "off" la)

     (progn

      (prompt "\nThe layer")

      (prompt la)

      (prompt "is CURRENT!")

     )

    )

    (if (= old nil)

     (setq OLD la)

     (setq OLD (strcat OLD "," la))

    )

    (setq ct (1+ ct))

   )

   (command "")

  )

 )

 (princ)

 (setvar "cmdecho" 0)

 (prin1)

)

;;;  2.3 LayerOffOther 关闭物体以外的层

(defun c:LayerOffOther (/ ent lname)

 (setvar "cmdecho" 0)

 (setq ent (entsel "\nPick an entity on the target layer: "))

 (if ent

  (progn

   (setq ent (entget (car ent)))

   (setq lname (cdr (assoc 8 ent)))

   (setvar "clayer" lname)

  )

 )

 (command "layer" "off" "*" "n" "")

 (princ)

)

;;;  2.3.1 LayerOffOtherM 关闭物体以外的层(多选)

(Defun C:2 (/ ss ct cl la old)

 (setvar "cmdecho" 0)

 (prompt "\nSelect entities on the layers you want to remain:")

 (setq ss (ssget))

 (setq ct 0

    len (sslength ss)

    cl (cdr (assoc 8 (entget (ssname ss 0))))

 )

 (setvar "clayer" cl)

 (while (< ct len)

  (setq la (cdr (assoc 8 (entget (ssname ss ct)))))

  (if (= old nil)

   (setq OLD la)

   (setq OLD (strcat OLD "," la))

  )

  (setq ct (1+ ct))

 )

 (command ".layer" "off" "*" "n" "")

 (command ".layer" "on" old "")

 (princ)

)

;;; ------------------------------------------------------------------

;;;  2.4 LayerLockM 锁住物体所在的层(多选)

(defun C:4 (/ ES EN EL A)

 (princ "Selected Entity(s) Layers Locked.")

 (setq ES (ssget)

    A 0

    EN ""

    EL nil

    FL nil

 )

 (while (/= EN nil)

  (setq EN (ssname ES A)

     EL (cons EN EL)

     A (1+ A)

  )

 )

 (setq EL (cdr EL)

    FL (cdr (assoc '8 (entget (car EL))))

    EL (cdr EL)

 )

 (repeat (- A 2)

  (setq EN (cdr (assoc '8 (entget (car EL))))

     FL (strcat EN "," FL)

     EL (cdr EL)

  )

 )

 (command "LAYER" "LO" (eval FL) "")

 (princ)

)

;;;  2.5 LayerUnlockM 解锁物体所在的层(多选)

(defun C:5 (/ ES EN EL A)

 (princ "Selected Entity(s) Layers Unlocked.")

 (setq ES (ssget)

    A 0

    EN ""

    EL nil

    FL nil

 )

 (while (/= EN nil)

  (setq EN (ssname ES A)

     EL (cons EN EL)

     A (1+ A)

  )

 )

 (setq EL (cdr EL)

    FL (cdr (assoc '8 (entget (car EL))))

    EL (cdr EL)

 )

 (repeat (- A 2)

  (setq EN (cdr (assoc '8 (entget (car EL))))

     FL (strcat EN "," FL)

     EL (cdr EL)

  )

 )

 (command "LAYER" "U" (eval FL) "")

 (princ)

)

;;; ------------------------------------------------------------------

;;;  2.6 LayerFreezeM 冻结物体所在的层(多选)

(defun C:LayerFreezeM (/ ES EN EL A)

 (princ "Selected Entity(s) Layers Freezed.")

 (setq ES (ssget)

    A 0

    EN ""

    EL nil

    FL nil

 )

 (while (/= EN nil)

  (setq EN (ssname ES A)

     EL (cons EN EL)

     A (1+ A)

  )

 )

 (setq EL (cdr EL)

    FL (cdr (assoc '8 (entget (car EL))))

    EL (cdr EL)

 )

 (repeat (- A 2)

  (setq EN (cdr (assoc '8 (entget (car EL))))

     FL (strcat EN "," FL)

     EL (cdr EL)

  )

 )

 (command "LAYER" "F" (eval FL) "")

 (princ)

)

;;;  2.7 LayerThawAll 解冻所有的层

(Defun C:LayerThawAll ()

 (COMMAND "LAYER" "THAW" "*" "")

 (PRINC)

)

;;; ------------------------------------------------------------------

;;;  2.8 LayerCurrent 将物体所在的层设为当前层

(defun c:LayerCurrent (/ ent lname)

 (setvar "cmdecho" 0)

 (setq ent (car (entsel "\nPick an entity on the target layer: ")))

 (if ent

  (progn

   (setq ent (entget ent)

      lname (cdr (assoc 8 ent))

   )

  )

  (progn

   (setq lname (getstring "\nNot to selected, Input layer name: "))

  )

 )

 (setvar "clayer" lname)

 (princ)

)

;;; ------------------------------------------------------------------

;;;  2.9 LayerOnAll 打开所有层

(Defun C:3 ()

 (command "layer" "on" "*" "")

 (princ)

)

;;; ------------------------------------------------------------------

;;;  2.10 ToCurrentLayerM 将物体转到当前层(多选),并使用层颜色,线型

(defun c:ToCurrentLayerM (/ lname ss)

 (setq ss (ssget))

 (if ss

  (progn

   (setq lname (getvar "clayer"))

   (command "chprop" ss "" "la" lname "color" "bylayer" "ltype" "bylayer"

        ""

   )

  )

 )

)

;;; ------------------------------------------------------------------

;;;  2.11 ToLayerMatch 通过目标物体改变选择实体的图层属性

(defun c:ToLayerMatch (/ lname ss ent)

 (setvar "cmdecho" 0)

 (prompt "\nSelect the entity(s): ")

 (setq ss (ssget))

 (if ss

  (progn

   (setq ent (entsel "\nPick an entity on the target layer: "))

   (if ent

    (progn

     (setq ent (entget (car ent)))

     (setq lname (cdr (assoc 8 ent)))

    )

    (progn

     (setq lname (getstring "\nNot to selected, Input layer name: "))

    )

   )

   (command "chprop" ss "" "la" lname "")

  )

 )

 (princ)

)

快捷键1-掩藏图层  快捷键2-只显示选中图层  快捷键3-显示全部图层

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2.增强复制

;;;********************************************************图形矫正程序-jz

(defun c:cc (/ p1 p2 s e cn)

 ;__________________

  (defun ttt (ss n / m)

    (setq ee e

   ns (ssadd)

    )

    (while (setq ee (entnext ee))

      (setq ns (ssadd ee ns))

    )

    (command "erase" ns "")

    (command "copy" ss "" "m" "non" p1)

    (setq m 0)

    (repeat (atoi n)

      (setq m (1+ m))

      (cond

 ((= "/" (substr n (strlen n)))

  (command

    "non"

    (mapcar '(lambda (x y) (+ x (* m (/ (- y x) (atof n)))))

     p1

     p2

    )

  )

 )

 (t

  (command "non"

    (mapcar '(lambda (x y) (+ x (* m (- y x)))) p1 p2)

  )

 )

      )

    )

    (command)

  )

 ;__________________

    (princ "\n选择要复制的物体:")

  (setq s (ssget))

  (setq p1 (getpoint "\n复制的起点:"))

  (setq p2 (getpoint p1 "\n复制的终点:"))

  (setq e (entlast))

  (command "copy" s "" "non" p1 "non" p2)

  (while (/= 0

      (atof (setq cn (getstring "\n份数(以 / 结束为等分):")))

  )

    (ttt s cn)

  )

  (princ)

)

(defun c:c1 (/ p1 p2 s e cn a1 d1 ns cnn)

 ;__________________

  (defun ttt (ss n / m)

    (setq ee e

   ns (ssadd)

    )

    (while (setq ee (entnext ee))

      (setq ns (ssadd ee ns))

    )

    (command "erase" ns "")

    (command "copy" ss "" "m" "non" p1)

    (if (member (substr n (strlen n)) '("/" "*"))

      (progn

 (setq m 0)

 (repeat (atoi n)

   (setq m (1+ m))

   (cond

     ((= "/" (substr n (strlen n)))

      (command

        "non"

        (mapcar '(lambda (x y) (+ x (* m (/ (- y x) (atof n)))))

         p1

         p2

        )

      )

     )

     ((= "*" (substr n (strlen n)))

      (command "non"

        (mapcar '(lambda (x y) (+ x (* m (- y x)))) p1 p2)

      )

     )

   )

 )

      )

      (command "non" (setq p2 (polar p1 a1 (atof n))))

    )

    (command)

  )

 ;__________________

  (princ "\n选择要复制的物体:")

  (setq s (ssget))

  (setq p1 (getpoint "\n复制的起点:"))

  (command "undo" "be" "line" p1 p1 "")

  (setq e (entlast))

  (command "copy" s "" "non" p1 pause)

  (setq p2 (getvar "lastpoint")

 a1 (angle p1 p2)

 d1 (distance p1 p2)

  )

  (setq cn "1*")

  (while cn

    (ttt s cn)

    (initget 128)

    (princ

      "\n输入坐标=复制终点                         输入数值=修改间距 "

    )

    (princ

      "\n输入数值n并以 / 结束=间距内等分n次复制    输入数值n并以 * 结束=按间距复制n次 "

    )

    (setq cnn (getpoint "\n请按提示输入<退出>:"))

    (if (= 'LIST (type cnn))

      (setq p2 cnn

     a1 (angle p1 p2)

     d1 (distance p1 p2)

      )

      (setq cn cnn)

    )

  )

  (entdel e)

  (command "undo" "e")

  (princ)

)

(defun c:c2 (/ p1 p2 s e cn)

 ;__________________

  (defun ttt (ss n / m)

    (setq ee e

   ns (ssadd)

    )

    (while (setq ee (entnext ee))

      (setq ns (ssadd ee ns))

    )

    (command "erase" ns "")

    (command "copy" ss "" "m" "non" p1)

    (setq m 0)

    (repeat (atoi n)

      (setq m (1+ m))

      (cond

 ((= "/" (substr n (strlen n)))

  (command

    "non"

    (mapcar '(lambda (x y) (+ x (* m (/ (- y x) (atof n)))))

     p1

     p2

    )

  )

 )

 (t

  (command "non"

    (mapcar '(lambda (x y) (+ x (* m (- y x)))) p1 p2)

  )

 )

      )

    )

    (command)

  )

 ;__________________

  (princ "\n选择要复制的物体:")

  (setq s (ssget))

  (setq p1 (getpoint "\n复制的起点:"))

  (setvar "lastpoint" p1)

     ;(setq p2 (getpoint p1 "\n复制的终点:"))

  (setq e (entlast))

  (command "copy" s "" "non" p1 pause)

  (if (not (equal p1 (setq p2 (getvar "lastpoint"))))

    (while (/= 0

        (atof (setq cn (getstring "\n份数(以 / 结束为等分):")))

    )

      (ttt s cn)

    )

  )

  (princ)

)

;;;|增强拷贝

(defun c:c3 (/ getpt getpt1 ss ptx pty db n x y gtin)

  (setq getpt1 (acet-ss-drag-move

   (setq ss (ssget))

   (setq getpt (getpoint "\n&点取基点:"))

   1

        )

  )

  (setq ptx (- (car getpt1) (car getpt))

 pty (- (cadr getpt1) (cadr getpt))

 y   0

  )

  (vl-cmdf ".copy" ss "" getpt getpt1)

  (while (setq gtin (- (getint "\n重复次数:") 1))

    (vl-cmdf ".undo" "e")

    (if (/= y 0)

      (vl-cmdf ".u")

    )

    (setq n  1

   x  0

   db nil

    )

    (if (/= y 0)

      (vl-cmdf ".u")

    )

    (vl-cmdf ".undo" "be")

    (repeat gtin

      (setq db (cons (list (+ (* n ptx) (car getpt1))

      (+ (* n pty) (cadr getpt1))

      0.0

       )

       db

        )

      )

      (setq n (1+ n))

    )

    (repeat (length db)

      (vl-cmdf ".copy" ss "" getpt (nth x (reverse db)))

      (setq x (1+ x))

    )

    (vl-cmdf ".undo" "e")

    (vl-cmdf ".undo" "be")

    (setq y (1+ y))

  )

  (princ)

)

快捷键C1-等分复制  快捷键C2-多重复制

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

3.墙柱工具无敌(雨夜屠夫)

 VLX文件,自己上网搜索。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
entmake创建图元必要条件
增加AUTOCAD在文字处理上的功能
通用函数 选择集与列表的转换
几个CAD很有用的lisp程序_强劲动力
Z归零
【飞鸟集】UCS的变换矩阵及其逆变换矩阵
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服