找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1017|回复: 10

[LISP程序]:(分享+原创)新手接触lisp 的实用程序

[复制链接]
发表于 2004-4-14 11:11:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
[php](defun c:ss(/ 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: "))
    )
  );if ent
(setvar "clayer" lname)
(princ)
)

(defun c:cc(/ 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: "))
    )
   ) ;if ent
   (command "chprop" ss "" "la" lname "")
  )
)
(princ)
)

(defun c:xc( / os s1 s2 ss1 ss2 pt1 pt2 pt3 pt4 p01 p02 p12 p34);连接线段
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (setq s1 (entsel "\nPick the First Line:"))
  (if s1 (progn
    (redraw (setq s1 (car s1)) 3)
    (setq s2 (entsel "\nPick the Second Line:"))
  ))
  (if (and s1 s2)
    (progn
      (setq s2 (car s2))
      (redraw s1 3)
      (setq ss1 (entget s1))
      (setq ss2 (entget s2))
      (if (and (= (cdr (assoc 0 ss1)) "LINE" ) (= (cdr (assoc 0 ss2)) "LINE"))
        (progn
          (setq pt1 (cdr (assoc 10 ss1)) pt2 (cdr (assoc 11 ss1))
                pt3 (cdr (assoc 10 ss2)) pt4 (cdr (assoc 11 ss2))
                p01 (list (* 0.5 (+ (car pt1) (car pt2)))
                          (* 0.5 (+ (cadr pt1) (cadr pt2))))
                p02 (list (* 0.5 (+ (car pt3) (car pt4)))
                          (* 0.5 (+ (cadr pt3) (cadr pt4))))
          )
          (if (> (distance pt1 p02) (distance pt2 p02))
            (setq p12 pt1)
            (setq p12 pt2)
          )
          (if (> (distance pt3 p01) (distance pt4 p01))
            (setq p34 pt3)
            (setq p34 pt4)
          )
          (setq ss1 (subst (cons 10 p12) (assoc 10 ss1) ss1)
                ss1 (subst (cons 11 p34) (assoc 11 ss1) ss1))
          (entdel s2)
          (entmod ss1)
        ) ;progn
        (princ "\nPlease select Line!")
      ) ;if
      (redraw s1 4)
    ) ;progn
    (princ "\nPlease select entity!")
  ) ; if s1 s2
  (setvar "osmode" os)
  (princ)
) ; end xc



(defun c:s() (command "stretch" "C"))
(defun c:1() (command "zoom" "1.5x") (prin1))
(defun c:2() (command "zoom" "0.5x") (prin1))
(defun c:zz() (command "zoom" "p"))

(defun c:za() (command "zoom" "a"))
(defun c:zd() (command "zoom" "d"))
(defun c:ze() (command "zoom" "e"))
(defun c:-() (command "zoom" "0.5x"))
(defun c:+() (command "zoom" "2x"))
(defun c:lo() (setvar "cmdecho" 0) (command "layer" "on" "*" ""))
(defun c:lp( / 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)
  )) ;if ent
  (command "layer" "off" "*" "n" "")
  (princ)
)
(defun c:lk( / 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 ent
  (if (= (getvar "clayer") lname)
    (setvar "clayer" "0")
  )
  (command "layer" "off" lname "")
  (princ)
)
;以下程序 源自 Chstart
;改变物体到当前层,并使用层颜色,层的线型
(defun c:rr(/ lname ss )
     (setq ss (ssget))
        (if ss
            (progn
               (setq lname (getvar "clayer"))
               (command "chprop" ss "" "la"    lname
                                        "color" "bylayer"
                                        "ltype" "bylayer" "")
            )
        );if ss
)

;原点打断线段   
(defun c:BB()(setq p1 (getpoint "Select Break Point"))
       (command "break" p1 p1 "" )
)

;隐藏实体,通过regen 可以恢复显示,方便重复线段的选择
(defun c:ee()(setq ss (ssget))
                (setq i 0)
                (while (<= i (sslength ss))
                         (setq abc (ssname SS i))
                          (redraw abc 2)
                          (setq i (+ 1 i))
))[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-15 14:00:54 | 显示全部楼层
开卷有益!
得到不少提示!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-16 17:38:11 | 显示全部楼层
请问“原点打断线段  ”你测试了吗?好像不能用吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-16 19:43:37 | 显示全部楼层
可以啊。
我一直都在用这些命令。
break命令可以打断pline,arc,line,spline,不过圆不能直接从原点打断,得另外写程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1490个

财富等级: 财源广进

发表于 2004-4-29 14:48:40 | 显示全部楼层
我是新手,那些bylayer可以改的对吗?谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-7 11:03:22 | 显示全部楼层
对于我来说都是很好的东西,感谢分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-8 15:56:58 | 显示全部楼层
最初由 flowerson 发布
[B]我是新手,那些bylayer可以改的对吗?谢谢。 [/B]


“改的对”指得是什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-17 17:52:06 | 显示全部楼层
chstart ,你是不是在深圳啊?
好像我在深圳一公司的lisp程序,
我现在自制了好多lisp(结构方面的),
也有用到原来公司的程序.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-17 23:01:00 | 显示全部楼层
最初由 chstart 发布
请问“原点打断线段 ”你测试了吗?好像不能用吧
[B]可以啊。
我一直都在用这些命令。
break命令可以打断pline,arc,line,spline,不过圆不能直接从原点打断,得另外写程序。 [/B]


确实不行,反馈:
BB Select Break Point
Arc cannot be full 360 degreesUnknown command "BB".  Press F1 for help.
nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-18 07:43:38 | 显示全部楼层
最初由 海豚 发布
[B][QUOTE]最初由 chstart 发布
请问“原点打断线段 ”你测试了吗?好像不能用吧
[B]可以啊。
我一直都在用这些命令。
break命令可以打断pline,arc,line,spline,不过圆不能直接从原点打断,得另外写程序?.. [/B]

程序是没有大问题,只是缺乏必要的判断,在一些特殊情况下会出错,或者说程序不够健壮。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-19 11:14:11 | 显示全部楼层
最初由 david96007 发布
[B]开卷有益!
得到不少提示! [/B]

谢楼住发布
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 03:42 , Processed in 0.650483 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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