明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2560|回复: 26

[讨论] 如何在拖动多段线一拐点的过程中面积实时改变

[复制链接]
发表于 2014-11-22 08:55 | 显示全部楼层 |阅读模式
本帖最后由 changyiran 于 2014-11-22 11:37 编辑

附件中的多段线是我随意画出来的,画出多段线后自动在中心位置添加了面积(亩),这些我都用程序实现了,但是这个多段线的面积有可能和想要的面积不一致,因此我就会通过拖动多段线任一拐点来调整面积,在拖动过程中如何实时的使之前自动注记的面积变成拖动中多段线的面积呢?请大神们指教。

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-11-22 11:41 | 显示全部楼层
可以用字段
 楼主| 发表于 2014-11-22 12:35 | 显示全部楼层
spp_wall 发表于 2014-11-22 11:41
可以用字段

大侠能详细些不?应该是用反应器把
发表于 2014-11-23 10:54 | 显示全部楼层
changyiran 发表于 2014-11-22 12:35
大侠能详细些不?应该是用反应器把

如果我没猜错的话,楼主大人应该是新浪博客里叫做小萝卜头的那个版主吧。我见过你的作品,也挺不错的。
发表于 2014-11-23 12:20 | 显示全部楼层
应该是反应器。
发表于 2014-11-23 13:22 来自手机 | 显示全部楼层
field regen后自动更新
发表于 2014-11-24 11:31 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:c1 (/)
  3.   (setq e (car (entsel "\n 请选择多边形==>>  ")))
  4.   (setq e_obj (vlax-ename->vla-object e))
  5.   (vla-getboundingbox e_obj 'minpt 'maxpt)
  6.   (setq p1 (vlax-safearray->list minpt))
  7.   (setq p2 (vlax-safearray->list maxpt))
  8.   (setq mid (mapcar '(lambda (x y) (/ (+ x y) 2.)) p1 p2));;求两点中点
  9.   (setq mj (rtos (vla-get-area e_obj) 2 3))
  10.   (entmake
  11.     (list '(0 . "TEXT")
  12.           (cons 1 mj)
  13.           (cons 10 mid)
  14.           (cons 40 (* (vla-get-area e_obj) 0.0001))
  15.     )
  16.   )
  17.   (setq wjb (cdr (assoc 5 (entget (entlast)))))
  18.   (setq wjl (list wjb))
  19.   (setq objlt (list e_obj))        ;图元名转换为VLA对象
  20.   (setq        vrl (vlr-pers
  21.               (vlr-object-reactor objlt wjl '((:vlr-modified . c-2l)))
  22.             )
  23.   )
  24.   (princ)                                ;静默退出
  25. )
  26. (defun c-2l (notifier-object
  27.              reactor-object
  28.              parameter-list
  29.              /
  30.             )
  31.   (setq mj (rtos (vla-get-area notifier-object) 2 3))
  32.   (vla-getboundingbox notifier-object 'minpt 'maxpt)
  33.   (setq p1 (vlax-safearray->list minpt))
  34.   (setq p2 (vlax-safearray->list maxpt))
  35.   (setq mid (mapcar '(lambda (x y) (/ (+ x y) 2.)) p1 p2)) ;;求两点中点
  36.   (setq we (handent (car (vlr-data reactor-object)))) ;获取文本图元名
  37.   (setq wel (entget we))
  38.   (setq wel (subst (vl-list* 10 mid) (assoc 10 wel) wel))
  39.   (setq wel (subst (vl-list* 1 mj) (assoc 1 wel) wel))
  40.   (setq
  41.     wel        (subst (vl-list* 40 (* (vla-get-area notifier-object) 0.0001))
  42.                (assoc 40 wel)
  43.                wel
  44.         )
  45.   )
  46.   (entmod wel)                                ;更新文本图元表
  47. )

小试了下牛刀,初步测试应该可以满足您的要求。
发表于 2014-11-24 11:49 | 显示全部楼层
感谢newbuser分享程序!
发表于 2014-11-25 14:01 | 显示全部楼层
newbuser 发表于 2014-11-24 11:31
小试了下牛刀,初步测试应该可以满足您的要求。

感谢newbuser,感谢分享程序!
 楼主| 发表于 2014-11-25 15:37 | 显示全部楼层
各位大侠,我已经实现了,谢谢,用grread实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-18 11:47 , Processed in 0.320119 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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