找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2718|回复: 26

管道双断开符号,强烈表扬logo3490 ,佩服!!

[复制链接]
发表于 2006-10-18 23:02:28 | 显示全部楼层 |阅读模式

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

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

×
这个程序是生成管道的双断开线,样子详见附图!

最完美程序在15楼,非常佩服logo3490  !!强烈请求版主给予加分鼓励!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-10-19 16:54:38 | 显示全部楼层
你的这个程序只能从上到下选择点,而且两点连线的角度为90度才能成立。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-19 18:54:37 | 显示全部楼层
  1. (defun c:test (/)

  2.         (initget 1)(setq p1 (getpoint "\n First point: "))
  3.         (initget 1)(setq p2 (getpoint p1 "\n First point: "))


  4.         (if (/= 'REAL  (type logocad:pipe_size)) (setq logocad:pipe_size 100))

  5.         (setq
  6.                 msg                (strcat "\n PIPE SIZE <" (rtos logocad:pipe_size 2 2) ">: ")
  7.                 tmp                (getreal msg)
  8.         ) ; end setq
  9.         (if (and (not (null tmp))(numberp tmp)(> tmp 0)) (setq logocad:pipe_size tmp))

  10.         (setq
  11.                 ang                (angle p1 p2)
  12.                 perang1        (+ ang (/ pi 2.0))
  13.                 perang2        (- ang (/ pi 2.0))
  14.                 offsz        (/ logocad:pipe_size 2)
  15.                 dp1                (polar p1 perang1 offsz)
  16.                 dp2                (polar p2 perang1 offsz)
  17.                 dp3                (polar p1 perang2 offsz)
  18.                 dp4                (polar p2 perang2 offsz)
  19.                 plist        (list (list dp1 dp2) (list dp3 dp4))

  20.                 rdst        (/ logocad:pipe_size 4)
  21.                 ang1        (angle p1 dp1)
  22.                 ang2        (angle p1 p2)
  23.                 ang3        (angle p1 dp3)

  24.                 xdata        (list
  25.                                 (list p1 dp1 ang1 ang2 nil T)
  26.                                 (list p1 dp1 ang1 (+ pi ang2) T nil)
  27.                                 (list dp3 p1 ang1 ang2 nil nil)

  28.                                 (list p2 dp2 ang1 (+ pi ang2) T nil)
  29.                                 (list dp4 p2 ang1 (+ pi ang2) T T)
  30.                                 (list dp4 p2 ang1 ang2 nil nil)

  31.                                 ) ; end list

  32.                 rad                (* (- 1 0.125) rdst)
  33.         ) ; end setq

  34.         (foreach dat plist
  35.                 (entmake         (list
  36.                                         (cons 0         "LINE")
  37.                                         (cons 8         (getvar "CLAYER"))
  38.                                         (cons 10         (car dat))
  39.                                         (cons 11         (cadr dat))))
  40.         ) ; end foreach

  41.         (foreach dat xdata
  42.                 (setq
  43.                         ref_p1        (nth 0 dat)
  44.                         ref_p2        (nth 1 dat)
  45.                         ang1        (nth 2 dat)
  46.                         ang2        (nth 3 dat)
  47.                         tmp                (polar ref_p1 ang1 rdst)
  48.                         cen                (polar tmp ang2 rad)
  49.                         rad2        (distance cen ref_p1)
  50.                         ang1        (angle cen ref_p1)
  51.                         ang2         (angle cen ref_p2)
  52.                 ) ; end setq
  53.                 (if (null (nth 4 dat)) (setq tmp ang1 ang1 ang2 ang2 tmp tmp nil))
  54.                 (entmake
  55.                         (list
  56.                                 (cons 0                "ARC")
  57.                                 (cons 8         (getvar "CLAYER"))
  58.                                 (cons 62         (if (null (nth 5 dat)) 0 1))
  59.                             (cons 10         cen)
  60.                             (cons 40         rad2)
  61.                             (cons 50         ang1)
  62.                             (cons 51         ang2)))

  63.         ) ; end foreach
  64.         (princ)

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

使用道具 举报

 楼主| 发表于 2006-10-19 18:57:27 | 显示全部楼层
最初由 phoenixdjq 发布
[B]你的这个程序只能从上到下选择点,而且两点连线的角度为90度才能成立。 [/B]

3楼的朋友编的程序,挺好用,但往往生成这种断开符时,管道线已经画好了,不知道怎么才能实现这个在已经画好的管道线上生成这种断开符呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7231个

财富等级: 富甲天下

发表于 2006-10-19 20:31:50 | 显示全部楼层
  1. ;; No error check
  2. (defun C:aa()
  3.    (vl-load-com)
  4.    (setvar "cmdecho" 0)
  5.    (setq ivar (getvar "osmode"))
  6.    (setq e1 (entsel "\n 请输入第一条线: ")
  7.          e2 (entsel "\n 请输入第二条线: ")
  8.          e1 (car e1)
  9.          e2 (car e2)
  10.          ss (ssadd)
  11.    )
  12.    (ssadd e1 ss)
  13.    (ssadd e2 ss)
  14.    (setq pts (acet-geom-ss-extents ss T)      ; supported by ET
  15.          pt1 (car  pts)
  16.          pt3 (cadr pts)
  17.          pt2 (list (car pt3) (cadr pt1))
  18.          pt4 (list (car pt1) (cadr pt3))
  19.          <90 (/ Pi 2)
  20.           dd (/ (distance pt2 pt3) 2)
  21.          pt5 (polar pt2 <90 dd)
  22.           dd (/ dd 2)
  23.         pta1 (polar (polar pt2 <90 dd) 0.0 (/ dd 2))
  24.         pta2 (polar (polar pt5 <90 dd) Pi (/ dd 2))
  25.           ss (ssadd)
  26.    )
  27.    (setvar "osmode" 0)
  28.    (vl-cmdf "pline" pt2 "A" "S" pta1 pt5 pta2 pt3 "")
  29.    (ssadd (entlast) ss)
  30.    (vl-cmdf "pline" pt3 "A" "S" (polar pta2 0.0 dd) pt5 "")
  31.    (ssadd (entlast) ss)
  32.    (vl-cmdf "copy" ss "" pt3 pt3)
  33.    (vl-cmdf "move" ss "" pt3 pt1)
  34.    (vl-cmdf "rotate" ss "" pt1 180)
  35.    (setvar "cmdecho" 1)
  36.    (setvar "osmode" ivar)
  37.    (princ)
  38. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-19 21:25:15 | 显示全部楼层
看看怎么才能这样做:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-19 22:03:13 | 显示全部楼层
好人做到底了!
也不用那麼麻煩啦,抓那兩條線的對角點即可

  1. (defun c:test (/)


  2.         (setq old_osmode (getvar "OSMODE"))
  3.         (setvar "OSMODE" 1)
  4.         (initget 1)(setq p1 (getpoint "\n First point: "))
  5.         (initget 1)(setq p2 (getpoint p1 "\n First point: "))
  6.         (setvar "OSMODE" old_osmode)

  7.         (setq elist (apply 'append
  8.                                 (mapcar '(lambda (pt_data)
  9.                                         (setq ss (ssget "X" (list (cons 0 "LINE")(cons -4 "\<OR")(cons 10 pt_data)(cons 11 pt_data)(cons -4  "OR\>"))))
  10.                                         (list (if (null ss) nil (ssname ss 0)))
  11.                                 ) (list p1 p2) )))

  12.         (if (not (and (car elist) (cadr elist))) (exit))

  13.         (setq
  14.                 e                (car elist)
  15.                 ex                (entget e)
  16.                 dp1                (cdr (assoc 10 ex))
  17.                 dp2                (cdr (assoc 11 ex))

  18.                 e                (cadr elist)
  19.                 ex                (entget e)
  20.                 dp3a        (cdr (assoc 10 ex))
  21.                 dp4a        (cdr (assoc 11 ex))

  22.                 ang                (angle dp1 dp2)
  23.                 perang1        (+ ang (/ pi 2.0))
  24.                 perang2        (- ang (/ pi 2.0))
  25.                 dp3                (inters dp3a dp4a dp1 (polar dp1 perang1 1) nil)
  26.                 dp4                (inters dp3a dp4a dp2 (polar dp2 perang1 1) nil)

  27.                 wid                (distance dp1 dp3)
  28.                 offsz        (/ wid 2)
  29.                 p1                (polar dp1 (angle dp1 dp3) offsz)
  30.                 p2                (polar dp2 (angle dp1 dp3) offsz)

  31.                 rdst        (/ wid 4)
  32.                 ang1        (angle p1 dp1)
  33.                 ang2        (angle p1 p2)
  34.                 ang3        (angle p1 dp3)

  35.                 xdata        (list p1 p2)
  36.                 rad                (* (- 1 0.125) rdst)

  37.                 pdata        nil

  38.         ) ; end setq

  39.         (command "_UNDO" "BEGIN")

  40.         (foreach base xdata
  41.                 (foreach angx (list perang1 perang2)
  42.                         (setq
  43.                                 cen                (polar (polar base angx rdst) (+ angx (/ pi 2.0)) rad)
  44.                                 rad2        (distance cen base)
  45.                                 ang1        (angle cen base)
  46.                                 ang2         (angle cen (polar base angx (* rdst 2)))
  47.                                 pdata        (append pdata (list (list cen rad2 ang1 ang2)))
  48.                         ) ; end setq
  49.                 ) ; end foreach
  50.                 (setq swang (if (equal swang perang1) perang2 perang1))
  51.                 (setq
  52.                         cen                (polar (polar base swang rdst) (- swang (/ pi 2.0)) rad)
  53.                         rad2        (distance cen base)
  54.                         ang1        (angle cen base)
  55.                         ang2         (angle cen (polar base swang (* rdst 2)))
  56.                         pdata        (append pdata (list (list cen rad2 ang2 ang1)))
  57.                 ) ; end setq
  58.         ) ; end foreach

  59.         (foreach dat pdata
  60.                 (entmake
  61.                         (list
  62.                                 (cons 0                "ARC")
  63.                                 (cons 8         (getvar "CLAYER"))
  64.                                 (cons 62         (if (null (nth 5 dat)) 0 1))
  65.                             (cons 10         (nth 0 dat))
  66.                             (cons 40         (nth 1 dat))
  67.                             (cons 50         (nth 2 dat))
  68.                             (cons 51         (nth 3 dat))))
  69.         ) ; end foreach

  70.         (command "_UNDO" "END")
  71.         (princ)

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

使用道具 举报

 楼主| 发表于 2006-10-19 22:38:16 | 显示全部楼层 |阅读模式

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

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

×
谢谢楼上的朋友,但不知道你的程序是哪里掉东西了,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-10-19 23:11:59 | 显示全部楼层
程式碼中有 HTML 的字元,所以就被剪掉了
改用附件好了,再試試
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-19 23:33:18 | 显示全部楼层
最初由 logo3490 发布
[B]程式碼中有 HTML 的字元,所以就被剪掉了
改用附件好了,再試試 [/B]


我用过了,能用了,但是和你所描述的不太一样,还是只能捕捉两条线上的两个端点才能生成,这样有局限性,我觉得如果捕捉两条线上的任意两个点,就在这两个点处生成,那样就比较好用了,即你所说,选取对角点即可生成断开符。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-19 23:49:58 | 显示全部楼层
那就改成這樣子

(defun c:test (/)


        (setq old_osmode (getvar "OSMODE"))
        (setvar "OSMODE" 512)

        (while (null (setq e1 (entsel))))
        (while (null (setq e2 (entsel))))

        (setvar "OSMODE" old_osmode)

        (setq
                e                (car e1)
                ex                (entget e)
                dp1a        (cdr (assoc 10 ex))
                dp2a        (cdr (assoc 11 ex))
                lay                (cdr (assoc 8 ex))

                ang                (angle dp1a dp2a)
                perang1        (+ ang (/ pi 2.0))
                perang2        (- ang (/ pi 2.0))
                p1                (cadr e1)
                p2                (cadr e2)
                dp1                (inters dp1a dp2a p1 (polar p1 perang1 1) nil)
                dp2                (inters dp1a dp2a p2 (polar p2 perang1 1) nil)

                e                (car e2)
                ex                (entget e)
                dp3a        (cdr (assoc 10 ex))
                dp4a        (cdr (assoc 11 ex))
                dp3                (inters dp3a dp4a p1 (polar p1 perang1 1) nil)
                dp4                (inters dp3a dp4a p2 (polar p2 perang1 1) nil)

                wid                (distance dp1 dp3)
                offsz        (/ wid 2)
                p1                (polar dp1 (angle dp1 dp3) offsz)
                p2                (polar dp2 (angle dp1 dp3) offsz)

                rdst        (/ wid 4)
                ang1        (angle p1 dp1)
                ang2        (angle p1 p2)
                ang3        (angle p1 dp3)

                xdata        (list p1 p2)
                rad                (* (- 1 0.125) rdst)

                pdata        nil

        ) ; end setq

        (command "_UNDO" "BEGIN")

        (foreach base xdata
                (foreach angx (list perang1 perang2)
                        (setq
                                cen                (polar (polar base angx rdst) (+ angx (/ pi 2.0)) rad)
                                rad2        (distance cen base)
                                ang1        (angle cen base)
                                ang2         (angle cen (polar base angx (* rdst 2)))
                                pdata        (append pdata (list (list cen rad2 ang1 ang2)))
                        ) ; end setq
                ) ; end foreach
                (setq swang (if (equal swang perang1) perang2 perang1))
                (setq
                        cen                (polar (polar base swang rdst) (- swang (/ pi 2.0)) rad)
                        rad2        (distance cen base)
                        ang1        (angle cen base)
                        ang2         (angle cen (polar base swang (* rdst 2)))
                        pdata        (append pdata (list (list cen rad2 ang2 ang1)))
                ) ; end setq
        ) ; end foreach

        (foreach dat pdata
                (entmake
                        (list
                                (cons 0                "ARC")
                                (cons 8         lay)
                            (cons 10         (nth 0 dat))
                            (cons 40         (nth 1 dat))
                            (cons 50         (nth 2 dat))
                            (cons 51         (nth 3 dat))))
        ) ; end foreach

        (command "_UNDO" "END")
        (princ)

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

使用道具 举报

 楼主| 发表于 2006-10-20 07:13:14 | 显示全部楼层
高手就是高手,做的相当的好,非常好用。你这种思路非常不错,谢谢!!不过如果能把生成的这两个断开符分别生成两个组,我感觉就会更完美了,因为那样操作起来会相当的方便。另外,在运行过程中,并且多段线不能操作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-20 20:23:09 | 显示全部楼层
修改, PLINE 也可以, 及兩個符號變成 BLOCK

(defun c:test (/)


        (setq old_osmode (getvar "OSMODE"))
        (setvar "OSMODE" 512)

        (while (null (setq e1 (entsel))))
        (while (null (setq e2 (entsel))))

        (setvar "OSMODE" old_osmode)

        (setq
                e                (car e1)
                ex                (entget e)
                lay                (cdr (assoc 8 ex))
                ename        (cdr (assoc 0 ex))
                cap                (cadr e1)
                p1                 nil
                dst                -1
        ) ; end setq

        (cond
                ((= ename "LINE")
                        (setq
                                dp1a        (cdr (assoc 10 ex))
                                dp2a        (cdr (assoc 11 ex))
                        )) ; end setq
                ((= ename "LWPOLYLINE")
                        (while (and ex (setq p2 (assoc 10 ex)))
                                (setq
                                        ex        (cdr (member p2 ex))
                                        p2        (cdr p2)
                                        xp        (if p1 (inters p1 p2 cap (polar cap (+ (angle p1 p2) (/ pi 2.0)) 1) nil) nil)
                                        tmp        (if xp (distance cap xp) -1)
                                ) ; end setq
                                (if (or (minusp dst) (< tmp dst)) (setq dst tmp dp1a p1 dp2a p2 ))
                                (setq         p1         p2)
                        )) ; end while
                (T (exit))
        ) ; end cond


        (setq
                e                (car e2)
                ex                (entget e)
                ename        (cdr (assoc 0 ex))
                cap                (cadr e2)
                p1                 nil
                dst                -1
        ) ; end setq

        (cond
                ((= ename "LINE")
                        (setq
                                dp3a        (cdr (assoc 10 ex))
                                dp4a        (cdr (assoc 11 ex))
                        )) ; end setq
                ((= ename "LWPOLYLINE")
                        (while (and ex (setq p2 (assoc 10 ex)))
                                (setq
                                        ex        (cdr (member p2 ex))
                                        p2        (cdr p2)
                                        xp        (if p1 (inters p1 p2 cap (polar cap (+ (angle p1 p2) (/ pi 2.0)) 1) nil) nil)
                                        tmp        (if xp (distance cap xp) -1)
                                ) ; end setq
                                (if (or (minusp dst) (< tmp dst)) (setq dst tmp dp3a p1 dp4a p2 ))
                                (setq         p1         p2)
                        )) ; end while
                (T (exit))
        ) ; end cond


        (setq
                ang                (angle dp1a dp2a)
                perang1        (+ ang (/ pi 2.0))
                perang2        (- ang (/ pi 2.0))
                p1                (cadr e1)
                p2                (cadr e2)
                dp1                (inters dp1a dp2a p1 (polar p1 perang1 1) nil)
                dp2                (inters dp1a dp2a p2 (polar p2 perang1 1) nil)
                dp3                (inters dp3a dp4a p1 (polar p1 perang1 1) nil)
                dp4                (inters dp3a dp4a p2 (polar p2 perang1 1) nil)

                wid                (distance dp1 dp3)
                offsz        (/ wid 2)
                p1                (polar dp1 (angle dp1 dp3) offsz)
                p2                (polar dp2 (angle dp1 dp3) offsz)

                rdst        (/ wid 4)
                ang1        (angle p1 dp1)
                ang2        (angle p1 p2)
                ang3        (angle p1 dp3)

                xdata        (list p1 p2)
                rad                (* (- 1 0.125) rdst)

                pdata        nil

        ) ; end setq

        (command "_UNDO" "BEGIN")


        (foreach base xdata
                (foreach angx (list perang1 perang2)
                        (setq
                                cen                (polar (polar base angx rdst) (+ angx (/ pi 2.0)) rad)
                                rad2        (distance cen base)
                                ang1        (angle cen base)
                                ang2         (angle cen (polar base angx (* rdst 2)))
                                pdata        (append pdata (list (list cen rad2 ang1 ang2 "BYLAYER")))
                        ) ; end setq
                ) ; end foreach
                (setq swang (if (equal swang perang1) perang2 perang1))
                (setq
                        cen                (polar (polar base swang rdst) (- swang (/ pi 2.0)) rad)
                        rad2        (distance cen base)
                        ang1        (angle cen base)
                        ang2         (angle cen (polar base swang (* rdst 2)))
                        pdata        (append pdata (list (list cen rad2 ang2 ang1 "BYBLOCK")))
                ) ; end setq
        ) ; end foreach

        (entmake
                (list
                        (cons 0  "BLOCK")
                        (cons 2  "*U")
                        (cons 70 1)
                        (cons 10 dp1)
                )
        ) ; end entmake

        (foreach dat pdata
                (entmake
                        (list
                                (cons 0                "ARC")
                                (cons 8         lay)
                                (cons 6            (nth 4 dat) )
                            (cons 10         (nth 0 dat))
                            (cons 40         (nth 1 dat))
                            (cons 50         (nth 2 dat))
                            (cons 51         (nth 3 dat))))
        ) ; end foreach

        (entmake
                (list
                        (cons 0 "INSERT")
                        (cons 2 (entmake '((0 . "ENDBLK"))))
                        (cons 10 dp1)
                        (cons 50 0)
                        (cons 41 1)
                        (cons 42 1)
                )
        )

        (command "_UNDO" "END")
        (princ)

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

使用道具 举报

 楼主| 发表于 2006-10-20 20:34:14 | 显示全部楼层
最初由 logo3490 发布
[B]修改, PLINE 也可以, 及兩個符號變成 BLOCK

(defun c:test (/)


        (setq old_osmode (getvar "OSMODE"))
        (setvar "OSMODE" 512)

        (while (null (setq e1 (entsel))))
        (while (null (setq e2 (entsel)))... [/B]


好用,很好用!不知能不能实现两个断开符,[B]分别[/COLOR] [/B]成块,或者是[B]分别[/COLOR] [/B]成组呢?成组最好,因为生成完断开符后,往往下一个操作便是剪切的命令,并且有时位置没有选好时,还要进行调整断开符的位置,如果能实现这两点的话,我想程序就相当的完美了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-20 21:09:33 | 显示全部楼层
改修改

  1. (defun c:test (/)


  2.         (setq old_osmode (getvar "OSMODE"))
  3.         (setvar "OSMODE" 512)

  4.         (while (null (setq e1 (entsel))))
  5.         (while (null (setq e2 (entsel))))

  6.         (setvar "OSMODE" old_osmode)

  7.         (setq
  8.                 e                (car e1)
  9.                 ex                (entget e)
  10.                 lay                (cdr (assoc 8 ex))
  11.                 ename        (cdr (assoc 0 ex))
  12.                 cap                (cadr e1)
  13.                 p1                 nil
  14.                 dst                -1
  15.         ) ; end setq

  16.         (cond
  17.                 ((= ename "LINE")
  18.                         (setq
  19.                                 dp1a        (cdr (assoc 10 ex))
  20.                                 dp2a        (cdr (assoc 11 ex))
  21.                         )) ; end setq
  22.                 ((= ename "LWPOLYLINE")
  23.                         (while (and ex (setq p2 (assoc 10 ex)))
  24.                                 (setq
  25.                                         ex        (cdr (member p2 ex))
  26.                                         p2        (cdr p2)
  27.                                         xp        (if p1 (inters p1 p2 cap (polar cap (+ (angle p1 p2) (/ pi 2.0)) 1) nil) nil)
  28.                                         tmp        (if xp (distance cap xp) -1)
  29.                                 ) ; end setq
  30.                                 (if (or (minusp dst) (< tmp dst)) (setq dst tmp dp1a p1 dp2a p2 ))
  31.                                 (setq         p1         p2)
  32.                         )) ; end while
  33.                 (T (exit))
  34.         ) ; end cond


  35.         (setq
  36.                 e                (car e2)
  37.                 ex                (entget e)
  38.                 ename        (cdr (assoc 0 ex))
  39.                 cap                (cadr e2)
  40.                 p1                 nil
  41.                 dst                -1
  42.         ) ; end setq

  43.         (cond
  44.                 ((= ename "LINE")
  45.                         (setq
  46.                                 dp3a        (cdr (assoc 10 ex))
  47.                                 dp4a        (cdr (assoc 11 ex))
  48.                         )) ; end setq
  49.                 ((= ename "LWPOLYLINE")
  50.                         (while (and ex (setq p2 (assoc 10 ex)))
  51.                                 (setq
  52.                                         ex        (cdr (member p2 ex))
  53.                                         p2        (cdr p2)
  54.                                         xp        (if p1 (inters p1 p2 cap (polar cap (+ (angle p1 p2) (/ pi 2.0)) 1) nil) nil)
  55.                                         tmp        (if xp (distance cap xp) -1)
  56.                                 ) ; end setq
  57.                                 (if (or (minusp dst) (< tmp dst)) (setq dst tmp dp3a p1 dp4a p2 ))
  58.                                 (setq         p1         p2)
  59.                         )) ; end while
  60.                 (T (exit))
  61.         ) ; end cond


  62.         (setq
  63.                 ang                (angle dp1a dp2a)
  64.                 perang1        (+ ang (/ pi 2.0))
  65.                 perang2        (- ang (/ pi 2.0))
  66.                 p1                (cadr e1)
  67.                 p2                (cadr e2)
  68.                 dp1                (inters dp1a dp2a p1 (polar p1 perang1 1) nil)
  69.                 dp2                (inters dp1a dp2a p2 (polar p2 perang1 1) nil)
  70.                 dp3                (inters dp3a dp4a p1 (polar p1 perang1 1) nil)
  71.                 dp4                (inters dp3a dp4a p2 (polar p2 perang1 1) nil)

  72.                 wid                (distance dp1 dp3)
  73.                 offsz        (/ wid 2)
  74.                 p1                (polar dp1 (angle dp1 dp3) offsz)
  75.                 p2                (polar dp2 (angle dp1 dp3) offsz)

  76.                 rdst        (/ wid 4)
  77.                 ang1        (angle p1 dp1)
  78.                 ang2        (angle p1 p2)
  79.                 ang3        (angle p1 dp3)

  80.                 xdata        (list p1 p2)
  81.                 rad                (* (- 1 0.125) rdst)

  82.                 pdata        nil

  83.         ) ; end setq

  84.         (command "_UNDO" "BEGIN")


  85.         (foreach base xdata
  86.                 (foreach angx (list perang1 perang2)
  87.                         (setq
  88.                                 cen                (polar (polar base angx rdst) (+ angx (/ pi 2.0)) rad)
  89.                                 rad2        (distance cen base)
  90.                                 ang1        (angle cen base)
  91.                                 ang2         (angle cen (polar base angx (* rdst 2)))
  92.                                 pdata        (append pdata (list (list cen rad2 ang1 ang2 "BYLAYER")))
  93.                         ) ; end setq
  94.                 ) ; end foreach
  95.                 (setq swang (if (equal swang perang1) perang2 perang1))
  96.                 (setq
  97.                         cen                (polar (polar base swang rdst) (- swang (/ pi 2.0)) rad)
  98.                         rad2        (distance cen base)
  99.                         ang1        (angle cen base)
  100.                         ang2         (angle cen (polar base swang (* rdst 2)))
  101.                         pdata        (append pdata (list (list cen rad2 ang2 ang1 "BYBLOCK")))
  102.                 ) ; end setq
  103.         ) ; end foreach


  104.         (setq el (entlast))
  105.         (foreach dat pdata
  106.                 (entmake
  107.                         (list
  108.                                 (cons 0                "ARC")
  109.                                 (cons 8         lay)
  110.                                 (cons 6            (nth 4 dat) )
  111.                             (cons 10         (nth 0 dat))
  112.                             (cons 40         (nth 1 dat))
  113.                             (cons 50         (nth 2 dat))
  114.                             (cons 51         (nth 3 dat))))
  115.         ) ; end foreach

  116.         (setq ac_group (cdar (dictsearch (namedobjdict) "ACAD_GROUP")))
  117.         (entmake
  118.                 (list
  119.                 (cons 0                "GROUP")
  120.                 (cons 102        "{ACAD_REACTORS")
  121.                 (cons 330         ac_group)
  122.                 (cons 102        "}")
  123.                 (cons 100        "AcDbGroup")
  124.                 (cons 300        "*")
  125.                 (cons 70        0)
  126.                 (cons 71        1)
  127.                 (cons 340        (setq el (entnext el)))
  128.                 (cons 340        (setq el (entnext el)))
  129.                 (cons 340        (setq el (entnext el)))
  130.                 ) ;_ end of list
  131.         )

  132.         (entmake
  133.                 (list
  134.                 (cons 0                "GROUP")
  135.                 (cons 102        "{ACAD_REACTORS")
  136.                 (cons 330         ac_group)
  137.                 (cons 102        "}")
  138.                 (cons 100        "AcDbGroup")
  139.                 (cons 300        "*")
  140.                 (cons 70        0)
  141.                 (cons 71        1)
  142.                 (cons 340        (setq el (entnext el)))
  143.                 (cons 340        (setq el (entnext el)))
  144.                 (cons 340        (setq el (entnext el)))
  145.                 ) ;_ end of list
  146.         )

  147.         (command "_UNDO" "END")
  148.         (princ)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 17:46 , Processed in 0.476258 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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