明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1891|回复: 7

[讨论] [讨论][求教cad编程问题

[复制链接]
发表于 2010-7-26 17:36:00 | 显示全部楼层 |阅读模式

我画了一条斜线, 线上面有平行的文字。我如果想把线左端不动右端改到另一个点(线长短和都角度改变了)而文字始终位于线正中且平行于该线,应该怎么编代码呢?

谢谢~~

发表于 2010-7-26 20:34:00 | 显示全部楼层

1、先选文字;

2、再选线条;

3、计算线条中点和倾斜角;

4、将文字移动到指定点,并旋转到指定角度。

 

发表于 2010-7-26 21:25:00 | 显示全部楼层
要用反应器来弄.
发表于 2010-7-26 21:59:00 | 显示全部楼层

想做的完美

肯定是要用到反应器的

如果楼主对反应器不熟又赶时间的话

先按ZZXXQQ的方法做比较简单

 

2楼有点小问题

没有考虑文字节点的因素

选文字以后要计算出文字包围盒的中心

或者将文字节点模式改成“中”、“中心”等

这样移动以后才能保证在线的正中

 

另外直线端点在改变以后

如果左端变成了右端

那么文字的位置和角度

要相对线中心转个180度

 楼主| 发表于 2010-7-26 22:09:00 | 显示全部楼层
这里果然高手如云啊,小弟对反应器是一窍不通啊,哪位高手能帮小弟写个代码呢?不胜感激啊~~~
发表于 2010-7-26 22:51:00 | 显示全部楼层

如果对反应器不熟就不要轻易在程序里使用

转个贴你看看

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=46996&replyID=&skin=0

发表于 2010-7-27 00:59:00 | 显示全部楼层
  1. (defun c:xz ()
  2. (setq osmode (getvar "osmode"))
  3. (setvar "osmode" 0)
  4. (setq enttxt (car (entsel "\n请选择文字")))
  5. (if (not enttxt)
  6. (exit)
  7. )
  8. (setq xx (cdr (assoc 0 (entget enttxt))))
  9. (while (/= xx "TEXT")
  10. (setq enttxt (car (entsel "\n请选择文字")))
  11. (if    (not enttxt)
  12. (exit)
  13. )
  14. (setq xx (cdr (assoc 0 (entget enttxt))))
  15. )
  16. (setq ent (entget enttxt))
  17. (setq entLINE (car (entsel "\n请选择直线")))
  18. (if (not entline)
  19. (exit)
  20. )
  21. (setq xx (cdr (assoc 0 (entget entline))))
  22. (while (/= xx "LINE")
  23. (setq entLINE (car (entsel "\n请选择直线")))
  24. (if    (not entline)
  25. (exit)
  26. )
  27. (setq xx (cdr (assoc 0 (entget entline))))
  28. )
  29. (setq myline (entget entline))
  30. (setq mytxt (entget enttxt))
  31. (VLR-PERS-RELEASE            ;线对象反应器
  32. (vlr-object-reactor
  33. (list (vlax-ename->vla-object entline))
  34. (list (cdr (assoc 5 mytxt)))
  35. '((:vlr-modified . line-chang)
  36.     (:vlr-objectClosed . line-end-chang)
  37. )
  38. )
  39. )
  40. )
  41. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  42. (defun line-chang (obj rec-object par-list / entline enttxt)
  43. (setq    entline    (vlax-vla-object->ename obj)
  44.     enttxt    (handent (car (vlr-data rec-object)))
  45. )
  46. (setq ent (entget enttxt))
  47. (setq spt (cdr (assoc 10 (entget entline))))
  48. (setq ept (cdr (assoc 11 (entget entline))))
  49. (setq ang (angle spt ept))
  50. (setq ent (subst (cons 50 ang) (assoc 50 ent) ent))
  51. (entmod ent)
  52. )
  53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  54. (defun line-end-chang (obj rec-object par-list /)
  55. (setq    entline    (vlax-vla-object->ename obj)
  56.     enttxt    (handent (car (vlr-data rec-object)))
  57. )
  58. (setq ent (entget enttxt))
  59. (setq spt (cdr (assoc 10 (entget entline))))
  60. (setq ept (cdr (assoc 11 (entget entline))))
  61. (setq    spty (nth 0 spt)
  62.     sptx (nth 1 spt)
  63.     epty (nth 0 ept)
  64.     eptx (nth 1 ept)
  65. )
  66. (setq    midx (/ (+ sptx eptx) 2)
  67.     midy (/ (+ spty epty) 2)
  68. )
  69. (setq enttxt1 (vlax-ename->vla-object enttxt))
  70. (vla-put-InsertionPoint
  71. enttxt1
  72. (vlax-3d-point (list midy midx 0))
  73. )
  74. (princ)
  75. )

先运行命令关联直线和文字
然后拖动直线 文字会跟着修改
 楼主| 发表于 2010-7-27 13:11:00 | 显示全部楼层
感谢piao1887
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 08:28 , Processed in 0.186984 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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