明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: changyiran

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

[复制链接]
 楼主| 发表于 2014-11-28 11:14 | 显示全部楼层
本帖最后由 changyiran 于 2014-12-3 12:10 编辑

复制代码
 楼主| 发表于 2014-11-28 11:15 | 显示全部楼层
changyiran 发表于 2014-11-28 11:14

有的代码改自论坛,特此感谢!
发表于 2015-8-11 16:25 | 显示全部楼层
changyiran 发表于 2014-11-28 11:14

空的啊?怎么回事
发表于 2015-8-11 17:16 | 显示全部楼层
  1. ;changyiran版主高见,怪不得为啥我有时候第一次运行程序时会出错,第二次就恢复正常了,估计就是ucs和wcs不一致造成的,另外fjdb和wzgx是我编的函数,一个是求拐点坐标,一个是判断点在多边形内外,感觉比较简单就没放上去
  2. (defun wzgx(pt e / p e1 area area1 dist dist1)
  3.    (setq e(vlax-ename->vla-object e)dist(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e pt))area(vla-get-area e)
  4.          e1(car(vlax-safearray->list(vlax-variant-value(vla-offset e(* dist 1e-4)))))area1(vla-get-area e1)
  5.          dist1(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e1 pt)))  (entdel(entlast))
  6.    (if(< dist 1e-6)0;;线上
  7.      (if(>(*(- area1 area)(- dist1 dist))0)1 -1)));1线内-1线外
  8. ;[功能] pline,lwpline点坐标表  By 无痕;;示例(vxs (car (entsel))),返回三维点坐标
  9. (defun fjdb (e / i v lst)
  10.   (setq i 0)
  11.   (while
  12.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  13.      (setq lst (cons v lst))
  14.   )
  15.   (reverse lst))
  16. ;;;;;;;;;;;;;;;



  17. (defun c:dtmj(/ );动态面积
  18.   (command"undo""m")
  19.   (if(and(setq en(car(setq xz(entsel"\n请选择地块线:"))))
  20.          (="地块线"(cdr(assoc 8(setq el(entget en)))))
  21.      )
  22.     (progn
  23.       (setq bb(fjdb en)
  24.             obj(vlax-ename->vla-object en)
  25.             mjss(ssget'"cp"bb'((0 . "text")(8 . "实测面积")))
  26.             n -1
  27.       )
  28.       (repeat(sslength mjss)
  29.           (setq men(ssname mjss(setq n(1+ n))))
  30.           (setq zdzd(cdr(assoc 11(entget men))))
  31.           (if(=(wzgx zdzd en)1)
  32.             (setq mjen men)
  33.           )
  34.       )
  35.       (setq
  36.             pt(cadr xz)
  37.             zjd(vlax-curve-getclosestpointto obj pt)
  38.             cs(vlax-curve-getParamAtPoint obj zjd)
  39.             cs(atoi(rtos cs 2 0))
  40.             pt(vlax-curve-getpointatparam obj cs)
  41.             pt(list(car pt)(cadr pt))
  42.             mode t
  43.       )
  44.       (while mode
  45.              (setq mo(grread t 15 0)
  46.                    co(car mo)
  47.              )
  48.              (cond((member co '(2 3 25 32))        ;其它 右键 右键 空格
  49.                    (setq mode nil)
  50.                   )
  51.                   (t
  52.                    (setq p1(cadr mo))
  53.                    (entmod(subst(cons 10 p1)(cons 10 pt)el))
  54.                    (setq bb(fjdb en))
  55.                    (setq zxzb(list(/(apply'+(mapcar'(lambda(x)(car x))bb))(length bb))(/(apply'+(mapcar'(lambda(x)(cadr x))bb))(length bb))))
  56.                    (setq mj(rtos(*(vla-get-area obj)0.0015) 2 2))
  57.                    (setq mjel(subst(cons 1 mj)(assoc 1(entget mjen))(entget mjen)))
  58.                    (entmod(subst(cons 11 zxzb)(assoc 11 mjel)mjel))
  59.                   )
  60.              )
  61.       )
  62.      )
  63.    )
  64. )
发表于 2015-8-11 21:14 | 显示全部楼层
树櫴希德 发表于 2015-8-11 17:16

还是不能正常运行。

命令: dtmj
请选择地块线:nil
发表于 2015-9-13 00:34 来自手机 | 显示全部楼层
newbuser 发表于 2014-11-24 11:31
小试了下牛刀,初步测试应该可以满足您的要求。

怎么没看到程序
发表于 2015-9-14 07:08 | 显示全部楼层
newbuser 发表于 2014-11-24 11:31
小试了下牛刀,初步测试应该可以满足您的要求。

小试了下牛刀,这个刀好用是好用。可惜美中不足是字体不能自定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 16:15 , Processed in 0.883193 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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