明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1754|回复: 9

[已解答] “提取属性文字,生成标注”程序申请

[复制链接]
发表于 2015-8-18 16:32 | 显示全部楼层 |阅读模式
4明经币
给排水专业,画图之繁琐说出来都是泪~~,最近有个想法,如截图和附件所示,币币不多,希望有大神帮忙,翘首以盼!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

发表于 2015-8-18 16:32 | 显示全部楼层

  1. (defun c:tt(/ ang c1 cen en lay obj p1 p3 pl pl1 pl2 pl3 rad ss str txt1 txtpt1 txtpt2 x y)
  2.   (if(setq ss (ssget '((0 . "insert"))))
  3.     (while(setq en(ssname ss 0))
  4.       (setq obj(vlax-ename->vla-object en))
  5.       (vla-GetBoundingBox obj 'p1 'p3)
  6.       (setq p1 (vlax-safearray->list p1)
  7.             p3 (vlax-safearray->list p3))
  8.       (setq rad(* 0.5 (abs(- (car p1)(car p3))))
  9.             cen(mapcar '(lambda(x y)(* 0.5 (+ x y))) p1 p3)
  10.             ang (* pi 0.5)
  11.             lay(vla-get-layer obj)
  12.             str (MJ:GetTagTextStringByRef OBJ "XL-1")
  13.             )
  14.       (setq pl1(polar cen ang rad)
  15.             pl2(polar pl1 ang 600.0)
  16.             pl3(polar pl2 pi 830.0)
  17.             txtpt1(polar pl2 ang 50)
  18.             txtpt1(polar txtpt1 pi 70)
  19.             txtpt2(polar txtpt1 pi 680)
  20.             )
  21.       (setq c1 (entmakex (list '(0 . "CIRCLE") (cons 8 lay)(cons 10 cen) (cons 40 rad))))
  22.       (setq pl(entmakex (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 8 lay)(cons 90 3) (cons 10 pl1) (cons 10 pl2)(cons 10 pl3))))
  23.       (setq txt1 (entmakex (list        '(0 . "TEXT")
  24.                                 (cons 8 lay)
  25.                                 (cons 1 str)
  26.                                 (cons 10 txtpt2)
  27.                                 (cons 11 txtpt1)
  28.                                 (cons 40 250)
  29.                                 '(7 . "DIM")
  30.                                 '(71 . 0)
  31.                                 '(72 . 5)
  32.                                 '(73 . 0)
  33.                                 (cons 50 pi)
  34.                           )
  35.                  )
  36.       )
  37.       (bns_makgrp (list c1 pl txt1) str)
  38.       (setq ss(ssdel en ss))
  39.       )
  40.     )
  41.   )
  42. ;;29.1 [功能] 取得选定块的指定属性
  43. ;; (MJ:GetTagTextStringByRef (*En2Obj* (car (entsel))) "设计")
  44. (defun MJ:GetTagTextStringByRef        (br tagname / atts tag str)
  45.   (if (and
  46.         (= (vla-get-hasattributes br) :vlax-true)
  47.         (safearray-value
  48.           (setq        atts
  49.                  (vlax-variant-value
  50.                    (vla-getattributes br)
  51.                  )
  52.           )
  53.         )
  54.       )
  55.     (foreach tag (vlax-safearray->list atts)
  56.       (if (= (strcase tagname) (strcase (vla-get-tagstring tag)))
  57.         (setq str (vla-get-TextString tag))
  58.       )
  59.     )
  60.   )
  61.   str
  62. )

  63. ;;150 [功能] 生成无名组
  64. ;;示例(bns_makgrp (MJ:SS->LIST (ssget)) "描述")
  65. (defun bns_makgrp (LST DESC / EN)
  66.   (command "_.-group" "_create" "*" DESC)
  67.   (foreach EN LST (command EN))
  68.   (command "")
  69. )

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 乐于助人奖

查看全部评分

回复

使用道具 举报

发表于 2015-8-18 17:07 | 显示全部楼层
“给排水专业,画图之繁琐说出来都是泪~~”?!

还让不让结构活了?!

点评

“给排水”???!!!……结构的都没吭声呢,……  发表于 2015-8-19 16:03
回复

使用道具 举报

 楼主| 发表于 2015-8-19 07:22 | 显示全部楼层
edata 发表于 2015-8-18 23:07

一觉起来美梦成真!叩谢EDATA大大,程序实在是美得不像话!!完美实现全部要求,感动
回复

使用道具 举报

 楼主| 发表于 2015-8-19 10:19 | 显示全部楼层
edata 发表于 2015-8-18 16:32

我在琢磨怎么追加明经币给老大,如获至宝的我还在兴奋中
回复

使用道具 举报

发表于 2015-8-19 12:29 | 显示全部楼层
局部调整了下
  1. (defun c:tt(/ ang c1 cen en lay obj p1 p3 pl pl1 pl2 pl3 rad ss str txt1 txtpt1 txtpt2 x y)
  2.   (setq *error*_Old *error*)
  3.   (setq *error* *error*_att_dim)  
  4.   (princ "\n需要标注选择属性图块:")
  5.   (if(setq ss (ssget '((0 . "insert"))))
  6.     (progn
  7.       (sk_load_style)
  8.       (vla-Startundomark(vla-get-activedocument(vlax-get-acad-object)))
  9.       (while(setq en(ssname ss 0))
  10.         (setq obj(vlax-ename->vla-object en))
  11.         (vla-GetBoundingBox obj 'p1 'p3)
  12.         (setq p1 (vlax-safearray->list p1)
  13.               p3 (vlax-safearray->list p3))
  14.         (setq rad(* 0.5 (abs(- (car p1)(car p3))))
  15.               cen(mapcar '(lambda(x y)(* 0.5 (+ x y))) p1 p3)
  16.               ang (* pi 0.5)
  17.               lay(vla-get-layer obj)
  18.               str (MJ:GetTagTextStringByRef OBJ "XL-1")
  19.               )               
  20.         (if str
  21.           (progn
  22.             (setq pl1(polar cen ang rad)
  23.               pl2(polar pl1 ang 600.0)
  24.               pl3(polar pl2 pi 830.0)
  25.               txtpt1(polar pl2 ang 50)
  26.               txtpt1(polar txtpt1 pi 70)
  27.               txtpt2(polar txtpt1 pi 680)
  28.               )
  29.             (setq txt1 (entmakex (list '(0 . "TEXT")
  30.                                    (cons 8 lay)
  31.                                    (cons 1 str)
  32.                                    (cons 10 txtpt2)
  33.                                    (cons 11 txtpt1)
  34.                                    (cons 40 250)
  35.                                    '(7 . "DIM")
  36.                                    '(71 . 0)
  37.                                    '(72 . 5)
  38.                                    '(73 . 0)
  39.                                    (cons 50 pi)
  40.                                    )
  41.                              )
  42.               )
  43.             (setq c1 (entmakex (list '(0 . "CIRCLE") (cons 8 lay)(cons 10 cen) (cons 40 rad))))
  44.             (setq pl(entmakex (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 8 lay)(cons 90 3) (cons 10 pl1) (cons 10 pl2)(cons 10 pl3))))
  45.             (create_group (list c1 pl txt1) str)
  46.             )
  47.           )       
  48.         (setq ss(ssdel en ss))
  49.         )
  50.       (vla-Endundomark(vla-get-activedocument(vlax-get-acad-object)))
  51.       )
  52.     )
  53.   (and *error*_Old (setq *error* *error*_Old))
  54.   (princ)
  55.   )
  56. (defun *error*_att_dim (msg)
  57.   (and *error*_Old (setq *error* *error*_Old))
  58.   (if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
  59.     (if        (= (getvar "LOCALE") "CHS")
  60.       (princ "\n用户按了<Esc>强制退出")
  61.       (princ "\nYou cancelled The operation!")
  62.     )
  63.     (princ (strcat "\n" msg))
  64.   )
  65.   (vla-Endundomark(vla-get-activedocument(vlax-get-acad-object)))  
  66.   (princ)
  67. )

  68. ;;29.1 [功能] 取得选定块的指定属性
  69. ;; (MJ:GetTagTextStringByRef (*En2Obj* (car (entsel))) "设计")
  70. (defun MJ:GetTagTextStringByRef        (br tagname / atts tag str)
  71.   (if (and
  72.         (= (vla-get-hasattributes br) :vlax-true)
  73.         (safearray-value
  74.           (setq        atts
  75.                  (vlax-variant-value
  76.                    (vla-getattributes br)
  77.                  )
  78.           )
  79.         )
  80.       )
  81.     (foreach tag (vlax-safearray->list atts)
  82.       (if (= (strcase tagname) (strcase (vla-get-tagstring tag)))
  83.         (setq str (vla-get-TextString tag))
  84.       )
  85.     )
  86.   )
  87.   str
  88. )
  89. ;;无名组2
  90. ;;; ------------ CREATES UNAMED GROUP
  91. (defun create_group (sslist desc / groupdictename entlist)
  92.   (setq groupdictename (cdar (dictsearch (namedobjdict) "ACAD_GROUP")))
  93.   (setq entlist
  94.          (append
  95.            (list
  96.              '(0 . "GROUP")
  97.              '(102 . "{ACAD_REACTORS")
  98.              (cons 330 groupdictename)
  99.              '(102 . "}")
  100.              '(100 . "AcDbGroup")
  101.              (cons 300 desc)             ; Description
  102.              '(70 . 1)                        ; Named Group
  103.              '(71 . 1)                        ; Selectable Group
  104.            )
  105.            (mapcar '(lambda (ent) (cons 340 ent)) sslist)
  106.            ;; Add all ent from SSList to the group
  107.          )
  108.   )
  109.   (entmake entlist)
  110. )
  111. ;;加载文字样式
  112. (defun sk_load_style ()
  113.   (if (not (tblobjname "style" "dim"))
  114.     (entmake '((0 . "STYLE")
  115.                (100 . "AcDbSymbolTableRecord")
  116.                (100 . "AcDbTextStyleTableRecord")
  117.                (2 . "DIM")
  118.                (70 . 0)
  119.                (40 . 0.0)
  120.                (41 . 0.75)
  121.                (50 . 0.0)
  122.                (71 . 0)
  123.                (42 . 250.0)
  124.                (3 . "txt.shx")
  125.                (4 . "")
  126.               )
  127.     )
  128.   )
  129. )
  130. (vl-load-com)
  131. (princ)
回复

使用道具 举报

 楼主| 发表于 2015-8-22 21:23 | 显示全部楼层
edata 发表于 2015-8-19 12:29
局部调整了下

Edata好酷!
回复

使用道具 举报

发表于 2015-8-24 15:55 | 显示全部楼层
帮顶!!!!!
干啥用的啊
回复

使用道具 举报

发表于 2023-7-21 15:05 | 显示全部楼层
帮顶!!!!! 收藏学习~
回复

使用道具 举报

发表于 2024-1-18 07:55 | 显示全部楼层
顶起来顶起来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 07:38 , Processed in 0.229481 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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