明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ebigsong

标注系列【源码】,回馈明经

    [复制链接]
发表于 2019-9-6 09:35:15 | 显示全部楼层
感谢楼主分享
发表于 2019-9-24 20:57:21 | 显示全部楼层
text 改用 entmakex 之后
;绘制标注底线
  (setq txtb (textbox (entget obj_txt)))  
就出错。

  1. (defun C:pn3()
  2. (setq scale (getvar "dimscale"))  ;获得全局比例
  3. ;;;(setq lg_layer "W_DIM");设置标注图层
  4. ;;; (setq txt_style "hztxt");立管标注样式
  5. (setq g_yesorno 1);设置是否编组,0-不编组,1-编组
  6. ;;;(setq txt_size (* scale 6)) ;设置标注文字高度
  7. (setq txt_off1 (* scale 1)) ;设置标注文字上移尺寸
  8. (setq txt_off2 (* scale 2)) ;设置标注文字左右移尺寸
  9. (setvar"cmdecho"0)
  10. (setq var_os (getvar "osmode"));记录捕捉
  11. (setq var_old_layer (getvar "clayer"));记录当前图层
  12. ;判断图层是否存在
  13. ;;;(if (= nil (tblsearch "layer" lg_layer)) (command "layer" "m" lg_layer ""))
  14. ;提示选择对象,获得选择点
  15. (setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))
  16. (while inspt
  17.   (progn
  18. ;;; (setvar "clayer" lg_layer);设置当前图层
  19. (setvar "osmode" 0);取消捕捉
  20. (setq inspt1 (getpoint inspt "\n点取标注位置"))
  21. ;绘制连接线
  22. (command "line" inspt inspt1 "")
  23. (setq obj_line (entlast))
  24. (setq txt_name (getstring "\n标注内容: "))
  25. (setq ang (*(/ (angle inspt inspt1) pi) 180))
  26. (if (or (<= ang 90) (>= ang 270))
  27. (progn
  28. ;输入名称和编号
  29. ;;;  (command "text" "J" "bl" inspt1 txt_size "0" txt_name)
  30. (entmakeX (list '(0 . "MTEXT")
  31.                                                 '(100 . "AcDbEntity")
  32.                                                 '(100 . "AcDbMText")
  33.                                                 '(70 . 0)
  34.                                                 '(71 . 7) ;;左对齐-下对齐
  35.                                                 '(72 . 1)
  36.                                                 '(73 . 2)
  37.                                                 (cons 40 (* scale 6))
  38.                                                       (cons 1  txt_name)
  39.                                                 (cons 10 inspt1)                 
  40.                         )
  41.                 )
  42.   
  43.   ;选择最后一个图元名
  44.   (setq obj_txt (entlast))
  45.   (command "move" obj_txt "" inspt1 (strcat "@" (rtos txt_off2) "," (rtos txt_off1)))
  46.   ;绘制标注底线
  47.   (setq txtb (textbox (entget obj_txt)))  ;;;#### 这个如何改?####################
  48.   ;得到文字长度
  49.   (setq txt_l (- (caadr txtb) (caar txtb)))
  50.   (command "line" inspt1 (strcat "@" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
  51.   (setq obj_line2 (entlast))
  52.    )
  53. (progn
  54. ;输入名称和编号
  55. ;;;  (command "text" "J" "br" inspt1 txt_size "0" txt_name)
  56.    (entmakeX (list '(0 . "MTEXT")
  57.                                                 '(100 . "AcDbEntity")
  58.                                                 '(100 . "AcDbMText")
  59.                                                 '(70 . 0)
  60.                                                 '(71 . 9) ; 右对齐-下对齐
  61.                                                 '(72 . 1)
  62.                                                 '(73 . 2)
  63.                                                 (cons 40 (* scale 6))
  64.                                                       (cons 1  txt_name)
  65.                                                 (cons 10 inspt1)                 
  66.                         )
  67.                 )
  68.   ;选择最后一个图元名
  69.   (setq obj_txt (entlast))
  70.   (command "move" obj_txt "" inspt1 (strcat "@-" (rtos txt_off2) "," (rtos txt_off1)))
  71.   ;绘制标注底线
  72.   (setq txtb (textbox (entget obj_txt)))  ;;;#### 这个如何改?####################
  73.   ;得到文字长度
  74.   (setq txt_l (- (caadr txtb) (caar txtb)))
  75.   (command "line" inspt1 (strcat "@-" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
  76.   (setq obj_line2 (entlast))
  77.    )
  78. )
  79. (if (= g_yesorno 1) ;编组
  80.   (progn
  81.    ;建立选择集
  82.    (setq obj_together (ssadd obj_txt (ssadd obj_line2 (ssadd obj_line))))
  83.    ;生成匿名组
  84.    (command "-group" "c" "*" "对象标注" obj_together "")
  85.   )
  86. )
  87. (setvar "osmode" var_os);恢复捕捉
  88. (setvar "clayer" var_old_layer);恢复当前图层
  89. (princ)
  90. ;提示选择对象,获得选择点
  91. (setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))
  92. );end progn
  93. );end while
  94. (princ)
  95. )

发表于 2019-9-25 14:04:02 | 显示全部楼层
非常感谢提供源码
发表于 2019-9-25 15:23:07 | 显示全部楼层
谢谢楼主分享
发表于 2019-10-3 11:56:20 | 显示全部楼层
虽然不同行,还是有用,非常感谢提供源码
发表于 2019-10-6 10:38:14 | 显示全部楼层
给排水专业的吧,给同行点赞
发表于 2019-10-18 08:25:21 | 显示全部楼层
感谢楼主分享{:301_978:}~!
发表于 2022-3-16 18:44:38 | 显示全部楼层
下载了学习一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:23 , Processed in 0.184162 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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