明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 永不言弃

[源码] 标批量注面积,面积随图片变换而变换

  [复制链接]
发表于 2015-8-22 17:37 | 显示全部楼层
bai2000 发表于 2015-8-22 12:28
标注的字体大小怎么改,标注字体能在单独层上最好

作者已经设置标注字体在mj层,字体高度为2,另外作者标注面积单位是“亩”,如果要换算为“平方米”可把
666.6667去掉。
发表于 2015-8-23 12:20 | 显示全部楼层
发表于 2015-8-26 16:16 | 显示全部楼层
看看~~~~~~~~~~~~~~~~~~~~~~
发表于 2015-8-26 16:21 | 显示全部楼层
好牛。。。。。。。。。。。。。。
发表于 2015-8-26 20:58 | 显示全部楼层
  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. )
  48. ;;;;;;;;
  49. ;changyiran版主高见,怪不得为啥我有时候第一次运行程序时会出错,第二次就恢复正常了,估计就是ucs和wcs不一致造成的,另外fjdb和wzgx是我编的函数,一个是求拐点坐标,一个是判断点在多边形内外,感觉比较简单就没放上去
  50. (defun wzgx(pt e / p e1 area area1 dist dist1)
  51.    (setq e(vlax-ename->vla-object e)dist(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e pt))area(vla-get-area e)
  52.    e1(car(vlax-safearray->list(vlax-variant-value(vla-offset e(* dist 1e-4)))))area1(vla-get-area e1)
  53.    dist1(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e1 pt)))  (entdel(entlast))
  54.    (if(< dist 1e-6)0;;线上
  55.      (if(>(*(- area1 area)(- dist1 dist))0)1 -1)));1线内-1线外
  56. ;[功能] pline,lwpline点坐标表  By 无痕;;示例(vxs (car (entsel))),返回三维点坐标
  57. (defun fjdb (e / i v lst)
  58.   (setq i 0)
  59.   (while
  60.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  61.      (setq lst (cons v lst))
  62.   )
  63.   (reverse lst))
  64. ;;;;;;;;;;;;;;;



  65. (defun c:dtmj(/ );动态面积
  66.   (command"undo""m")
  67.   (if(and(setq en(car(setq xz(entsel"\n请选择地块线:"))))
  68.          (="0"(cdr(assoc 8(setq el(entget en)))))
  69.      )
  70.     (progn
  71.       (setq bb(fjdb en)
  72.             obj(vlax-ename->vla-object en)
  73.             mjss(ssget'"cp"bb'((0 . "text")(8 . "0")))
  74.             n -1
  75.       )
  76.       (repeat(sslength mjss)
  77.           (setq men(ssname mjss(setq n(1+ n))))
  78.           (setq zdzd(cdr(assoc 11(entget men))))
  79.           (if(=(wzgx zdzd en)1)
  80.             (setq mjen men)
  81.           )
  82.       )
  83.       (setq
  84.             pt(cadr xz)
  85.             zjd(vlax-curve-getclosestpointto obj pt)
  86.             cs(vlax-curve-getParamAtPoint obj zjd)
  87.             cs(atoi(rtos cs 2 0))
  88.             pt(vlax-curve-getpointatparam obj cs)
  89.             pt(list(car pt)(cadr pt))
  90.             mode t
  91.       )
  92.       (while mode
  93.              (setq mo(grread t 15 0)
  94.                    co(car mo)
  95.              )
  96.              (cond((member co '(2 3 25 32))        ;其它 右键 右键 空格
  97.                    (setq mode nil)
  98.                   )
  99.                   (t
  100.                    (setq p1(cadr mo))
  101.                    (entmod(subst(cons 10 p1)(cons 10 pt)el))
  102.                    (setq bb(fjdb en))
  103.                    (setq zxzb(list(/(apply'+(mapcar'(lambda(x)(car x))bb))(length bb))(/(apply'+(mapcar'(lambda(x)(cadr x))bb))(length bb))))
  104.                    (setq mj(rtos(*(vla-get-area obj) 1) 2 3))
  105.                    (setq mjel(subst(cons 1 mj)(assoc 1(entget mjen))(entget mjen)))
  106.                    (entmod(subst(cons 11 zxzb)(assoc 11 mjel)mjel))
  107.                   )
  108.              )
  109.       )
  110.      )
  111.    )
  112. )
小萝卜头changyiran的动态调整多段线面积(论坛里的)和newbuser的程序
发表于 2015-8-27 21:07 | 显示全部楼层
免费的非源码呢?
 楼主| 发表于 2015-8-28 14:39 | 显示全部楼层
sicky111 发表于 2015-8-27 21:07
免费的非源码呢?

在五楼                  
发表于 2015-8-29 00:35 | 显示全部楼层
永不言弃 发表于 2015-8-28 14:39
在五楼

五楼是收费的源码,我想要免费的非源码,能用就好了,呵呵。
发表于 2017-12-16 07:49 | 显示全部楼层
香田里浪人 发表于 2015-8-22 17:37
作者已经设置标注字体在mj层,字体高度为2,另外作者标注面积单位是“亩”,如果要换算为“平方米”可把
...

请问一下这个字体高度怎么改啊
发表于 2017-12-18 10:05 | 显示全部楼层
有源我来顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 02:05 , Processed in 0.212311 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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