明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ebigsong

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

    [复制链接]
发表于 2012-11-27 21:24:30 | 显示全部楼层
根据我的习惯,修改了一下!请大家指点!
;;;pn3.lsp
;;;给选择的对象添加文字标注
;;;输入:选择对象和标注的点位,输入标注文字
;;;输出:生成引线及标注文字。
;;;最后修改时间:2012.4.8
;(defun *error* (msg)  exit)
(defun C:pn4()
  
;;;(setq r 1)
(setq lg_layer "W_DIM");设置标注图层
   (setq txt_style "hztxt");立管标注样式
   (setq g_yesorno 1);设置是否编组,0-不编组,1-编组
;;;(setq txt_size (* r 6)) ;设置标注文字高度
  (setq txt_size (GETVAR "TEXTSIZE" )) ;设置标注文字高度
(setq txt_off1 (/ txt_size 4)) ;设置标注文字上移尺寸
   (setq txt_off2 (* txt_size 1)) ;设置标注文字左右移尺寸
  
(setvar"cmdecho"0)
(setq var_os (getvar "osmode"));记录捕捉
(setq var_old_layer (getvar "clayer"));记录当前图层

;判断图层是否存在
(if (= nil (tblsearch "layer" lg_layer)) (command "layer" "m" lg_layer ""))
   ;提示选择对象,获得选择点
(setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))

(while inspt
    (progn
     (setvar "clayer" lg_layer);设置当前图层
     (setvar "osmode" 0);取消捕捉
   
     (setq inspt1 (getpoint inspt "\n点取标注位置"))

   ;绘制连接线
   (command "line" inspt inspt1 "")
   (setq obj_line (entlast))
     (setq txt (getstring "\n标注内容: "))
   
      
   (setq ang (*  (/ (angle inspt inspt1) pi) 180))
     (if (or (<= ang 90) (>= ang 270))
     (progn
      
     ;输入名称和编号
    (command "text" ;|"J" "bl"|; inspt1 txt_size "0" txt)
    ;选择最后一个图元名
    (setq obj_txt (entlast))
    (command "move" obj_txt "" inspt1 (strcat "@" (rtos txt_off2) "," (rtos txt_off1)))
      
    ;绘制标注底线
        (setq txtb (textbox (entget obj_txt)))
    ;得到文字长度
    (setq txt_l (- (caadr txtb) (caar txtb)))
    (command "line" inspt1 (strcat "@" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
    (setq obj_line2 (entlast))
       )   
     
     (progn
      
     ;输入名称和编号
    (command "text" "J" "r" inspt1 txt_size "0" txt)
    ;选择最后一个图元名
    (setq obj_txt (entlast))
    (command "move" obj_txt "" inspt1 (strcat "@-" (rtos txt_off2) "," (rtos txt_off1)))
      
        ;绘制标注底线
        (setq txtb (textbox (entget obj_txt)))
    ;得到文字长度
    (setq txt_l (- (caadr txtb) (caar txtb)))
        
    (command "line" inspt1 (strcat "@-" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
    (setq obj_line2 (entlast))
       )
     
     )

   (if (= g_yesorno 1) ;编组
      (progn
       ;建立选择集
       (setq obj_together (ssadd obj_txt (ssadd obj_line2 (ssadd obj_line))))
       ;生成匿名组
       (command "-group" "c" "*" "对象标注" obj_together "")
      )
     )
   (setvar "osmode" var_os);恢复捕捉
   (setvar "clayer" var_old_layer);恢复当前图层
   (princ)
     ;提示选择对象,获得选择点
   (setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))

  );end progn
   
);end while
  (princ)
)
发表于 2012-11-27 21:47:16 | 显示全部楼层
刚刚又从新修改了一下:
;;;pn4.lsp
;;;给选择的对象添加文字标注
;;;输入:选择对象和标注的点位,输入标注文字
;;;输出:生成引线及标注文字。
;;;最后修改时间:2012.4.8
;(defun *error* (msg)  exit)
(defun C:pn4()
  
;;;(setq r 1)
(setq lg_layer "W_DIM");设置标注图层
   (setq txt_style "hztxt");立管标注样式
   (setq g_yesorno 1);设置是否编组,0-不编组,1-编组
;;;(setq txt_size (* r 6)) ;设置标注文字高度
  (setq txt_size (GETVAR "TEXTSIZE" )) ;设置标注文字高度
(setq txt_off1 (/ txt_size 4)) ;设置标注文字上移尺寸
   (setq txt_off2 (* txt_size 1)) ;设置标注文字左右移尺寸
  
(setvar"cmdecho"0)
(setq var_os (getvar "osmode"));记录捕捉
(setq var_old_layer (getvar "clayer"));记录当前图层

;判断图层是否存在
(if (= nil (tblsearch "layer" lg_layer)) (command "layer" "m" lg_layer ""))
   ;提示选择对象,获得选择点
(setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))

(while inspt
    (progn
     (setvar "clayer" lg_layer);设置当前图层
     (setvar "osmode" 0);取消捕捉
   
     (setq inspt1 (getpoint inspt "\n点取标注位置"))

   ;绘制连接线
   (command "line" inspt inspt1 "")
   (setq obj_line (entlast))
     (setq txt (getstring "\n标注内容: "))
   
      
   (setq ang (*  (/ (angle inspt inspt1) pi) 180))
     (if (or (<= ang 90) (>= ang 270))
     (progn
      
     ;输入名称和编号
    (command "text" ;|"J" "bl"|; inspt1 txt_size "0" txt)
    ;选择最后一个图元名
    (setq obj_txt (entlast))
    (command "move" obj_txt "" inspt1 (strcat "@" (rtos txt_off2) "," (rtos txt_off1)))
      
    ;绘制标注底线
        (setq txtb (textbox (entget obj_txt)))
    ;得到文字长度
    (setq txt_l (- (caadr txtb) (caar txtb)))
    (command "line" inspt1 (strcat "@" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
    (setq obj_line2 (entlast))
    (command "pline" inspt inspt1 (strcat "@" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
     (setq obj_line3 (entlast))
    (command "erase" obj_line obj_line2 "")
       )   
     
     (progn
      
     ;输入名称和编号
    (command "text" "J" "r" inspt1 txt_size "0" txt)
    ;选择最后一个图元名
    (setq obj_txt (entlast))
    (command "move" obj_txt "" inspt1 (strcat "@-" (rtos txt_off2) "," (rtos txt_off1)))
      
        ;绘制标注底线
        (setq txtb (textbox (entget obj_txt)))
    ;得到文字长度
    (setq txt_l (- (caadr txtb) (caar txtb)))
        
    (command "line" inspt1 (strcat "@-" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
    (setq obj_line2 (entlast))
     (command "pline" inspt inspt1 (strcat "@-" (rtos (+ txt_l (* txt_off2 2))) ",0") "")
    (setq obj_line3 (entlast))
    (command "erase" obj_line obj_line2 "")
       )
     
     )

   (if (= g_yesorno 1) ;编组
      (progn
       ;建立选择集
       (setq obj_together (ssadd obj_txt (ssadd obj_line3 )))
       ;生成匿名组
       (command "-group" "c" "*" "对象标注" obj_together "")
      )
     )
   (setvar "osmode" var_os);恢复捕捉
   (setvar "clayer" var_old_layer);恢复当前图层
   (princ)
     ;提示选择对象,获得选择点
   (setq inspt (osnap (cadr (entsel "\n选择标注对象")) "nea"))

  );end progn
   
);end while
  (princ)
)
发表于 2012-11-27 22:27:20 | 显示全部楼层
可能会用到,谢谢楼主了!
发表于 2012-12-27 11:19:56 | 显示全部楼层
哎,,,还是卡奴东啊
发表于 2013-1-23 00:24:55 | 显示全部楼层
[em0]
发表于 2013-5-18 18:11:16 | 显示全部楼层
感谢版主 分享 顶起
发表于 2013-6-10 09:54:59 | 显示全部楼层
和我原来写的差不多,不过因为很难支持比例修改,放弃了
发表于 2013-7-10 22:51:57 | 显示全部楼层
有源码样式可以修改,不错,谢谢楼主分享
发表于 2014-2-22 00:05:30 | 显示全部楼层
非常感谢提供源码
发表于 2014-5-3 08:27:20 | 显示全部楼层
虽然不同行,还是有用,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:21 , Processed in 0.238132 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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