明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3675|回复: 54

[资源] 另类:带捕捉、正交、极轴的grread函数--.NET测试版V1.0--8月28更新

    [复制链接]
发表于 2021-8-20 00:29 | 显示全部楼层 |阅读模式
本帖最后由 print1985 于 2021-9-2 10:55 编辑

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91191&highlight=grread
grread函数不能捕捉、正交、极轴,苦之久矣。G版有一个模拟的,写得非常好,但是高版本使用好像有点问题,而且物体多了比较卡。

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90447&page=1&extra=#pid604291
之前高飞鸟大神发过一个带点监视、动态、拖曳等很多功能的ARX神器,当时看不懂,也不会用,前几天又看突然懂了点点(还是很多不懂),但是可能有人出言不逊冒犯了大神,大神已经撤下了源码,无奈只好自己独立学习,目前做了.NET版的点监视器和按键监视器,给朋友们的玩玩,水平太菜bug可能不少,尝鲜版给大伙尝尝味道。


被高飞鸟大神亲自翻牌了,真是激动万分,感谢大神的鼓励。


更新说明:
2021.8.28:
1、尝鲜版之后进入测试版V1.0,后续会根据反馈意见以龟速更新(水平有限,见谅见谅)
2、本次更新加入定时器,可以在下面的楼层中找到例子(双dwg对图还是有点实用价值),内附说明
3、尝试解决尝鲜版中部分bug,加入切换文档事件、打开或新建文件事件时自动卸载点监视和按键监视,防止本图未卸载又切换到其它文档后报错
4、定时器目前已知问题是不能和CAD自带的lisp编辑器vlide同时使用,如果要使用vlide请先停止计时器。
5、win10暂未测试,不一定能用。

使用说明:
1、点监视器和高飞鸟大神的比较相似,但是需要用vl-acad-defun定义回调函数(例子里面有说明)。
2、按键监视器能监视按键和鼠标(左右按键和滚轮),返回按键代码(例子里面有说明)。
3、支持捕捉、正交、极轴,但是使用方法和grread函数还是不一样,需要看例子里面的说明。
4、netload命令加载附件中的DLL文件,加载lisp文件,ok开始尝鲜。
5、记得新开一个CAD,爆炸了我不负责。。。

已知问题:
1、win10暂未测试,不一定能用。
2、监视器其实是事件(类似反应器),因此不能在回调函数中直接使用CMD命令,修改图元参数也只能用VL函数,不能直接用修改组码的方式,否则会出错。但是后来发现可以通过vla-SendCommand函数间接使用,后面有时间我再弄2个例子。
3、自身选择集的部分追踪点没有排除掉,目前还没找到解决办法,但是不影响使用。
4、例子很简单,可能有错误,主要是展示用,大家有更好的代码可以发上来,共同学习。

致敬G版、高飞鸟大神!
感谢群内:波总、MUSIC-DIE、xj6019、vita、重生、aihuyujian等朋友的帮助和支持

论坛下载的附件如果无法解压,请用修复软件修复,感谢各位大神
有baitang36大神的汇编版:http://bbs.mjtd.com/thread-182499-1-1.html
highflybird大神C++版:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=182515&highlight=%D0%DE%B8%B4
tryhi大神的lisp版:http://bbs.mjtd.com/thread-182474-1-1.html










本帖子中包含更多资源

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

x

点评

不断拓宽lisp边界,强烈赞!!!!!  发表于 2021-8-21 09:44

评分

参与人数 13明经币 +14 金钱 +35 收起 理由
Wu_Enwu + 1
言戲無軍 + 1 + 5 很给力!
highflybir + 2 + 30 很给力!
flythinking + 1
Kye + 1 赞一个!
aihuyujian + 1 赞一个!
morsin + 1 赞一个!
xj6019 + 1 永远值得尊敬的大神,谢谢分享好的作品
tigcat + 1 阿甘大侠,您怎么如此给力!!
USER2128 + 1 赞一个!

查看全部评分

发表于 2021-8-20 09:09 | 显示全部楼层
G版的一直在用  确实物体多了会卡 而且移动的过块直接就中途退出了  不过已经很牛了
你这更牛啊 期待最终不改之完全不改无BUG版
今天2个币都送出去了 明天给你加分 哈哈

点评

谢谢老哥捧场  发表于 2021-8-20 21:38
回复 支持 1 反对 1

使用道具 举报

发表于 2021-8-30 12:18 | 显示全部楼层
本帖最后由 brainstorm 于 2021-8-30 13:22 编辑

我的动态拖动函数 2012以上可用
  1. (defun c:t1(/ txtobj p loop rtnjig)
  2.   
  3.   ;;选择文字
  4.   (setq txtobj
  5.     (vlax-ename->vla-object
  6.       (car(entsel"\n选择文字"))
  7.     )
  8.   )
  9.   
  10.   ;;创建选择集
  11.   (setq ss (ssadd))
  12.   (setq ss
  13.     (ssadd
  14.       (vlax-vla-object->ename txtobj)ss)
  15.   )
  16.   
  17.   ;;回调函数  
  18.   (defun callback1(p)
  19.     (vla-put-TextString txtobj
  20.       (rtos (car p)2 3)
  21.     )
  22.     ;;方法1 更新图元
  23.     ;(vla-Update txtobj)
  24.     ;t
  25.     ;;方法2:更新,需要返回选择集ss
  26.     ss
  27.   )
  28.   
  29.   ;;定义一个lisp函数
  30.   (vl-acad-defun "callback1")
  31.   
  32.   ;;基点取上一点
  33.   (setq p (getvar "LASTPOINT"))
  34.   
  35.   ;;循环打开
  36.   (setq loop t)
  37.   
  38.   ;;开始循环
  39.   (while loop
  40.     (setq rtnjig
  41.       (gx:drawjig    ;gx:drawjig
  42.         ;; 回调函数
  43.         "callback1"
  44.         ;; 提示字符串
  45.         "\n拖动鼠标测试: "
  46.         ;; Keyword string
  47.         ;;"A_A测试关键字;S_S测试关键字S"
  48.         "S _ S;A _ A"
  49.         ;; 接受3dpoint
  50.         (+ 2 128 2048)                  
  51.         ;; 光标类型
  52.         2
  53.         ;; 基点
  54.         p
  55.       )
  56.     )

  57.     (cond
  58.       ;;用户选择了点
  59.       ((eq (type rtnjig) 'list)
  60.         (progn
  61.           (setq loop nil)
  62.           (vla-Update txtobj)
  63.           (princ "\n程序结束")
  64.           (princ)
  65.           (setq p rtnjig)
  66.         )
  67.       )
  68.       
  69.       ;;用户键入关键字
  70.       ((eq rtnjig "A")
  71.         (progn
  72.           (princ "\n关键字A")
  73.           (princ)
  74.           (setq loop t)
  75.         )
  76.       )
  77.       
  78.       ;;用户键入关键字
  79.       ((eq rtnjig "S")
  80.         (progn
  81.           (princ "\n关键字S")
  82.           (princ)
  83.           (setq loop t)
  84.         )
  85.       )
  86.       
  87.       ;;用户按右键,空字符
  88.       ((eq rtnjig "")
  89.         (progn
  90.           ((vla-Update txtobj)
  91.             (setq loop nil)
  92.           )
  93.         )
  94.       )
  95.       
  96.       ;;用户取消,esc键
  97.       ((not rtnjig)
  98.         (progn
  99.           ((vla-Update txtobj)
  100.             (setq loop nil)
  101.           )
  102.         )
  103.       )
  104.     );end of cond
  105.   );end of while loop
  106. )

  107. ;;测试dragmove,作用同acet函数dragmove
  108. (defun c:t2(/ ss ss_erase pt)
  109.   
  110.   ;;删除选择集
  111.   (defun ss_erase (ss / i)
  112.     (setq i -1)
  113.     (repeat (sslength ss)
  114.       (entdel (ssname ss (setq i (1+ i))))
  115.     )
  116.   )
  117.   
  118.   ;;选择移动的图元
  119.   (setq ss (ssget))
  120.   (setq pt (getpoint"\选择基点:"))
  121.   (if
  122.     (not
  123.       (gx:ss:dragmove
  124.         ss
  125.         pt
  126.         "\n标注位置:"
  127.       )
  128.     )
  129.     (ss_erase ss)
  130.   )
  131. )

本帖子中包含更多资源

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

x

点评

666 多谢共享  发表于 2021-8-30 18:57
发表于 2021-9-21 16:40 | 显示全部楼层
请教大佬下面这个,复制的时候该如何实现拖动效果呢
、(defun c:tt5(/ oce ss p1 p2)
   (setq n1 10)
   (defun *error* (msg)
     (if ss (sshighlight ss 4)) ;取消亮显
    (SSSETFIRST NIL)
     (princ "error:")
     (princ msg)
   )
(setq oce(getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget))
    (if (< (sslength ss) n1)  (SSSETFIRST NIL SS))
    (sshighlight ss 3)
(if (null ss) (exit))
(setq p0(getpoint"\n指定基点:"))
(setq p2 p0)
(if (null p0 )(exit))
(princ "\n指定第二点或位移:")
(while t
(setq p1(getpoint p0))
(setq ent (entlast))
(if (null p1) (mosi11) (mosi12))
(setq tempss ss)
(setq ss (entbackss ent))
(setq p2 (getvar "lastpoint"))
    (vl-cmdf ".copy" ss "")
   (command)
    (command "select" ss "")
      (sshighlight ss 3)
)      
(princ)
)
(defun mosi12()
(vl-cmdf ".copy" ss "" p2 p1 )
(setq juli (distance p0 p1))
(setq  x0 (car p0))
(setq  y0 (cadr p0))
(setq p0 p1)
(setq  x1 (car p1))
(setq  y1 (cadr p1))
(setq  x (- x1 x0))
(setq  y (- y1 y0))
(setq   hudu(atan y x) )
(setq  x1 (+ x0 x))
(setq  y1 (+ y0 y))
(setq  p1 (list x1 y1 0.0))
(princ (strcat "\n指定下一点或继续位移<" (rtos juli ) ">:"))
)
(defun mosi11()
        (setq p1 (list (+ (nth 0 p0) (* juli (cos hudu)))
                       (+ (nth 1 p0) (* juli (sin hudu)))
                       (nth 2 p0)
                 )
        )
(vl-cmdf ".copy" ss "" p2 p1 )
(setq juli (distance p0 p1))
(setq p0 p1)
(princ (strcat "\n指定下一点或继续位移<" (rtos juli ) ">:"))
)
 楼主| 发表于 2021-8-20 00:29 | 显示全部楼层
本帖最后由 print1985 于 2021-8-20 00:32 编辑


动态测量


动态插入图块(图块名字自己修改哈,而且图中必须先有这个图块)


动态插入文字

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很给力!&amp;lt;hcfy-result style=&amp;quot;display:

查看全部评分

 楼主| 发表于 2021-8-20 00:30 | 显示全部楼层
本帖最后由 print1985 于 2021-8-20 22:25 编辑

新增例子:一键关键字,不用按空格确认
天正很多命令都是一键关键字了,我lisp也行


本帖子中包含更多资源

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

x
 楼主| 发表于 2021-8-20 00:36 | 显示全部楼层
本帖最后由 print1985 于 2021-8-28 22:01 编辑

定时器例子:

2个dwg同步对图--致敬高飞鸟大神
本例子核心代码改自高飞鸟大神的对图神器lisp版:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=106978&ctid=3

1个dwg同步视口对图在这里:http://bbs.mjtd.com/thread-183514-1-1.html

例子:大郎该嗑药了




双CAD同步对图,延迟严重,例子就暂时不发了,大家看个笑话,后面再弄弄

本帖子中包含更多资源

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

x
发表于 2021-8-20 09:37 | 显示全部楼层
期待完善,支持低版本

点评

低版本缺函数,有个变相的方法,但是正常卸载不掉,后面有时间再弄下  发表于 2021-8-20 21:28
发表于 2021-8-20 09:59 | 显示全部楼层
高人高人,膜拜。
发表于 2021-8-20 13:59 | 显示全部楼层
很久没来,一打开网页就看见大神的帖子,膜拜
以前一直用老毛子的ARX程序——DynDraw,跟楼主的功能类似。
收藏了,非常感谢!

点评

谢谢版主,真的是过奖了,小弟不是大神,lisp学得渣,东抄抄西抄抄,c#也才入门。。。慢慢学习  发表于 2021-8-20 21:18
发表于 2021-8-20 21:02 | 显示全部楼层
本帖最后由 MUSIC-DIE 于 2021-8-20 21:41 编辑

大神新作!!!!!!!!!!!
读了移动的那个源码,有2个小问题想问一下
1、在PTcallback  和 KEYcallback    中每次移动鼠标都进行了   移动和缩放等的操作,为什么在点了PT2之后,依然需要再移动一次

2、PTcallback  调用的时候,没有看到传参PT,这个参数有什么用呢?  是GLointMonitor 传给 PTcallback  的当前鼠标坐标吗?


 楼主| 发表于 2021-8-20 21:25 | 显示全部楼层
MUSIC-DIE 发表于 2021-8-20 21:02
大神新作!!!!!!!!!!!
读了移动的那个源码,有个小问题想问一下
在PTcallback  和 KEYcallback ...

getpoint的pt2才是真正捕捉到的点,而点监视函数返回的pt是光标的真实位置,真实位置不是捕捉定位的坐标,最后当然得移动到pt2去,否则就等于没捕捉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2022-5-18 13:37 , Processed in 0.802428 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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