明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 288|回复: 6

[讨论] grread下的扑捉问题(已支持象限扑捉)

[复制链接]
发表于 2024-6-30 23:47 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-7-1 09:57 编辑

新开一贴,对于这个问题,希望在本帖要解决了它,
什么问题呢?那就是,grread下支持扑捉象限点,这个问题
请大家移步先看技术帖子,再来进一步的研究...
顾版的
http://bbs.mjtd.com/forum.php?mo ... 91&highlight=grread
廊大师的
http://bbs.mjtd.com/forum.php?mo ... 90&highlight=grread

下面代码,是我今上午改写的,尝试一下,还不完美,
  1. ;;grread图元捕捉子函数-----(一级)------有缺憾,会闪烁
  2. ;;name为移动的图元、选择集,pt为光标点
  3. ;;有捕捉点则返回捕捉点,无返回光标点
  4. (defun slosnappt (name pt / cl osmo d h k lst nearpt p0 p00 p1 p2 p3 p4 p5 ptx pty x newe)
  5.   (redraw)
  6.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  7.     (progn
  8.       (cond
  9.         ((= (type name) 'ENAME) (entdel name)) ;图元先删除
  10.         ((= (type name) 'PICKSET) ;选择集
  11.           (sl-sel-redrawsel name 2) ;先隐藏
  12.         )
  13.       )
  14.       (setq
  15.         p1 nil p2 nil
  16.         cl (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences *Acad*)))
  17.         h (p2uu 1.0) d (getvar "PICKBOX")
  18.         lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h)) k (* 30.0 d h)
  19.         p1 (cadr (grread 5))
  20.       )
  21.       ;下面三行,此时如果扑捉到实体,取得它中心p2
  22.       (if (setq newe (car (nentselp pt)))
  23.         (setq p2 (e-mid newe))
  24.       )
  25.       ;;这是第一步,取得扑捉点
  26.       (if (setq p0 (osnap pt "_NEA,_MID,_END,_INT,_CEN,_NOD,_QUA,_INS,_PER,_TAN,_APP,_EXT,_PAR"))
  27.         (setq osmo 1 nearpt p0)
  28.       )
  29.       ;;如果是NEA  只不过是判定osmo罢了吗?值得进行下去if,如果能模拟到和CAD一样丝滑,建议osmo仅仅一个好了,那就是osmo=1 ,画个矩形
  30.       (if (and (setq p0 (osnap pt "_NEA")) (equal nearpt p0 k))
  31.         (setq osmo 2 nearpt p0)
  32.       )
  33.       (if (and (setq p0 (osnap pt "_MID")) (equal nearpt p0 k))
  34.         (setq osmo 3 nearpt p0)
  35.       )
  36.       (if (and (setq p0 (osnap pt "_INT")) (equal nearpt p0 k))
  37.         (setq osmo 4 nearpt p0)
  38.       )
  39.       ;;下面三句吗,我尝试给于象限点p2,并设为OSMO=4,画交叉矢量线,可以是可以,但是操作不如CAD本身丝滑
  40.       (if (and p2 nearpt (not (equal nearpt p2 k)))
  41.         (setq osmo 4 nearpt p2)
  42.       )
  43.       (cond
  44.         ((= (type name) 'ENAME) (entdel name)) ;图元恢复
  45.         ((= (type name) 'PICKSET) ;选择集
  46.           (sl-sel-redrawsel name 1) ;恢复显示
  47.         )
  48.       )
  49.       (if nearpt
  50.         (progn
  51.           (setq ptx (car nearpt) pty (cadr nearpt))
  52.           (while lst
  53.             (setq x (car lst) p1 (list (- ptx x) (- pty x)) p2 (list (+ ptx x) (- pty x))
  54.               p3 (list (+ ptx x) (+ pty x)) p4 (list (- ptx x) (+ pty x))
  55.               p5 (list ptx (+ pty x))
  56.             )
  57.             (cond
  58.               ((= osmo 1) (grvecs (list cl p1 p2 p2 p3 p3 p4 p4 p1))) ;正方形
  59.               ((= osmo 2) (grvecs (list cl p1 p2 p2 p4 p3 p4 p3 p1))) ;俩三角
  60.               ((= osmo 3) (grvecs (list cl p1 p2 p2 p5 p5 p1))) ;三角
  61.               ((= osmo 4) (grvecs (list cl p1 p3 cl p2 p4)))  ;交叉
  62.             )
  63.             (setq lst (cdr lst))
  64.           )
  65.           (setq pt nearpt)
  66.         )
  67.       )  
  68.     )
  69.   )
  70.   pt
  71. )
下面为了大家能更好的解决这个问题,贴上另一种优秀代码,还没来得及尝试扑捉象限点的改写
  1. ;;重画选择集中的对象-----(一级)-----
  2. ;;Sel为选择集或图元名; mode为方式码
  3. ;;mode 1 在屏幕重画该选择集对象
  4. ;;mode 2 隐藏该选择集对象
  5. ;;mode 3 <醒目显示> 该选择集对象
  6. ;;mode 4 取消<醒目显示>该选择集对象
  7. (defun sl-sel-redrawsel (sel mode / n)
  8.   (if sel
  9.     (cond
  10.       ((= 'PICKSET (type sel))
  11.         (repeat (setq n (sslength sel))
  12.           (redraw (ssname sel (setq n (1- n))) mode)
  13.         )
  14.       )
  15.       ((= 'ENAME (type sel))
  16.         (redraw sel mode)
  17.       )
  18.     )
  19.   )
  20.   t
  21. )
  22. ;;grread图元捕捉子函数-----(一级)------
  23. ;;name为移动的图元、选择集,pt为光标点
  24. ;;有捕捉点则返回捕捉点,无返回光标点
  25. (defun slosnappt (name pt / p mode osmod osmode size k)
  26.   (defun sldectobin (n m / c f) ;;十进制转二进制
  27.     (setq f (if (< n 0) 1 0) n (abs n))
  28.     (while (> (setq c (cons (rem n 2) c) n (* n 0.5)) 0))
  29.     (while (< (length c) (1- m)) (setq c (cons 0 c)))
  30.     (cons f c)
  31.   )
  32.   ;;------------------
  33.   (defun sldrawvecs (pt vecs size cl / xdir)
  34.     (setq xdir (getvar 'ucsxdir)
  35.       vecs (mapcar '(lambda (x) (mapcar '(lambda (a) (mapcar '+ pt (mapcar '* (setq a (trans a 0 xdir) a (list (caddr a) (car a))) (list size size)))) x)) vecs)
  36.     )
  37.     (grvecs (apply 'append (mapcar 'cons (mapcar (function (lambda (x) cl)) vecs) vecs)))
  38.   )
  39.   ;;----------------
  40.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  41.     (progn
  42.       (if name (progn (sl-sel-redrawsel name 2) (setq k t))) ;隐藏
  43.       (if (setq
  44.             osmod '("_NEA," "_QUA," "_END," "_MID," "_CEN," "_NOD," "_INT," "_INS," "_PER," "_TAN," "_APP," "_EXT," "_PAR")
  45.             osmode (reverse (sldectobin (getvar 'osmode) 1))
  46.             size (* (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) (getvar "PICKBOX"))
  47.             p (osnap pt (apply 'strcat (mapcar '(lambda (x y) (if (zerop x) "" y)) osmode osmod)))
  48.             mode (cdr (assoc (if p
  49.                                (vl-some '(lambda (x) (if (equal p (cdr x) 1e-8) (car x)))
  50.                                  (vl-remove 'nil (mapcar '(lambda (x y / p) (if (zerop x) nil (if (setq p (osnap pt y)) (cons y p)))) osmode osmod)))
  51.                              )
  52.                         '(("_END," ((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1) (1 1))((1 1) (-1 1)))
  53.                            ("_MID," ((0 1.414) (-1.225 -0.707)) ((-1.225 -0.707)(1.225 -0.707))((1.225 -0.707) (0 1.414)))
  54.                            ("_CEN," ((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0) (-0.707 -0.707))((-0.707 -0.707)(0 -1))
  55.                              ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0)) ((1 0) (0.707 0.707))((0.707 0.707) (0 1)))
  56.                            ("_NOD," ((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))((0 -1)(0.707 -0.707))
  57.                              ((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  58.                            ("_QUA," ((0 1.414)(-1.414 0))((-1.414 0)(0 -1.414))((0 -1.414)(1.414 0))((1.414 0)(0 1.414)))
  59.                            ("_INT," ((-1 1)(1 -1))((-1 -1)(1 1))((1 0.859)(-0.859 -1))((-1 0.859)(0.859 -1))((0.859 1)(-1 -0.859))((-0.859 1)(1 -0.859)))
  60.                            ("_INS," ((-1 1)(-1 -0.1))((-1 -0.1)(0 -0.1))((0 -0.1)(0 -1.0))((0 -1.0)(1 -1))
  61.                              ((1 -1)(1 0.1))((1 0.1)(0 0.1))((0 0.1) (0 1.0))((0 1.0)(-1 1)))
  62.                            ("_PER," ((-1 1)(-1 -1))((-1 -1)(1 -1))((0 -1)(0 0))((0 0)(-1 0)))
  63.                            ("_TAN," ((0 1)(-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))
  64.                              ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((1 1)(-1 1)))
  65.                            ("_NEA," ((-1 1)(1 -1))((1 -1)(-1 -1))((-1 -1)(1 1))((1 1)(-1 1)))
  66.                            ("_APP," ((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1)(1 1))((1 1)(-1 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  67.                            ("_EXT," ((0.1 0)(0.13 0))((0.2 0)(0.23 0))((0.3 0)(0.33 0)))
  68.                            ("_PAR" ((0 1)(-1 -1))((1 1)(0 -1)))
  69.                          )
  70.                       )
  71.                  )
  72.           )
  73.         (sldrawvecs (setq p (if p p pt)) mode size (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences *Acad*))))
  74.       )
  75.       (if k (sl-sel-redrawsel name 1)) ;恢复显示
  76.     )
  77.   )
  78.   (if p p pt)
  79. )


评分

参与人数 1明经币 +1 收起 理由
baitang36 + 1 师弟是夜猫子类型啊,这么晚了还发帖子

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-1 07:41 | 显示全部楼层
楼主是老当益壮啊,我们都老了,都要注意身体
发表于 2024-7-1 08:35 | 显示全部楼层
睡得太晚了
 楼主| 发表于 2024-7-1 09:56 | 显示全部楼层
为支持象限扑捉的改写,可以用了
  1. ;;grread图元捕捉子函数-----(一级)------
  2. ;;name为移动的图元、选择集,pt为光标点
  3. ;;有捕捉点则返回捕捉点,无返回光标点
  4. (defun sl-osnappt (pt / p mode osmod osmode size cl)
  5.   (defun sldectobin (n m / c f) ;;十进制转二进制
  6.     (setq f (if (< n 0) 1 0) n (abs n))
  7.     (while (> (setq c (cons (rem n 2) c) n (* n 0.5)) 0))
  8.     (while (< (length c) (1- m)) (setq c (cons 0 c)))
  9.     (cons f c)
  10.   )
  11.   ;;------------------
  12.   (defun sldrawvecs (pt vecs size cl / xdir)
  13.     (setq xdir (getvar 'ucsxdir)
  14.       vecs (mapcar '(lambda (x) (mapcar '(lambda (a) (mapcar '+ pt (mapcar '* (setq a (trans a 0 xdir) a (list (caddr a) (car a))) (list size size)))) x)) vecs)
  15.     )
  16.     (grvecs (apply 'append (mapcar 'cons (mapcar (function (lambda (x) cl)) vecs) vecs)))
  17.   )
  18.   ;;------------------
  19.   (if (setq
  20.         size (* (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) (getvar "PICKBOX"))
  21.         cl (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences *Acad*)))
  22.         osmod '("_NEA," "_QUA," "_END," "_MID," "_CEN," "_NOD," "_INT," "_INS," "_PER," "_TAN," "_APP," "_EXT," "_PAR")
  23.         osmode (reverse (sldectobin (getvar 'osmode) 1))
  24.         p (osnap pt (apply 'strcat (mapcar '(lambda (x y) (if (zerop x) "" y)) osmode osmod)))
  25.         mode (cdr (assoc (if p
  26.                            (vl-some '(lambda (x) (if (equal p (cdr x) 1e-8) (car x)))
  27.                              (vl-remove 'nil (mapcar '(lambda (x y / p) (if (zerop x) nil (if (setq p (osnap pt y)) (cons y p)))) osmode osmod)))
  28.                          )
  29.                     '(("_END," ((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1) (1 1))((1 1) (-1 1)))
  30.                        ("_MID," ((0 1.414) (-1.225 -0.707)) ((-1.225 -0.707)(1.225 -0.707))((1.225 -0.707) (0 1.414)))
  31.                        ("_CEN," ((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0) (-0.707 -0.707))((-0.707 -0.707)(0 -1))
  32.                          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0)) ((1 0) (0.707 0.707))((0.707 0.707) (0 1)))
  33.                        ("_NOD," ((0 1) (-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))((0 -1)(0.707 -0.707))
  34.                          ((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  35.                        ("_QUA," ((0 1.414)(-1.414 0))((-1.414 0)(0 -1.414))((0 -1.414)(1.414 0))((1.414 0)(0 1.414)))
  36.                        ("_INT," ((-1 1)(1 -1))((-1 -1)(1 1))((1 0.859)(-0.859 -1))((-1 0.859)(0.859 -1))((0.859 1)(-1 -0.859))((-0.859 1)(1 -0.859))) ;X
  37.                        ("_INS," ((-1 1)(-1 -0.1))((-1 -0.1)(0 -0.1))((0 -0.1)(0 -1.0))((0 -1.0)(1 -1))
  38.                          ((1 -1)(1 0.1))((1 0.1)(0 0.1))((0 0.1) (0 1.0))((0 1.0)(-1 1))) ;双方形
  39.                        ("_PER," ((-1 1)(-1 -1))((-1 -1)(1 -1))((0 -1)(0 0))((0 0)(-1 0)))
  40.                        ("_TAN," ((0 1)(-0.707 0.707))((-0.707 0.707)(-1 0))((-1 0)(-0.707 -0.707))((-0.707 -0.707)(0 -1))
  41.                          ((0 -1)(0.707 -0.707))((0.707 -0.707)(1 0))((1 0)(0.707 0.707))((0.707 0.707)(0 1))((1 1)(-1 1)))
  42.                        ("_NEA," ((-1 1)(1 -1))((1 -1)(-1 -1))((-1 -1)(1 1))((1 1)(-1 1)))
  43.                        ("_APP," ((-1 1)(-1 -1))((-1 -1)(1 -1))((1 -1)(1 1))((1 1)(-1 1))((-1 1)(1 -1))((-1 -1)(1 1)))
  44.                        ("_EXT," ((0.1 0)(0.13 0))((0.2 0)(0.23 0))((0.3 0)(0.33 0)))
  45.                        ("_PAR" ((0 1)(-1 -1))((1 1)(0 -1)))
  46.                      )
  47.                   )
  48.              )
  49.       )
  50.     (sldrawvecs (setq p (if p p pt)) mode size cl)
  51.   )
  52.   ;(if (and p0 p (not (equal p pt size)))
  53.   ;  (progn
  54.   ;    (setq p p0)
  55.   ;    (sldrawvecs p0 '(((-1 1)(1 -1))((-1 -1)(1 1))((1 0.859)(-0.859 -1))((-1 0.859)(0.859 -1))((0.859 1)(-1 -0.859))((-0.859 1)(1 -0.859))) size cl)
  56.   ;  )
  57.   ;)
  58.   (if p p pt)
  59. )
  60. ;;grread图元捕捉函数-----(一级)------
  61. ;;name为移动的图元、选择集,pt为光标点
  62. ;;有捕捉点则返回捕捉点,无返回光标点
  63. ;;支持象限点 三领设计 V3.0 Modify by 尘缘一生  QQ:15290049 2024.7.1  (精简后代码)
  64. (defun slosnappt (name pt / p0 p1 p2 newe size k)
  65.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  66.     (progn
  67.       (if name (progn (sl-sel-redrawsel name 2) (setq k t))) ;隐藏
  68.       (if (setq newe (car (nentselp pt)))
  69.         (progn
  70.           (setq p0 (e9pt newe 5))
  71.           (if (= (nentselp p0) nil)
  72.             (progn
  73.               (setq size (* (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) (getvar "PICKBOX")))
  74.               (setq p1 (polar p0 pi size) p2 (polar p0 0 size))
  75.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d"))) ;产生的象限临时线,需在函数体外删除,目前没解决函数体内删除问题
  76.               (setq p1 (polar p0 pi2 size) p2 (polar p0 3pi2 size))
  77.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d"))) ;产生的象限临时线,需在函数体外删除,目前没解决函数体内删除问题
  78.             )
  79.           )
  80.         )
  81.       )
  82.       (setq pt (sl-osnappt pt))
  83.       (if k (sl-sel-redrawsel name 1)) ;恢复显示
  84.     )
  85.   )
  86.   pt
  87. )


发表于 2024-7-1 10:02 | 显示全部楼层
新手前来学习下,grread我现在就只用过一次
 楼主| 发表于 2024-7-3 00:24 | 显示全部楼层
外壳部分再作一下

  1. ;;grread图元捕捉子函数-----(一级)------
  2. ;;name为移动的图元、选择集,pt为光标点
  3. ;;有捕捉点则返回捕捉点,无返回光标点
  4. ;;三领设计 尘缘一生 QQ:15290049
  5. (defun slosnappt (name pt / p0 p1 p2 newe ss size k)
  6.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  7.     (progn
  8.       (if name (progn (sl-sel-redrawsel name 2) (setq k t))) ;隐藏
  9.       (if (setq newe (car (nentselp pt)))
  10.         (progn
  11.           (setq size (* (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) (getvar "PICKBOX"))
  12.             p0 (e9pt newe 5)
  13.             ss (ssget "C" (polar p0 5pi4 size) (polar p0 pi4 size))
  14.           )
  15.           (if (or (null ss) (and ss (< (sslength ss) 2)))
  16.             (progn
  17.               (setq p1 (polar p0 pi size) p2 (polar p0 0 size))
  18.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d")))
  19.               (setq p1 (polar p0 pi2 size) p2 (polar p0 3pi2 size))
  20.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d")))
  21.             )
  22.           )
  23.         )
  24.       )
  25.       (vl-catch-all-apply '(lambda () (setq pt (sl-osnappt pt))))
  26.       (if k (sl-sel-redrawsel name 1)) ;恢复显示
  27.     )
  28.   )
  29.   pt
  30. )


 楼主| 发表于 2024-7-4 01:16 | 显示全部楼层
  1. ;;;返回捕捉模式字串
  2. ;"_END,_MID,_CEN,_NOD,_QUA,_INT,_INS,_PER,_TAN,_NEA,_QUI,_APP,_EXT,_PAR"
  3. (defun get_osmode (/ cur_mode mode) ;(get_osmode)
  4.   (setq mode "")
  5.   (if (< 0 (setq cur_mode (getvar "osmode")) 16384)
  6.     (mapcar
  7.       (function
  8.         (lambda (x)
  9.           (if (not (zerop (logand cur_mode (car x))))
  10.             (if (zerop (strlen mode))
  11.               (setq mode (cadr x))
  12.               (setq mode (strcat mode "," (cadr x)))
  13.             )
  14.           )
  15.         )
  16.       )
  17.       '((1 "_END")
  18.          (2 "_MID")
  19.          (4 "_CEN")
  20.          (8 "_NOD")
  21.          (16 "_QUA")
  22.          (32 "_INT")
  23.          (64 "_INS")
  24.          (128 "_PER")
  25.          (256 "_TAN")
  26.          (512 "_NEA")
  27.          (1024 "_QUI")
  28.          (2048 "_APP")
  29.          (4096 "_EXT")
  30.          (8192 "_PAR")
  31.        )
  32.     )
  33.   )
  34.   mode
  35. )
  36. ;;grread图元捕捉子函数-----(一级)------有缺憾,会闪烁
  37. ;;name为移动的图元、选择集,pt为光标点
  38. ;;有捕捉点则返回捕捉点,无返回光标点
  39. (defun slosnappt (name pt / cl osmo d h k kk lst nearpt p0 p00 p1 p2 p3 p4 p5 ptx pty x newe)
  40.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  41.     (progn
  42.       (if name (progn (sl-sel-redrawsel name 2) (setq kk t))) ;隐藏
  43.       (setq
  44.         p1 nil p2 nil
  45.         cl (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences *Acad*)))
  46.         h (p2uu 1.0) d (getvar "PICKBOX")
  47.         lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h)) k (* 30.0 d h)
  48.         p1 (cadr (grread 5))
  49.       )
  50.       (if (setq newe (car (nentselp pt)))
  51.         (setq p2 (e9pt newe 5))
  52.       )
  53.       (if (setq p0 (osnap pt (get_osmode)))
  54.         (setq osmo 1 nearpt p0)
  55.       )
  56.       (if (and (setq p0 (osnap pt "_NEA")) (equal nearpt p0 k))
  57.         (setq osmo 2 nearpt p0)
  58.       )
  59.       (if (and (setq p0 (osnap pt "_MID")) (equal nearpt p0 k))
  60.         (setq osmo 3 nearpt p0)
  61.       )
  62.       (if (and (setq p0 (osnap pt "_INT")) (equal nearpt p0 k))
  63.         (setq osmo 4 nearpt p0)
  64.       )
  65.       (if (and p2 nearpt (not (equal nearpt p2 k)))
  66.         (setq osmo 4 nearpt p2)
  67.       )
  68.       (if kk (sl-sel-redrawsel name 1)) ;恢复显示
  69.     )
  70.     (if nearpt
  71.       (progn
  72.         (setq ptx (car nearpt) pty (cadr nearpt))
  73.         (while lst
  74.           (setq x (car lst) p1 (list (- ptx x) (- pty x)) p2 (list (+ ptx x) (- pty x))
  75.             p3 (list (+ ptx x) (+ pty x)) p4 (list (- ptx x) (+ pty x))
  76.             p5 (list ptx (+ pty x))
  77.           )
  78.           (cond
  79.             ((= osmo 1) (grvecs (list cl p1 p2 p2 p3 p3 p4 p4 p1))) ;正方形
  80.             ((= osmo 2) (grvecs (list cl p1 p2 p2 p4 p3 p4 p3 p1))) ;俩三角
  81.             ((= osmo 3) (grvecs (list cl p1 p2 p2 p5 p5 p1))) ;三角
  82.             ((= osmo 4) (grvecs (list cl p1 p3 cl p2 p4)));交叉
  83.           )
  84.           (setq lst (cdr lst))
  85.         )
  86.         (setq pt nearpt)
  87.       )
  88.     )
  89.   )
  90.   pt
  91. )


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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-7-4 11:48 , Processed in 0.169042 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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