明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1370|回复: 14

[提问] 如何实现文字平滑挪动效果

[复制链接]
发表于 2018-6-13 14:03 | 显示全部楼层 |阅读模式
各位好,我想实现一个文字平滑移动的效果,代码如下,创建文字的组码均为已知,采用循环的方式使文字不断移动位置,但是每次都看不到效果,一会功夫直接跳到最后一个坐标点生成文字,如果非要看到效果除非加上(command "REGEN")一起循环,但是在复杂图纸中会卡顿,请教大神有没解决的办法使文字每步都能刷新看到,从而实现平滑挪动,感谢!
(entmake (list (cons 0 "TEXT") (cons 1 en1) (cons 40 en40)   
(cons 41 en41) (cons 10 pt1) (cons 50 hd) (cons 7 en7) (cons 8 en8)));文字组码创建均为已知
(setq nn (entlast))
(repeat 100
(setq pt2 (polar pt1 hd 100));计算下个坐标点
(command "delay" 10);延时执行
(setq clww1 (assoc 10 (entget en)))
(setq clww2 (cons 10 pt2))
(entmod (subst clww2 clww1 (entget nn)));修改文字坐标点
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-6-16 21:42 | 显示全部楼层

  1. ;;entmod 函数文字移动效果
  2. (defun c:test1()
  3. (setq stxt(tblsearch "style"(getvar "TEXTSTYLE")))
  4. (entmod (subst (cons 3 "dim.shx")(assoc 3 stxt) stxt))
  5. (setq h (/ (getvar "VIEWSIZE") 5.0))
  6. (entmake (list '(0 . "TEXT")(cons 1 "text123")(list 10 0 0 0)(cons 40 h)))
  7. (setq en (entlast) dxf (entget en) loop t)
  8. (princ "\n开始循环,右键结束")
  9. (while loop
  10.         (setq mouse (grread t 5 0) Flag (car mouse))
  11.         (cond
  12.                 ((= Flag 2)(princ "\n你按下了键盘,键盘编码: ")(princ (cadr mouse)))
  13.                 ((= Flag 3)(princ "\n你按下了鼠标左键,当前坐标: ")(princ (cadr mouse)))
  14.                 ((= Flag 11)(princ "\n你按下了鼠标右键,程序结束。")(setq loop nil))
  15.                 ((= Flag 5) (entmod(setq dxf (subst (cons 10 (cadr mouse))(assoc 10 dxf) dxf))))
  16.                 (t (princ "\n未知输入。")(setq loop nil))
  17.         )
  18. )(princ)
  19. )

  20. ;;acet-ss-drag-move 函数文字移动效果,CAD2016以上版本无需加载 ACET 函数
  21. (defun c:test2()
  22. (princ "选择需要移动的文字")
  23. (setq p2 (acet-ss-drag-move (setq ss(ssget))(setq p1(getpoint "\n起始点:")) "\n移动到..." 1 0))
  24. (command "_move" ss "" p1 p2)
  25. (princ)
  26. )

还有其他几种方法就不一一列举了。
发表于 2018-8-9 10:58 | 显示全部楼层
本帖最后由 namezg 于 2018-8-9 12:17 编辑

(defun c:test (/ nn pt1 hd pt2)
        (setvar "cmdecho" 0)
        (setq pt1 (getpoint "\n请输入文字的第一对齐点: "))
        (setq nn (entmakex (list (cons 0 "TEXT") (cons 1 "文字") (cons 40 3.5)(cons 41 1) (cons 10 pt1) (cons 50 (setq hd (* 0.25 pi))) (cons 7 "standard") (cons 8 "0"))))
        (repeat 100
                (setq pt2 (polar pt1 hd 1.0));计算下个坐标点
                (command "delay" 10);延时执行
                (entmod (subst (cons 10 pt2) (cons 10 pt1) (entget nn)));修改文字坐标点
                ;(command "REGEN")
                (setq pt1 pt2)
        )
        (setvar "cmdecho" 1)
        (princ)
)
写成命令就要加(command "REGEN"),单独执行代码就不用,还没明白为什么。
而且如果加入(command "REGEN"), (command "delay" 10)都可以去掉不用。
发表于 2018-8-9 11:36 | 显示全部楼层
本帖最后由 namezg 于 2018-8-9 11:59 编辑

;用move命令可实现
(defun c:test (/ nn pt1 hd pt2)
        (setvar "cmdecho" 0)
        (setq nn (entmakex (list (cons 0 "TEXT") (cons 1 "文字") (cons 40 3.5)(cons 41 1) (cons 10 (setq pt1 (getpoint "\n请输入文字的第一对齐点: "))) (cons 50 (setq hd (* 0.25 pi))) (cons 7 "standard") (cons 8 "0"))))
        (repeat 100
                (setq pt2 (polar pt1 hd 1.0));计算下个坐标点
                (command "delay" 10);延时执行
                (command "move" nn "" "non" pt1 "non" pt2)
                (setq pt1 pt2)
        )
        (setvar "cmdecho" 1)
        (princ)
)
发表于 2018-6-14 14:47 | 显示全部楼层
我不会,只能给你一些参考
以p1 p2为方向,每次移动p1 p2的1%
发表于 2018-6-15 16:54 来自手机 | 显示全部楼层
有三种办法,一个是entmod实现,一个grread实现,最简单的是用一个et函数,等我打开电脑的时候给你代码
 楼主| 发表于 2018-6-16 10:08 | 显示全部楼层
yxp 发表于 2018-6-15 16:54
有三种办法,一个是entmod实现,一个grread实现,最简单的是用一个et函数,等我打开电脑的时候给你代码

非常感谢!
 楼主| 发表于 2018-6-16 22:45 | 显示全部楼层
yxp 发表于 2018-6-16 21:42
还有其他几种方法就不一一列举了。

谢谢你的代码,但这不是我的意思,我的意思是已有一个文字和一个新坐标点,将文字挪到新坐标点,有一个可视化的挪动效果,而不是文字瞬间消失和生成,有个文字挪动的轨迹,纯粹就是想好看点,我用while不断计算轨迹上的下个坐标点,但是图纸就是不显示文字,每次都是卡顿后直接生成在目标坐标点,一定需要加上这个(command "regen")才行,但是每次刷新图纸就很卡了,不知道我的表述是否清晰,不管是否明白,还是感谢你的热心,谢谢。
发表于 2018-6-17 13:38 | 显示全部楼层
13816600495 发表于 2018-6-16 22:45
谢谢你的代码,但这不是我的意思,我的意思是已有一个文字和一个新坐标点,将文字挪到新坐标点,有一个可 ...

grread+entmod可以实现
发表于 2018-8-7 12:48 | 显示全部楼层
谢谢你的代码
发表于 2018-8-8 10:47 | 显示全部楼层
大哥你的电脑移动复制不显示吗
发表于 2018-8-8 11:08 | 显示全部楼层
我感覺1樓說的 才是你想要的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 13:10 , Processed in 0.331029 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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