明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 839|回复: 18

[讨论] 移动效果

[复制链接]
发表于 2024-6-21 08:22:32 | 显示全部楼层 |阅读模式
如何实现如源泉递增复制文字的效果:从原来的图元生成一个新的图元,并跟随鼠标移动到新的位置(cad移动的效果)。
AutoCAD完全应用指南》上有个例子,(command "insert" blkname '(0 0)1 1 0 dwgnum name ssca)(commnad "move" (entlast) "" '(0 0) pause),即先生成图元到(0 0)点,然后用command move配合pause以实现效果。但是如何规避在移动的过程中取消命令,把在(0 0)插入的图元清除掉呢?
 楼主| 发表于 2024-6-22 18:02:23 | 显示全部楼层
自贡黄明儒 发表于 2024-6-21 16:00
试了下,你这方法不行,回车照样产生对象。

大神,我研究了某插件,知道原理了,但是对最主要的一步看不懂,他们是这么实现的,以复制出来图元进行复制为例:
选取图元>>图元
复制图元>>复制出来的图元
选取move的基点坐标>>基点坐标,比如(x y)
根据选取的基点生成基点点>>基点点

                  (command "._move")
                  (command 复制出来的图元)
                  (command 基点点);基点点和图元一块复制
                  (command "")
                  (command "non")
                  (command 基点坐标)
                  (command PAUSE);等待输入要移动到的坐标点
;;;下面这一句看不懂,太精妙
                  (setq 转换出来的坐标(TRANS (CDR (ASSOC 10 (ENTGET 基点点))) 0 1))

;;;上面这一句,如果 (command PAUSE)选取了点,那么转换出来的坐标=选取点的坐标;如果(command PAUSE)没有选取点,即我们中断了程序,那么转换出来的坐标=(2x,2y)。以下通过判断转换出来的坐标,进行移动或者删除图元。

                  (setq 坐标差值(MAPCAR '- 转换出来的坐标  基点坐标));计算转换出来的坐标和基点坐标的差值,
                  (if (EQUALD 基点坐标 坐标差值);如果计算差值相等,即(x y)=(2x-x  2y-y)的情况【(command PAUSE)中断,没有选取了点的情况)】
                    (PROGN (清除复制出来的图元) (setq 基点点  nil))
                    (PROGN (基点点改为转换出来的坐标的点));如果是选取了点,那么除非特殊情况,否则基点坐标不等于坐标差值。重新定义新的基点坐标,进行下一轮操作
                  最后(ENTDEL 基点点)进行删除多余的点。

发表于 2024-6-21 11:17:21 | 显示全部楼层
sniper1111 发表于 2024-6-21 11:02
我最近也在研究es如何取消。没有找到合适的方法。听说老迈可以,但我没找到

                        (while tool
                                (setq gr (vl-catch-all-apply 'grread '(t 7 0)));;;获取grread参数。
                                (if (vl-catch-all-error-p gr)        ;判断gr是否有错误。
                                        (progn
                                                (vl-cmdf "UNDO" "b" "y")
                                                (setq tool nil)
                                        )


判断有误就回撤一步,或者删除图元也行
 楼主| 发表于 2024-6-22 10:16:03 | 显示全部楼层
sniper1111 发表于 2024-6-21 11:17
(while tool
                                (setq gr (vl-catch-all-apply 'grread '(t 7 0)));;;获取grread参数。
                                (if (v ...

(defun C:asd()
  (setq catchit (vl-catch-all-apply 'fuzhiyidong nil))
  (if (vl-catch-all-error-p catchit)
    (princ "出错了")
    )
  )
(defun fuzhiyidong();以复制圆演示
(setq yuanneirong (Vlax-Ename->Vla-Object (car (entsel))));得到原来的圆
(setq fuzhi_nr(Vlax-Invoke-Method yuanneirong 'Copy));复制出新的圆
(setq fuzhi_pt (Vlax-Get yuanneirong 'Center));原来圆的坐标
  (command "move" (entlast) "" fuzhi_pt pause);移动
  )

试了一下,如果在 (setq yuanneirong (Vlax-Ename->Vla-Object (car (entsel))))这一步不去选圆,vl-catch-all-apply是可以捕捉到的错误的。但是不能捕捉到(command "move" (entlast) "" fuzhi_pt pause)这个move不选第二点的错误。一步一个坑啊。。。
发表于 2024-6-21 08:40:04 | 显示全部楼层
你可以尝试一下while+grread ,论坛里很多就搜grread
 楼主| 发表于 2024-6-21 08:44:17 | 显示全部楼层
sniper1111 发表于 2024-6-21 08:40
你可以尝试一下while+grread ,论坛里很多就搜grread

其实纠结的是能否省去先生成这一步,grread是不是也是有这个问题?比如文字,生成那一下是不是得给个坐标,中间取消了,是不是文字就生成在那个坐标上了?
发表于 2024-6-21 08:52:27 | 显示全部楼层
尝试一下这个函数(acet-ss-drag-move ss pt [prompt] [highlight [cursor]])
 楼主| 发表于 2024-6-21 08:58:11 | 显示全部楼层
lijiao 发表于 2024-6-21 08:52
尝试一下这个函数(acet-ss-drag-move ss pt  [highlight [cursor]])

大神,从哪儿找的这个函数啊,我的几个文档中都没搜到。分享下呗。
发表于 2024-6-21 09:00:52 | 显示全部楼层
liuxinkai 发表于 2024-6-21 08:58
大神,从哪儿找的这个函数啊,我的几个文档中都没搜到。分享下呗。

这是ET中的函数,早期的版本不主动安装ET
最后生成的对象,删除就行。
发表于 2024-6-21 09:45:43 | 显示全部楼层
liuxinkai 发表于 2024-6-21 08:44
其实纠结的是能否省去先生成这一步,grread是不是也是有这个问题?比如文字,生成那一下是不是得给个坐标 ...

用了vl-catch-all-apply以后就不会生成在坐标上了
发表于 2024-6-21 11:02:08 | 显示全部楼层
liuxinkai 发表于 2024-6-21 08:44
其实纠结的是能否省去先生成这一步,grread是不是也是有这个问题?比如文字,生成那一下是不是得给个坐标 ...

我最近也在研究es如何取消。没有找到合适的方法。听说老迈可以,但我没找到
 楼主| 发表于 2024-6-21 11:21:56 | 显示全部楼层
sniper1111 发表于 2024-6-21 11:17
(while tool
                                (setq gr (vl-catch-all-apply 'grread '(t 7 0)));;;获取grread参数。
                                (if (v ...

抽空学习一下,感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 21:32 , Processed in 0.170867 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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