找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 721|回复: 8

[求助] [求助]:执行后不关闭捕获设置

[复制链接]
发表于 2008-2-18 07:59:57 | 显示全部楼层 |阅读模式

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

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

×
(defun *error*(st)
  (if (and (/= st "Function cancelled")
           (/= st "quit / exit abort")
      )
      (princ (strcat "错误: " st))
  )
  (setq *error* old_err)
  (princ)
)

(defun dxf (code en)
  (cdr (assoc code en))
)

(defun tan (ang)
  (/ (sin ang) (cos ang))
)

;;;==============================================
;;;               main   programm
;;;==============================================

(defun C:ss(/ th ths ss bp sp ep pt1 pt2 pt3 pt11 n tmp bbp ssp
              ang1 ang2 ang3 ang4 dis1 dis3)
  (setq old_err *error*)
  (setvar "CMDECHO" 0)
  (setvar "BLIPMODE" 0)
  (command "layer" "m" "ss" "c" "c" "ss" "")
  (setvar "osmode" 32)

  (if (= ths nil) (setq ths 800.0))
  (setq th (getreal (strcat "\n散水宽度<" (rtos ths 2 0) ">:")))
    (if (= th nil) (setq th ths))
    (setq ths th)

  (setq bp (getpoint "\n第一点: "))
  (setq bbp bp)                                   ;bbp记录下第一点
  (if (= nil bp) (quit))
  (setq sp (getpoint bp "\n下一点(注意:按顺时针): "))
  (setq ssp sp)                                   ;ssp记录下第二点
  (setvar "osmode" 0)
  (if (= nil sp) (quit))
  (setq n 0 tmp 0)         ;n=0为第一条线  ;tmp=0

  (while T
    (setq ang1 (angle bp sp))
    (setq dis1 (distance bp sp))  
    (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
    (setq pt2 (polar pt1 ang1 dis1))
    (if (= 0 n)
      (command "line" pt1 pt2 "")
      (command "line" pt11 pt2 "")       ;临时线
    )
    (setq ss (ssadd))
    (setq ss (ssget "L"))
    (if (= 1 tmp) (command "erase" ss ""))
    (if (= nil ep)
      (progn
        (if (= 1 tmp)
          (progn
            (command "line" pt11 bbp "")
            (redraw)
            (quit)
          )
          (progn
            (setvar "osmode" 32)
            (initget "C")
            (setq ep (getpoint sp "\nC闭合/下一点: "))
            (setvar "osmode" 0)
          )
        )
        (if (= nil ep) (quit))
        (if (eq ep "C") (setq ep bbp))

        (setq ang2 (angle sp ep))
        (setq ang3 (- pi ang1))
        (setq ang4 (- (* pi 2) ang2))
        (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
        (setq dis3 (* ths (tan ang3)))

        (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
        (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
        (command "erase" ss "")
        (if (= 0 n)
          (progn
            (command "line" pt1 pt2 "")
            (setq sss (ssadd))
            (setq sss (ssget "L"))
          )
          (command "line" pt11 pt2 "")
        )
        (if (/= 0 n) (command "line" pt11 bp ""))
      )
      (progn
        (command "erase" sss "")

        (setq ang2 (angle sp ep))
        (setq ang3 (- pi ang1))
        (setq ang4 (- (* pi 2) ang2))
        (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
        (setq dis3 (* ths (tan ang3)))

        (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
        (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
        (command "erase" ss "")
        (command "line" pt11 pt2 "")
        (setq ss (ssadd))
        (setq ss (ssget "L"))
        (command "line" pt2 pte1 "")
        (command "line" pt11 bp "")
        (setq tmp 1)
      )
    )
    (if (= 0 n)
      (setq pte1 pt2)
    )
    (setq pt11 pt2)
    (setq bp sp sp ep n 1)
    (if (equal bbp ep)
      (setq ep ssp)
      (setq ep nil)
    )
    (if (eq ep "C") (quit))
  )
  (princ)  
)

这是一个建筑图中画散水线的程序,程序执行后它会关闭捕获(F3),如何让程序执行后不关闭捕获设置
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-2-18 11:06:43 | 显示全部楼层

Re: [求助]:执行后不关闭捕获设置

最初由 szx025 发布
[B](defun *error*(st)
  (if (and (/= st "Function cancelled")
           (/= st "quit / exit abort")
      )
      (princ (strcat "错误: " st))
  )
  (setq *error* old_err)
  (princ)
)

(defun ... [/B]


  1.   [FONT=courier new]
  2. 试试这样行吗?

  3. (defun *error* (st)
  4.   (if (and (/= st "Function cancelled")
  5.            (/= st "quit / exit abort")
  6.       )
  7.     (princ (strcat "错误: " st))
  8.   )
  9.   (setq *error* old_err)
  10.   (princ)
  11. )

  12. (defun dxf (code en)
  13.   (cdr (assoc code en))
  14. )

  15. (defun tan (ang)
  16.   (/ (sin ang) (cos ang))
  17. )

  18. ;;;==============================================
  19. ;;; main programm
  20. ;;;==============================================

  21. (defun C:ss (/           th         ths   ss    bp           sp         ep    pt1   pt2
  22.              pt3   pt11         n     tmp   bbp   ssp         ang1  ang2  ang3
  23.              ang4  dis1         dis3
  24.             )
  25.   (setq old_err *error*)
  26.   (setvar "CMDECHO" 0)
  27.   (setvar "BLIPMODE" 0)
  28.   (setq osmode_s (getvar "osmode"));;<------------------
  29.   (command "layer" "m" "ss" "c" "c" "ss" "")
  30.   (setvar "osmode" 32)

  31.   (if (= ths nil)
  32.     (setq ths 800.0)
  33.   )
  34.   (setq th (getreal (strcat "\n散水宽度<" (rtos ths 2 0) ">:")))
  35.   (if (= th nil)
  36.     (setq th ths)
  37.   )
  38.   (setq ths th)

  39.   (setq bp (getpoint "\n第一点: "))
  40.   (setq bbp bp)                                ;bbp记录下第一点
  41.   (if (= nil bp)
  42.     (progn
  43.       (setvar "osmode" osmode_s);;<------------------
  44.     (quit)
  45.       )
  46.   )
  47.   (setq sp (getpoint bp "\n下一点(注意:按顺时针): "))
  48.   (setq ssp sp)                                ;ssp记录下第二点
  49.   (setvar "osmode" 0)
  50.   (if (= nil sp)
  51.     (progn
  52.       (setvar "osmode" osmode_s);;<------------------
  53.     (quit)
  54.       )
  55.   )
  56.   (setq        n 0
  57.         tmp 0
  58.   )                                        ;n=0为第一条线 ;tmp=0

  59.   (while T
  60.     (setq ang1 (angle bp sp))
  61.     (setq dis1 (distance bp sp))
  62.     (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
  63.     (setq pt2 (polar pt1 ang1 dis1))
  64.     (if        (= 0 n)
  65.       (command "line" pt1 pt2 "")
  66.       (command "line" pt11 pt2 "")        ;临时线
  67.     )
  68.     (setq ss (ssadd))
  69.     (setq ss (ssget "L"))
  70.     (if        (= 1 tmp)
  71.       (command "erase" ss "")
  72.     )
  73.     (if        (= nil ep)
  74.       (progn
  75.         (if (= 1 tmp)
  76.           (progn
  77.             (command "line" pt11 bbp "")
  78.             (redraw)
  79.             (setvar "osmode" osmode_s);;<------------------
  80.             (quit)
  81.           )
  82.           (progn
  83.             (setvar "osmode" 32)
  84.             (initget "C")
  85.             (setq ep (getpoint sp "\nC闭合/下一点: "))
  86.             (setvar "osmode" 0)
  87.           )
  88.         )
  89.         (if (= nil ep)
  90.           (progn
  91.            (setvar "osmode" osmode_s);;<------------------
  92.           (quit)
  93.           )
  94.         )
  95.         (if (eq ep "C")
  96.           (setq ep bbp)
  97.         )

  98.         (setq ang2 (angle sp ep))
  99.         (setq ang3 (- pi ang1))
  100.         (setq ang4 (- (* pi 2) ang2))
  101.         (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
  102.         (setq dis3 (* ths (tan ang3)))

  103.         (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
  104.         (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
  105.         (command "erase" ss "")
  106.         (if (= 0 n)
  107.           (progn
  108.             (command "line" pt1 pt2 "")
  109.             (setq sss (ssadd))
  110.             (setq sss (ssget "L"))
  111.           )
  112.           (command "line" pt11 pt2 "")
  113.         )
  114.         (if (/= 0 n)
  115.           (command "line" pt11 bp "")
  116.         )
  117.       )
  118.       (progn
  119.         (command "erase" sss "")

  120.         (setq ang2 (angle sp ep))
  121.         (setq ang3 (- pi ang1))
  122.         (setq ang4 (- (* pi 2) ang2))
  123.         (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
  124.         (setq dis3 (* ths (tan ang3)))

  125.         (setq pt1 (polar bp (+ ang1 (* pi 0.5)) ths))
  126.         (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
  127.         (command "erase" ss "")
  128.         (command "line" pt11 pt2 "")
  129.         (setq ss (ssadd))
  130.         (setq ss (ssget "L"))
  131.         (command "line" pt2 pte1 "")
  132.         (command "line" pt11 bp "")

  133.         (setq tmp 1)
  134.       )
  135.     )
  136.     (if        (= 0 n)
  137.       (setq pte1 pt2)
  138.     )
  139.     (setq pt11 pt2)
  140.     (setq bp sp
  141.           sp ep
  142.           n  1
  143.     )
  144.     (if        (equal bbp ep)
  145.       (setq ep ssp)
  146.       (setq ep nil)
  147.     )
  148.     (if        (eq ep "C")
  149.       (progn
  150.       (setvar "osmode" osmode_s);;<------------------
  151.       (quit)
  152.       )
  153.     )
  154.   )
  155.   (setvar "osmode" osmode_s);;<------------------
  156.   (princ)
  157. )

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

使用道具 举报

发表于 2008-2-18 12:28:17 | 显示全部楼层

Re: [求助]:执行后不关闭捕获设置

最初由 szx025 发布
[B](defun *error*(st)
  (if (and (/= st "Function cancelled")
           (/= st "quit / exit abort")
      )
      (princ (strcat "错误: " st))
  )
  (setq *error* old_err)
  (princ)
)

(defun ... [/B]


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

使用道具 举报

发表于 2008-2-18 12:34:25 | 显示全部楼层

Re: [求助]:执行后不关闭捕获设置

最初由 szx025 发布
[B](defun *error*(st)
  (if (and (/= st "Function cancelled")
           (/= st "quit / exit abort")
      )
      (princ (strcat "错误: " st))
  )
  (setq *error* old_err)
  (princ)
)

(defun ... [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2008-2-19 20:48:52 | 显示全部楼层
最初由 szx025 发布
[B]我试了4楼的办法,确实不行 [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 21:53 , Processed in 0.198111 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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