明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1836|回复: 5

[求助]怎样模仿夹点磁吸效果

[复制链接]
发表于 2009-7-6 09:54:00 | 显示全部楼层 |阅读模式

夹点编辑时,当鼠标靠近夹点,自动被磁吸到夹点中心。

问:怎样在LISP编程时模仿之——怎样更改光标位置!!

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-3-23 23:39:51 | 显示全部楼层
版主我找了个磁铁效果,光标点图后,不能离开图。
发表于 2012-3-24 03:13:26 | 显示全部楼层
是否可以理解为模拟捕捉?不知道这个是否是楼主要的效果?
  1. ;;; Draw perpendicular line
  2. ;;; Alan J. Thompson, 10.15.09
  3. ;;; Edited by GSLS(SS) 2011-03-08
  4. (defun c:Lper (/ foo myerr olderr #Ent #Read pt p0 ang ent blk?)
  5.   (defun foo (/ is_go lst mid m)   
  6.     (if        (setq pt (osnap (cadr #read) "_end,_mid,_cen,_nod,_int,_tan,_per,_nea" ))
  7.       (progn
  8.         (setq is_go T
  9.               lst (list "_end" "_mid" "_cen" "_nod" "_int" "_tan" "_per" "_nea"))
  10.         (while (and is_go lst)
  11.           (setq        mid (car lst)
  12.                 lst (cdr lst))
  13.           (if (equal pt (osnap (cadr #read) mid))
  14.             (setq m mid  is_go        nil)))
  15.         (if m (osMark (list pt m (cadr #read))))))
  16.     (or pt (setq pt (cadr #Read)))
  17.     (setq pt (trans pt 1 0))
  18.     (setq p0 (vlax-curve-getclosestpointto #Ent pt T))
  19.   );_Add osmark
  20.   (defun myerr (msg)        
  21.     (if        msg (princ msg))
  22.     (if blk? (entdel #ent))
  23.     (setq *error* olderr)
  24.     (*error* nil));_end err
  25.   (setq olderr *error*)  
  26.   (setq #Ent (car (entsel "\n选择曲线: ")))   
  27.   (if (and #ent (vl-position (cdr (assoc 0 (entget #Ent)))  (list "LWPOLYLINE" "ARC" "LINE" "CIRCLE" "ELLIPSE" "SPLINE")))      
  28.     (while (and (/= 25 (car (setq #Read (grread T 1 1)))) (/= (car #Read) 11) (/= (car #Read) 2))
  29.       (princ "\r选择点: ")
  30.       (redraw)
  31.       (if (vl-consp (cadr #Read))(foo))
  32.       (if p0
  33.         (grdraw p0 (trans pt 1 0) 1) ;_grdraw
  34.       ) ;_if      
  35.       (if (and (eq 3 (car #Read)) (foo))
  36.         (if (not (equal pt p0 1e-6))
  37.           (entmake
  38.             (list
  39.               (cons 0 "LINE")
  40.               (cons 10 p0)
  41.               (cons 11 pt)
  42.             )
  43.           );_entmake
  44.           (progn ;_the part writen by Lee Mac
  45.             (setq ang  (+ (get-AngleAtPoint #Ent p0) _pi2))
  46.             (line-ang p0 ang)
  47.           )
  48.         )
  49.       ) ;_ if
  50.     ) ;_ while   
  51.   ) ;_ if
  52.   (redraw)
  53.   (myerr nil)
  54.   (princ)
  55. ) ;_ defun
  56. ;;; 参数 o 列表
  57. ;;; (显示捕捉点,捕捉模式,鼠标读到的点)
  58. ;;;捕捉模式:
  59. ;;;         "_end" "_mid" "_cen" "_nod" "_qua" "_int" "_ins" "_tan"  "_per" "_nea" "_app"
  60. ;;;          端点   中点   中心   节点   象限   交点   插入   切点   垂足    最近  外观交点
  61. ;;;(osMark '((21039.1 7673.26 0.0) "_nea" (21005.3 7595.91 0.0)))
  62. ;;;(check-pt '((21039.1 7673.26 0.0) (21005.3 7595.91 0.0)))
  63. (defun osMark (o / s drft osGrv)
  64.   (setq        s (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE")))
  65.         o (cons (trans (car o) 1 3) (cdr o))
  66.   )
  67.   (setq        osGrv (osmode-grvecs-lst
  68.                 (vla-get-AutoSnapMarkerColor
  69.                   (setq        drft (vla-get-drafting
  70.                                (vla-get-preferences
  71.                                  (vlax-get-acad-object)
  72.                                )
  73.                              )
  74.                   )
  75.                 )
  76.                 (vla-get-AutoSnapMarkerSize drft)
  77.               )
  78.   )
  79.   (grvecs (cdr (assoc (cadr o) osGrv))
  80.           (list        (list s 0. 0. (caar o))
  81.                 (list 0. s 0. (cadar o))
  82.                 (list 0. 0. s (caddar o))
  83.                 (list 0. 0. 0. 1.)
  84.           )
  85.   )
  86. )
  87. ;;;by Lee Mac
  88. (defun line-ang (p0 ang / ent #Read)
  89.   (setq ent (entget (entmakex (list (cons 0 "LINE") (cons 10 p0)(cons 11 p0)))))
  90.   (while (= 5 (car (setq #Read (grread T 13 0))))             
  91.               (entupd(cdr(assoc -1(entmod(list(assoc -1 ent)(cons 11 (trans
  92.                         (polar p0 ang ((if(minusp ((lambda (n)
  93.                                       (- (caddr (trans (cadr #read) 1 n))
  94.                                          (caddr (trans p0 1 n))))
  95.                                                    (polar (list 0. 0. 0.) ang 1.))) -  +)
  96.                                 (distance p0 (cadr #read)))) 1 0)))))))))
  97. ;;get AngatPoint of curve
  98. (defun get-AngleAtPoint (e p / el v a)
  99.   (if (= (cdr (assoc 0 (setq el (entget e)))) "LINE")
  100.     (angle (cdr (assoc 10 el)) (cdr (assoc 11 el)))
  101.     (setq p (vlax-curve-getClosestPointTo e p)
  102.           v (vlax-curve-getfirstderiv
  103.               e
  104.               (vlax-curve-getparamatpoint
  105.                 e
  106.                 p
  107.               )
  108.             )
  109.           a (angle p (mapcar (function +) p v))
  110.     )
  111.   )
  112. )
  113. ;;
  114. (defun osmode-grvecs-lst (col ass / -ASS ASS COL)
  115.   ;; By Evgeniy Elpanov (Modified by Lee McDonnell)
  116.   (setq -ass (- ass))
  117.   (list        (list "_end"
  118.               col
  119.               (list -ass -ass)
  120.               (list -ass ass)
  121.               col
  122.               (list (1- -ass) (1- -ass))
  123.               (list (1- -ass) (1+ ass))
  124.               col
  125.               (list -ass ass)
  126.               (list ass ass)
  127.               col
  128.               (list (1- -ass) (1+ ass))
  129.               (list (1+ ass) (1+ ass))
  130.               col
  131.               (list ass ass)
  132.               (list ass -ass)
  133.               col
  134.               (list (1+ ass) (1+ ass))
  135.               (list (1+ ass) (1- -ass))
  136.               col
  137.               (list ass -ass)
  138.               (list -ass -ass)
  139.               col
  140.               (list (1+ ass) (1- -ass))
  141.               (list (1- -ass) (1- -ass))
  142.         )
  143.         (list "_mid"
  144.               col
  145.               (list -ass -ass)
  146.               (list 0. ass)
  147.               col
  148.               (list (1- -ass) (1- -ass))
  149.               (list 0. (1+ ass))
  150.               col
  151.               (list 0. ass)
  152.               (list ass -ass)
  153.               col
  154.               (list 0. (1+ ass))
  155.               (list (1+ ass) (1- -ass))
  156.               col
  157.               (list ass -ass)
  158.               (list -ass -ass)
  159.               col
  160.               (list (1+ ass) (1- -ass))
  161.               (list (1- -ass) (1- -ass))
  162.         )
  163.         (list "_cen"
  164.               7
  165.               (list (* -ass 0.2) 0.)
  166.               (list (* ass 0.2) 0.)
  167.               7
  168.               (list 0. (* -ass 0.2))
  169.               (list 0. (* ass 0.2))
  170.               col
  171.               (list -ass 0.)
  172.               (list (* -ass 0.86) (* ass 0.5))
  173.               col
  174.               (list (* -ass 0.86) (* ass 0.5))
  175.               (list (* -ass 0.5) (* ass 0.86))
  176.               col
  177.               (list (* -ass 0.5) (* ass 0.86))
  178.               (list 0. ass)
  179.               col
  180.               (list 0. ass)
  181.               (list (* ass 0.5) (* ass 0.86))
  182.               col
  183.               (list (* ass 0.5) (* ass 0.86))
  184.               (list (* ass 0.86) (* ass 0.5))
  185.               col
  186.               (list (* ass 0.86) (* ass 0.5))
  187.               (list ass 0.)
  188.               col
  189.               (list ass 0.)
  190.               (list (* ass 0.86) (* -ass 0.5))
  191.               col
  192.               (list (* ass 0.86) (* -ass 0.5))
  193.               (list (* ass 0.5) (* -ass 0.86))
  194.               col
  195.               (list (* ass 0.5) (* -ass 0.86))
  196.               (list 0. -ass)
  197.               col
  198.               (list 0. -ass)
  199.               (list (* -ass 0.5) (* -ass 0.86))
  200.               col
  201.               (list (* -ass 0.5) (* -ass 0.86))
  202.               (list (* -ass 0.86) (* -ass 0.5))
  203.               col
  204.               (list (* -ass 0.86) (* -ass 0.5))
  205.               (list -ass 0.)
  206.         )
  207.         (list "_nod"
  208.               col
  209.               (list -ass -ass)
  210.               (list ass ass)
  211.               col
  212.               (list -ass ass)
  213.               (list ass -ass)
  214.               col
  215.               (list -ass 0.)
  216.               (list (* -ass 0.86) (* ass 0.5))
  217.               col
  218.               (list (* -ass 0.86) (* ass 0.5))
  219.               (list (* -ass 0.5) (* ass 0.86))
  220.               col
  221.               (list (* -ass 0.5) (* ass 0.86))
  222.               (list 0. ass)
  223.               col
  224.               (list 0. ass)
  225.               (list (* ass 0.5) (* ass 0.86))
  226.               col
  227.               (list (* ass 0.5) (* ass 0.86))
  228.               (list (* ass 0.86) (* ass 0.5))
  229.               col
  230.               (list (* ass 0.86) (* ass 0.5))
  231.               (list ass 0.)
  232.               col
  233.               (list ass 0.)
  234.               (list (* ass 0.86) (* -ass 0.5))
  235.               col
  236.               (list (* ass 0.86) (* -ass 0.5))
  237.               (list (* ass 0.5) (* -ass 0.86))
  238.               col
  239.               (list (* ass 0.5) (* -ass 0.86))
  240.               (list 0. -ass)
  241.               col
  242.               (list 0. -ass)
  243.               (list (* -ass 0.5) (* -ass 0.86))
  244.               col
  245.               (list (* -ass 0.5) (* -ass 0.86))
  246.               (list (* -ass 0.86) (* -ass 0.5))
  247.               col
  248.               (list (* -ass 0.86) (* -ass 0.5))
  249.               (list -ass 0.)
  250.         )
  251.         (list "_qua"
  252.               col
  253.               (list 0. -ass)
  254.               (list -ass 0.)
  255.               col
  256.               (list 0. (1- -ass))
  257.               (list (1- -ass) 0.)
  258.               col
  259.               (list -ass 0.)
  260.               (list 0. ass)
  261.               col
  262.               (list (1- -ass) 0.)
  263.               (list 0. (1+ ass))
  264.               col
  265.               (list 0. ass)
  266.               (list ass 0.)
  267.               col
  268.               (list 0. (1+ ass))
  269.               (list (1+ ass) 0.)
  270.               col
  271.               (list ass 0.)
  272.               (list 0. -ass)
  273.               col
  274.               (list (1+ ass) 0.)
  275.               (list 0. (1- -ass))
  276.         )
  277.         (list "_int"
  278.               col
  279.               (list -ass -ass)
  280.               (list ass ass)
  281.               col
  282.               (list -ass (1+ -ass))
  283.               (list ass (1+ ass))
  284.               col
  285.               (list (1+ -ass) -ass)
  286.               (list (1+ ass) ass)
  287.               col
  288.               (list -ass ass)
  289.               (list ass -ass)
  290.               col
  291.               (list -ass (1+ ass))
  292.               (list ass (1+ -ass))
  293.               col
  294.               (list (1+ -ass) ass)
  295.               (list (1+ ass) -ass)
  296.         )
  297.         (list "_ins"
  298.               col
  299.               (list (* -ass 0.1) (* -ass 0.1))
  300.               (list -ass (* -ass 0.1))
  301.               col
  302.               (list -ass (* -ass 0.1))
  303.               (list -ass ass)
  304.               col
  305.               (list -ass ass)
  306.               (list (* ass 0.1) ass)
  307.               col
  308.               (list (* ass 0.1) ass)
  309.               (list (* ass 0.1) (* ass 0.1))
  310.               col
  311.               (list (* ass 0.1) (* ass 0.1))
  312.               (list ass (* ass 0.1))
  313.               col
  314.               (list ass (* ass 0.1))
  315.               (list ass -ass)
  316.               col
  317.               (list ass -ass)
  318.               (list (* -ass 0.1) -ass)
  319.               col
  320.               (list (* -ass 0.1) -ass)
  321.               (list (* -ass 0.1) (* -ass 0.1))
  322.               col
  323.               (list (1- (* -ass 0.1)) (1- (* -ass 0.1)))
  324.               (list (1- -ass) (1- (* -ass 0.1)))
  325.               col
  326.               (list (1- -ass) (1- (* -ass 0.1)))
  327.               (list (1- -ass) (1+ ass))
  328.               col
  329.               (list (1- -ass) (1+ ass))
  330.               (list (1+ (* ass 0.1)) (1+ ass))
  331.               col
  332.               (list (1+ (* ass 0.1)) (1+ ass))
  333.               (list (1+ (* ass 0.1)) (1+ (* ass 0.1)))
  334.               col
  335.               (list (1+ (* ass 0.1)) (1+ (* ass 0.1)))
  336.               (list (1+ ass) (1+ (* ass 0.1)))
  337.               col
  338.               (list (1+ ass) (1+ (* ass 0.1)))
  339.               (list (1+ ass) (1- -ass))
  340.               col
  341.               (list (1+ ass) (1- -ass))
  342.               (list (1- (* -ass 0.1)) (1- -ass))
  343.               col
  344.               (list (1- (* -ass 0.1)) (1- -ass))
  345.               (list (1- (* -ass 0.1)) (1- (* -ass 0.1)))
  346.         )
  347.         (list "_tan"
  348.               col
  349.               (list -ass ass)
  350.               (list ass ass)
  351.               col
  352.               (list (1- -ass) (1+ ass))
  353.               (list (1+ ass) (1+ ass))
  354.               col
  355.               (list -ass 0.)
  356.               (list (* -ass 0.86) (* ass 0.5))
  357.               col
  358.               (list (* -ass 0.86) (* ass 0.5))
  359.               (list (* -ass 0.5) (* ass 0.86))
  360.               col
  361.               (list (* -ass 0.5) (* ass 0.86))
  362.               (list 0. ass)
  363.               col
  364.               (list 0. ass)
  365.               (list (* ass 0.5) (* ass 0.86))
  366.               col
  367.               (list (* ass 0.5) (* ass 0.86))
  368.               (list (* ass 0.86) (* ass 0.5))
  369.               col
  370.               (list (* ass 0.86) (* ass 0.5))
  371.               (list ass 0.)
  372.               col
  373.               (list ass 0.)
  374.               (list (* ass 0.86) (* -ass 0.5))
  375.               col
  376.               (list (* ass 0.86) (* -ass 0.5))
  377.               (list (* ass 0.5) (* -ass 0.86))
  378.               col
  379.               (list (* ass 0.5) (* -ass 0.86))
  380.               (list 0. -ass)
  381.               col
  382.               (list 0. -ass)
  383.               (list (* -ass 0.5) (* -ass 0.86))
  384.               col
  385.               (list (* -ass 0.5) (* -ass 0.86))
  386.               (list (* -ass 0.86) (* -ass 0.5))
  387.               col
  388.               (list (* -ass 0.86) (* -ass 0.5))
  389.               (list -ass 0.)
  390.         )
  391.         (list "_per"
  392.               col
  393.               (list -ass -ass)
  394.               (list -ass ass)
  395.               col
  396.               (list (1- -ass) (1- -ass))
  397.               (list (1- -ass) (1+ ass))
  398.               col
  399.               (list ass -ass)
  400.               (list -ass -ass)
  401.               col
  402.               (list (1+ ass) (1- -ass))
  403.               (list (1- -ass) (1- -ass))
  404.               col
  405.               (list -ass 0.)
  406.               (list 0. 0.)
  407.               col
  408.               (list -ass -1.)
  409.               (list 0. -1.)
  410.               col
  411.               (list 0. 0.)
  412.               (list 0. -ass)
  413.               col
  414.               (list -1. 0.)
  415.               (list -1. -ass)
  416.         )
  417.         (list "_nea"
  418.               col
  419.               (list -ass -ass)
  420.               (list ass ass)
  421.               col
  422.               (list -ass ass)
  423.               (list ass ass)
  424.               col
  425.               (list (1- -ass) (1+ ass))
  426.               (list (1+ ass) (1+ ass))
  427.               col
  428.               (list -ass ass)
  429.               (list ass -ass)
  430.               col
  431.               (list ass -ass)
  432.               (list -ass -ass)
  433.               col
  434.               (list (1+ ass) (1- -ass))
  435.               (list (1- -ass) (1- -ass))
  436.         )
  437.         (list "_app"
  438.               col
  439.               (list -ass -ass)
  440.               (list ass ass)
  441.               col
  442.               (list ass -ass)
  443.               (list -ass ass)
  444.               col
  445.               (list -ass -ass)
  446.               (list -ass ass)
  447.               col
  448.               (list (1- -ass) (1- -ass))
  449.               (list (1- -ass) (1+ ass))
  450.               col
  451.               (list -ass ass)
  452.               (list ass ass)
  453.               col
  454.               (list (1- -ass) (1+ ass))
  455.               (list (1+ ass) (1+ ass))
  456.               col
  457.               (list ass ass)
  458.               (list ass -ass)
  459.               col
  460.               (list (1+ ass) (1+ ass))
  461.               (list (1+ ass) (1- -ass))
  462.               col
  463.               (list ass -ass)
  464.               (list -ass -ass)
  465.               col
  466.               (list (1+ ass) (1- -ass))
  467.               (list (1- -ass) (1- -ass))
  468.         )
  469.   )
  470. )
发表于 2012-3-26 16:33:56 来自手机 | 显示全部楼层
我的动态粗糙度是否是你要的效果,仅磁吸了最近点,其它特殊点的磁吸可以扩展
 楼主| 发表于 2012-3-26 20:25:28 | 显示全部楼层
本帖最后由 caoyin 于 2012-3-26 20:26 编辑

所谓磁吸,就是光标距离某个点较劲的时候,那个点可以像磁铁一样把光标吸过去,而不是点的捕捉
发表于 2012-3-27 16:05:01 | 显示全部楼层
这个……基本上很难
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 04:45 , Processed in 0.157534 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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