明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3082|回复: 16

[提问] 块属性提取,批量标注

[复制链接]
发表于 2016-2-1 13:24:34 | 显示全部楼层 |阅读模式
我想实现这么一个功能,框选一堆含属性的块, 然后自动把块属性取出来标记在这些块的附近,(分别引一条直线(水平或竖直,平行引出),并在块附近按照坐标的大小排序标上1,2,3,...等等),每个块属性属性的前面也标上对应的1,2,3,...。大概是这个3个步骤,请高手帮忙编写一下,另外大概需要多少米?


该贴已经同步到 fxfeng的微博
发表于 2023-8-18 20:46:59 | 显示全部楼层
ll_j 发表于 2016-2-2 17:25
好久不写了,针对你的图凑了一个,没做出错处理,也没仔细检查,供参考吧。

误: no function definition: :STR   大神这个是怎么回事呢
发表于 2023-10-25 08:51:37 | 显示全部楼层
学习学习后面找找应用场景看看
发表于 2023-8-25 09:50:27 | 显示全部楼层
学习学习后面找找应用场景看看
发表于 2016-2-1 14:21:53 | 显示全部楼层
目测三楼之类必出源码
发表于 2016-2-1 16:03:12 | 显示全部楼层
哪我占二楼
发表于 2016-2-2 09:21:42 | 显示全部楼层
报价500米,时间1-2天。QQ974636923
发表于 2016-2-2 10:32:31 | 显示全部楼层
题目不清不楚,难怪没人肯写。
1. 块可以有多个属性,是按属性标注,还是按块标注?如果是多属性块,是每个块的属性分别按序标注,还是总体标注?
2. 平面坐标有二维,是按x排序,还是按y排序,还是按x+y排序,或者按其它规则排序?
画出一张样图,别人才好动手,这样不清不楚,本是两斗米的事情,五斗米也不会有人折腰的。
 楼主| 发表于 2016-2-2 13:32:44 | 显示全部楼层
本帖最后由 fxfeng 于 2016-2-2 13:38 编辑
ll_j 发表于 2016-2-2 10:32
题目不清不楚,难怪没人肯写。
1. 块可以有多个属性,是按属性标注,还是按块标注?如果是多属性块,是每个 ...

sorry,通过高手的指点,我自己也在努力,现在实现了一部分,确实因为刚开始学,问题描述的不清不楚,我把要实现的效果图发上来,还望各位高手不吝赐教!(序号是需要自己加的(通过x+y排序加上去),序号右侧的文字是从块属性中取出来的,每个块中各有这两个属性)(省略号是指3,4,5,6,7,8号块的属性(因为现在手工标故省略了))
(领导也不批,没米,只能自己刻苦钻研了)求教高手!

本帖子中包含更多资源

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

x
发表于 2016-2-2 17:25:33 | 显示全部楼层
fxfeng 发表于 2016-2-2 13:32
sorry,通过高手的指点,我自己也在努力,现在实现了一部分,确实因为刚开始学,问题描述的不清不楚,我把 ...

好久不写了,针对你的图凑了一个,没做出错处理,也没仔细检查,供参考吧。
  1. (defun mktext(:str :pt10 :j72 / :sty)  ;写文字;  (setq        :pt10(trans :pt10 1 0))
  2.   (entmake
  3.     (list
  4.       '(0 . "TEXT")
  5.       (cons 1 :str)
  6.       (cons 10 :pt10)
  7.       (cons 11 :pt10)
  8.       (cons 7 (setq :sty(getvar "textstyle")))
  9.       (cons 40 (getvar "textsize"))
  10.       (cons 41 (cdr (assoc 41 (tblsearch "style" :sty))))
  11.       (cons 51 (cdr (assoc 50 (tblsearch "style" :sty))))
  12.       '(71 . 0)
  13.       (cons 72 :j72)
  14.     )
  15.   )
  16. )

  17. (defun mkline(pt1 pt2)
  18.   (entmake
  19.     (list
  20.       '(0 . "LINE")
  21.       (cons 10 pt1)
  22.       (cons 11 pt2)
  23.     )
  24.   )
  25. )

  26. (defun c:tt()
  27.   (princ "\n标注属性程序,适用于...")
  28.   (princ "\n选择属性块: ")
  29.   (setq ss0 (ssget '((0 . "INSERT") (66 . 1)))
  30.         len (sslength ss0)
  31.         i -1
  32.         s0 nil
  33.   )
  34.   (repeat len
  35.     (setq i (1+ i)
  36.           en(ssname ss0 i)
  37.           s0(cons en s0)
  38.     )
  39.   )
  40.   (setq pt (getpoint "\n标注基点: "))
  41.   (setq s0 (vl-sort s0 '(lambda(x y) (< (cadr (assoc 10 (entget x))) (cadr (assoc 10 (entget y)))))))
  42.   (setq x1 (cadr (assoc 10 (entget (car s0))))
  43.         x2 (cadr (assoc 10 (entget (last s0))))
  44.         x0 (car pt)
  45.         y0 (cadr pt)
  46.         px0(- x0 (* 2.0 (setq txh (getvar "textsize"))))
  47.   )
  48.   (if (< x0 x1)
  49.     (mkline pt (list x2 y0))
  50.     (mkline (list x1 y0) pt)
  51.   )
  52.   (mkline pt (polar pt (/ pi 2) (setq yh (* (+ len 1) txh 4.0))))
  53.   (setq i 0)
  54.   (repeat len
  55.     (setq i (1+ i))
  56.     (tt0 (car s0) i)
  57.     (tt1 en i)
  58.     (setq s0 (cdr s0))
  59.   )
  60. )

  61. (defun tt0(en i)
  62.   (setq et (entget en)
  63. ;        nm (cdr (assoc 2 et))
  64.         pti(cdr (assoc 10 et))
  65.         xi (car pti)
  66.         yi (cadr pti)
  67.         ptj(list xi y0)
  68.   )
  69.   (mkline pti ptj)
  70.   (if (< yi y0)
  71.     (setq yt (- y0 (* txh 1.5)))
  72.     (setq yt (+ y0 (* txh 0.5)))
  73.   )
  74.   (mktext (itoa i) (list (+ xi (* txh 0.5)) yt) 0)
  75. )

  76. (defun tt1(en i)
  77.   (setq ts nil)
  78.   (while
  79.     (= (cdr (assoc 0 (setq et (entget (setq en (entnext en)))))) "ATTRIB")
  80.     (setq txt (cdr (assoc 1 et))
  81.           ts (cons txt ts)
  82.     )
  83.   )
  84.   (setq pyi (- (+ y0 yh) (* 2.0 txh) (* 4.0 txh (- i 1)))
  85.         pxi (+ x0 (apply 'max (mapcar '(lambda(x) (caadr (textbox (list (cons 1 x))))) ts)) txh)
  86.         ptxi(+ x0 (* txh 0.5))
  87.         pty1(+ pyi (* txh 0.5))
  88.         pty2(- pyi (* txh 1.5))
  89.   )
  90.   (mkline (list px0 pyi) (list pxi pyi))
  91.   (mktext (itoa i) (list (- x0 (* txh 0.5)) pty1) 2)
  92.   (mktext (cadr ts) (list ptxi pty1) 0)
  93.   (mktext (car ts) (list ptxi pty2) 0)
  94.   (princ)
  95. )


 楼主| 发表于 2016-2-2 18:14:26 | 显示全部楼层
ll_j 发表于 2016-2-2 17:25
好久不写了,针对你的图凑了一个,没做出错处理,也没仔细检查,供参考吧。

大师啊!我花了半个月时间,在即将完成的时候,您竟然编写好了,让我情何以堪啊。差距就在那!!!只能说无限膜拜!!
发表于 2016-2-10 17:12:45 | 显示全部楼层
路过瞧瞧                  
发表于 2016-2-10 18:00:46 | 显示全部楼层
来看看!学习学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 08:28 , Processed in 0.163651 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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