明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 尘缘一生

[经验] grread之历史开发经验剖析

[复制链接]
发表于 2024-7-1 01:45 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-7-1 01:52 编辑
你有种再说一遍 发表于 2024-6-30 18:00
还好c#没有这个烦恼,直接用键盘钩子想怎么玩怎么玩...

cad版本可谓是一点都不重要的问题...一套代码各处编译就行了...
发表于 2024-7-2 23:53 | 显示全部楼层



凑热闹(动图有点大,耐心等待)
纯LSP重写带捕捉的grread,支持各种捕捉(含象限点)、极轴、正交、延长线、让低版本CAD也能捕捉几何中心
捕捉的坐标应该没问题,动图中已经放大到小数点后第五位

本帖子中包含更多资源

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

x
发表于 2024-7-3 00:02 | 显示全部楼层
本帖最后由 gzxl 于 2024-7-3 00:25 编辑
你有种再说一遍 发表于 2024-7-1 01:45
cad版本可谓是一点都不重要的问题...一套代码各处编译就行了...

哈哈,惊神这下遇到语言不通了。
有一事说一事,lisp 调用是什么, AutoCADNET 调用的是什么?

CAD 为什么要分多么多版本也是这么来的。
 楼主| 发表于 2024-7-3 00:11 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-7-3 00:13 编辑
dtucad 发表于 2024-7-2 23:53
凑热闹(动图有点大,耐心等待)
纯LSP重写带捕捉的grread,支持各种捕捉(含象限点)、极轴、正交、 ...

你弄好了代码了?我还在考虑,今天又改写了下子,
我那边开了个新帖,为解决这个问题
我没有在函数本身解决问题,构造了个外壳,
  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 p p pt)
  53. )
  54. ;;grread图元捕捉子函数-----(一级)------
  55. ;;name为移动的图元、选择集,pt为光标点
  56. ;;有捕捉点则返回捕捉点,无返回光标点
  57. ;;三领设计 尘缘一生 QQ:15290049
  58. (defun slosnappt (name pt / p0 p1 p2 newe ss size k)
  59.   (if (< (getvar "OSMODE") 16384) ;;打开捕捉
  60.     (progn
  61.       (if name (progn (sl-sel-redrawsel name 2) (setq k t))) ;隐藏
  62.       (if (setq newe (car (nentselp pt)))
  63.         (progn
  64.           (setq size (* (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) (getvar "PICKBOX"))
  65.             p0 (e9pt newe 5)
  66.             ss (ssget "C" (polar p0 5pi4 size) (polar p0 pi4 size))
  67.           )
  68.           (if (or (null ss) (and ss (< (sslength ss) 2)))
  69.             (progn
  70.               (setq p1 (polar p0 pi size) p2 (polar p0 0 size))
  71.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d")))
  72.               (setq p1 (polar p0 pi2 size) p2 (polar p0 3pi2 size))
  73.               (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2) (cons 8 "f-i-n-d")))
  74.             )
  75.           )
  76.         )
  77.       )
  78.       (vl-catch-all-apply '(lambda () (setq pt (sl-osnappt pt))))
  79.       (if k (sl-sel-redrawsel name 1)) ;恢复显示
  80.     )
  81.   )
  82.   pt
  83. )


本帖子中包含更多资源

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

x
发表于 2024-7-3 09:49 | 显示全部楼层
最后就是 三领设计 的广告
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-5 12:41 , Processed in 0.131753 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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