找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 522|回复: 3

[研讨] 这是fools前辈的程序,但是在捕捉圆心的时候会出错,那位大神帮忙看看优化一下

[复制链接]

已领礼包: 496个

财富等级: 日进斗金

发表于 2017-7-12 08:24:58 | 显示全部楼层 |阅读模式

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

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

×
这是fools前辈的程序,但是在捕捉圆心的时候会出错,那位大神帮忙看看,优化一下谢谢!
http://bbs.xdcad.net/forum.php?m ... &fromuid=764086

  1. ;;  grread+osnap+grvecs
  2. ;;  Rewritten by Fools @ TheSwamp.org
  3. ;;  
  4. ;;  Use (grread) to get original point
  5. ;;  Use (osnap) to calculate accurate point
  6. ;;  Use (grvecs) to show AutosnapMarker
  7. ;;  No return , just show the method

  8. (defun c:gg(/ autosnapmarkercolor autosnapmarkersize bold distperpixel draftobj drag get_osmode ghostpt lst_osmode str_osmode time ypy_drawvecs ypy_getgrvecs ypy_strparse)
  9.   ;;  CAB  10/5/2006
  10.   ;;  Fools change a little about ","  (3/3/2007)
  11.   ;;
  12.   ;;  function to return the current osmode setting in the form of a string
  13.   ;;  if (getvar "osmode") = 175
  14.   ;;  (get_osmode)  returns   "_end,_mid,_cen,_nod,_int,_per"  
  15.   (defun get_osmode (/ cur_mode mode$)
  16.     (setq mode$ "")
  17.     (if (< 0 (setq cur_mode (getvar "osmode")) 16383)
  18.       (mapcar
  19.                                 (function
  20.                                         (lambda (x)
  21.                                                 (if (not (zerop (logand cur_mode (car x))))
  22.                                                         (if (zerop (strlen mode$))
  23.                                                                 (setq mode$ (cadr x))
  24.                                                                 (setq mode$ (strcat mode$ "," (cadr x)))
  25.                                                         )
  26.                                                 )
  27.                                         )
  28.                                 )
  29.                                 '((1 "_end") (2 "_mid") (4 "_cen") (8 "_nod") (16 "_qua") (32 "_int") (64 "_ins") (128 "_per") (256 "_tan") (512 "_nea") (1024 "_qui") (2048 "_app") (4096 "_ext") (8192 "_par"))
  30.       )
  31.     )
  32.     mode$
  33.   )
  34.   ;;My functions
  35.   (defun ypy_strparse (str delim / ptr lst)
  36.     (while (setq ptr (vl-string-search delim str))
  37.       (setq lst (cons (substr str 1 ptr) lst))
  38.       (setq str (substr str (+ ptr 2)))
  39.                 )
  40.                 (reverse (cons str lst))
  41.         )
  42.   (defun ypy_getgrvecs (pt dragpt lst / KEY)
  43.     (setq key T)
  44.     (while (and key lst)
  45.       (if (EQUAL (osnap dragpt (car lst)) pt 1E-6)
  46.         (setq key nil)
  47.         (setq lst (cdr lst))
  48.       )
  49.     )
  50.     (cdr (assoc        (car lst)
  51.                                          '(("_end"
  52.                                                          ((-1 1) (-1 -1))
  53.                                                          ((-1 -1) (1 -1))
  54.                                                          ((1 -1) (1 1))
  55.                                                          ((1 1) (-1 1))
  56.                                                  )                        ;square
  57.                                                         ("_mid"
  58.                                                                 ((0 1.414) (-1.225 -0.707))
  59.                                                                 ((-1.225 -0.707) (1.225 -0.707))
  60.                                                                 ((1.225 -0.707) (0 1.414))
  61.                                                         )                        ;triangle
  62.                                                         ("_cen"
  63.                                                                 ((0 1) (-0.707 0.707))
  64.                                                                 ((-0.707 0.707) (-1 0))
  65.                                                                 ((-1 0) (-0.707 -0.707))
  66.                                                                 ((-0.707 -0.707) (0 -1))
  67.                                                                 ((0 -1) (0.707 -0.707))
  68.                                                                 ((0.707 -0.707) (1 0))
  69.                                                                 ((1 0) (0.707 0.707))
  70.                                                                 ((0.707 0.707) (0 1))
  71.                                                         )                        ;circle
  72.                                                         ("_nod"
  73.                                                                 ((0 1) (-0.707 0.707))
  74.                                                                 ((-0.707 0.707) (-1 0))
  75.                                                                 ((-1 0) (-0.707 -0.707))
  76.                                                                 ((-0.707 -0.707) (0 -1))
  77.                                                                 ((0 -1) (0.707 -0.707))
  78.                                                                 ((0.707 -0.707) (1 0))
  79.                                                                 ((1 0) (0.707 0.707))
  80.                                                                 ((0.707 0.707) (0 1))
  81.                                                                 ((-1 1) (1 -1))
  82.                                                                 ((-1 -1) (1 1))
  83.                                                         )                        ;circle+cross
  84.                                                         ("_qua"
  85.                                                                 ((0 1.414) (-1.414 0))
  86.                                                                 ((-1.414 0) (0 -1.414))
  87.                                                                 ((0 -1.414) (1.414 0))
  88.                                                                 ((1.414 0) (0 1.414))
  89.                                                         )                        ;square rotate 45
  90.                                                         ("_int"
  91.                                                                 ((-1 1) (1 -1))
  92.                                                                 ((-1 -1) (1 1))
  93.                                                                 ((1 0.859) (-0.859 -1))
  94.                                                                 ((-1 0.859) (0.859 -1))
  95.                                                                 ((0.859 1) (-1 -0.859))
  96.                                                                 ((-0.859 1) (1 -0.859))
  97.                                                         )                        ;cross
  98.                                                         ("_ins"
  99.                                                                 ((-1 1) (-1 -0.1))
  100.                                                                 ((-1 -0.1) (0 -0.1))
  101.                                                                 ((0 -0.1) (0 -1.0))
  102.                                                                 ((0 -1.0) (1 -1))
  103.                                                                 ((1 -1) (1 0.1))
  104.                                                                 ((1 0.1) (0 0.1))
  105.                                                                 ((0 0.1) (0 1.0))
  106.                                                                 ((0 1.0) (-1 1))
  107.                                                         )                        ;two squares
  108.                                                         ("_per"
  109.                                                                 ((-1 1) (-1 -1))
  110.                                                                 ((-1 -1) (1 -1))
  111.                                                                 ((0 -1) (0 0))
  112.                                                                 ((0 0) (-1 0))
  113.                                                         )                        ;half square
  114.                                                         ("_tan"
  115.                                                                 ((0 1) (-0.707 0.707))
  116.                                                                 ((-0.707 0.707) (-1 0))
  117.                                                                 ((-1 0) (-0.707 -0.707))
  118.                                                                 ((-0.707 -0.707) (0 -1))
  119.                                                                 ((0 -1) (0.707 -0.707))
  120.                                                                 ((0.707 -0.707) (1 0))
  121.                                                                 ((1 0) (0.707 0.707))
  122.                                                                 ((0.707 0.707) (0 1))
  123.                                                                 ((1 1) (-1 1))
  124.                                                         )                        ;circle+line
  125.                                                         ("_nea"
  126.                                                                 ((-1 1) (1 -1))
  127.                                                                 ((1 -1) (-1 -1))
  128.                                                                 ((-1 -1) (1 1))
  129.                                                                 ((1 1) (-1 1))
  130.                                                         )                        ;two triangle
  131.                                                         ("_qui")                ; ???
  132.                                                         ("_app"
  133.                                                                 ((-1 1) (-1 -1))
  134.                                                                 ((-1 -1) (1 -1))
  135.                                                                 ((1 -1) (1 1))
  136.                                                                 ((1 1) (-1 1))
  137.                                                                 ((-1 1) (1 -1))
  138.                                                                 ((-1 -1) (1 1))
  139.                                                         )                        ;square+cross
  140.                                                         ("_ext"
  141.                                                                 ((0.1 0) (0.13 0))
  142.                                                                 ((0.2 0) (0.23 0))
  143.                                                                 ((0.3 0) (0.33 0))
  144.                                                         )                        ;three points
  145.                                                         ("_par" ((0 1) (-1 -1)) ((1 1) (0 -1))) ;two lines
  146.                                                 )
  147.          )
  148.     )
  149.   )
  150.   ;;Use grvecs
  151.   (defun ypy_drawvecs (Pt Vecs Size Color / lst matrix)
  152.     ;;no Z axis
  153.     (setq matrix (list (list Size 0.0 0.0 (car pt))
  154.                                                                          (list 0.0 Size 0.0 (cadr pt))
  155.                                                                          (list 0.0 0.0 1.0 0.0)
  156.                                                                          (list 0.0 0.0 0.0 1.0)
  157.                  )
  158.     )
  159.     (setq lst (mapcar 'cons
  160.                                                                 (mapcar (function (lambda (x) Color)) Vecs)
  161.                                                                 Vecs
  162.               )
  163.     )
  164.     (grvecs (apply 'append lst) matrix)
  165.   )
  166.   ;;****************************
  167.   ;;  Main Routine starts here  
  168.   ;;****************************
  169.   (vl-load-com)
  170.   (setq time T)
  171.   (setq str_osmode (get_osmode))
  172.   (setq lst_osmode (ypy_strparse str_osmode ","))
  173.   ;(setq draftobj (vla-get-Drafting
  174.   ;                 (vla-get-Preferences (vlax-get-acad-object))
  175.   ;               )
  176.   ;)
  177.   ;(setq autosnapmarkersize (vla-get-autosnapmarkersize draftobj))
  178.   ;(setq autosnapmarkercolor (vla-get-autosnapmarkercolor draftobj))
  179.         (setq autosnapmarkersize (atoi (getenv "AutoSnapSize")) autosnapmarkercolor (atoi (getenv "AutoSnapColor")))
  180.   (while time
  181.     (setq drag (grread T 15 0)) ;;Can change like (grread (setq drag (grread T 1 1)))
  182.     (cond
  183.                         ((= (car drag) 5)
  184.                                 (redraw)
  185.                                 (setq fm-get-gr drag drag (cadr drag))
  186.                                 (if (or (zerop (strlen str_osmode)) (null (setq ghostpt (osnap drag str_osmode))))
  187.                                         (setq ghostpt drag)
  188.                                         ;;Beacuse of mouse middle button scroll , calculate "distperpixel" every time
  189.                                         (progn (setq distperpixel (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))))
  190.                                                 ;;bold
  191.                                                 (setq bold (mapcar '* (list distperpixel distperpixel distperpixel) (list (+ autosnapmarkersize 0.5) autosnapmarkersize (- autosnapmarkersize 0.5))))
  192.                                                 (foreach item bold
  193.                                                         (ypy_drawvecs ghostpt (ypy_getgrvecs ghostpt drag lst_osmode) item autosnapmarkercolor))
  194.                                         )
  195.                                 )
  196.                         )
  197.                         ((= (car drag) 3)
  198.                                 (if (null (setq ghostpt (osnap (cadr drag) (get_osmode))))
  199.                                         (setq ghostpt (cadr drag))
  200.                                 )
  201.                                 (redraw)
  202.                                 (setq time nil)
  203.                         )
  204.     )
  205.                 (print fm-get-gr)
  206.   )
  207.   (prin1) ;can return ghostpt if want
  208. )


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

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 496个

财富等级: 日进斗金

 楼主| 发表于 2017-7-13 07:42:02 | 显示全部楼层

源文件,里面稍微修改了部分,不影响修改前的功能

在grread状态下实现捕捉功能并显示标记符号(实用).lsp

6.68 KB, 下载次数: 5, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 02:30 , Processed in 0.215182 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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