明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2209|回复: 8

[讨论] 求:修改“同时标注管径和管长的程序网上组合版(命令GDBZ)”程序

[复制链接]
发表于 2014-2-18 16:42 | 显示全部楼层 |阅读模式
本帖最后由 l18c19 于 2014-2-19 09:12 编辑

本人一点就不会编程,纯属网上各们前辈的程序组合,有2点寻求高手帮助(目的是想用于平面管道图的管径、长度标注):
1、希望标注的管长格式为“L=X.XXX m”(X为数据,以米为单位保留三位小数 )。
2、希望管长可以自己选择保留一位小数点、两位小数点、三位小数点。目前只能到一位小数点,想能精确到3位小数点(mm级),并始终显示3位小数(X.XXX ,包括小数点后面的0))。)

感谢啦


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-2-18 17:44 来自手机 | 显示全部楼层
;同时标注管径和管长的程序
;*****************参数初始化**********************
(vl-load-com)

(terpri)

(prompt "程序初始化......")

(terpri)



(setq bl (if(setq bl (getreal "输入出图比例1:[1/2/5/10/20/50/100/1000]<1>:")) bl 1.0));出图比例为1/bl

(setq gao (* bl 3.0));根据比例计算字高。

(setq tg (strcat "标注文字高度<" (rtos gao) ">:"))

(setq gao (if(setq xxx (getreal tg)) xxx gao));改变字高。



(setq  xiaoshu (getint  "请输入精度位数[整数(0)/1位(1)/2位(2)3位(3)]<1>: "))

(if (= xiaoshu nil) (setq xiaoshu 1))



;;;启动时在命令行要显示的内容

   (terpri)

   (prompt "管长管经标注程序加栽完毕,启动命令GDBZ")



;*************初始化完毕********************

(defun c:GDBZ (/ jl pt1 pt2  x1 y1 z1 x2 y2 z2  ts ag wz du dnwz lwz dnin dnout jlout ob e ee)

(setq ob (ssget '((0 . "line"))))

;;;(setq ob (ssget ))

  (setq dn (if(> dn 0) dn 800))

   (setq ts (strcat "输入管径<" (itoa dn) ">:"));将"输入管径<默认管径>:"负值给ts

   (setq dn (if(setq dnin (getint ts)) dnin dn));输入新的管径,回车取默认值(即上次运行的值)



  

(repeat (setq ee(sslength ob))



  (setq e(ssname ob  (1- ee)))



  (setq pt1 (vlax-curve-getstartpoint e)

              pt2 (vlax-curve-getendpoint e)

        )



     (setq x1 (car pt1))

     (setq y1 (cadr pt1))

     (setq z1 (caddr pt1))

     (setq x2 (car pt2))

     (setq y2 (cadr pt2))

     (setq z2 (caddr pt2))



  (if

     (< x2 x1)

      (setq pt1 (list x2 y2 z2)

            pt2 (list x1 y1 z1))

     

   )





  

   (setq ag (angle pt1 pt2));计算管线的斜率



   (setq jl (distance pt1 pt2));计算管线的长度

   (setq jl (atof (rtos jl 2 xiaoshu)));管线的长度的小数位数

  (setq dnout (strcat "DN" (itoa dn) " L=" (rtos (/  jl 1000.0)) "m"));dnout为输出管径,管道长度的字符串

  

  (setq wz (- (/ jl 2)  (/ (+ (strlen dnout) (* 2 gao)) 2) ))

   (setq wz (polar pt1 ag wz));wz为管线的中点

   

   (setq ag (if(and (> ag (/ pi 2)) (< a

                                       g (* pi 1.5))) (- ag pi) ag));将ag调整到0~pi

  

   (setq dnwz (polar wz (+ ag (/ pi 2)) (* 1.5 bl)));dnwz为管径标注的位置

  

   



   (setq du (/ (* ag 180) pi));将管线斜率ag转换为度,负给du

   (setq wdpt1 (polar wz 2.356 100))

   (setq wdpt2 (polar wz -0.785 100));wdpt1,wdpt2为放大标注位置矩形对角两点

   (command "zoom" wdpt1 wdpt2)

   (command "text" dnwz gao du dnout);输出管径

  (setq ee(1- ee))

  )

   (command "zoom" "previous")

   (princ);静默退出

)

发表于 2014-2-18 17:55 | 显示全部楼层
  1. ;同时标注管径和管长的程序
  2. ;*****************参数初始化**********************
  3. (vl-load-com)
  4. (terpri)
  5. (prompt "程序初始化......")
  6. (terpri)

  7. (setq bl (if(setq bl (getreal "输入出图比例1:[1/2/5/10/20/50/100/1000]<1>:")) bl 1.0));出图比例为1/bl
  8. (setq gao (* bl 3.0));根据比例计算字高。
  9. (setq tg (strcat "标注文字高度<" (rtos gao) ">:"))
  10. (setq gao (if(setq xxx (getreal tg)) xxx gao));改变字高。

  11. (setq  xiaoshu (getint  "请输入精度位数[整数(0)/1位(1)/2位(2)]<1>: "))
  12. (if (= xiaoshu nil) (setq xiaoshu 1))

  13. ;;;启动时在命令行要显示的内容
  14.    (terpri)
  15.    (prompt "管长管经标注程序加栽完毕,启动命令GDBZ")

  16. ;*************初始化完毕********************
  17. (defun c:GDBZ (/ jl pt1 pt2  x1 y1 z1 x2 y2 z2  ts ag wz du dnwz lwz dnin dnout jlout ob e ee)
  18. (setq ob (ssget '((0 . "line"))))
  19. ;;;(setq ob (ssget ))
  20.   (setq dn (if(> dn 0) dn 800))
  21.    (setq ts (strcat "输入管径<" (itoa dn) ">:"));将"输入管径<默认管径>:"负值给ts
  22.    (setq dn (if(setq dnin (getint ts)) dnin dn));输入新的管径,回车取默认值(即上次运行的值)

  23.   
  24. (repeat (setq ee(sslength ob))

  25.   (setq e(ssname ob  (1- ee)))

  26.   (setq pt1 (vlax-curve-getstartpoint e)
  27.               pt2 (vlax-curve-getendpoint e)
  28.         )

  29.      (setq x1 (car pt1))
  30.      (setq y1 (cadr pt1))
  31.      (setq z1 (caddr pt1))
  32.      (setq x2 (car pt2))
  33.      (setq y2 (cadr pt2))
  34.      (setq z2 (caddr pt2))

  35.   (if
  36.      (< x2 x1)
  37.       (setq pt1 (list x2 y2 z2)
  38.             pt2 (list x1 y1 z1))
  39.      
  40.    )


  41.   
  42.    (setq ag (angle pt1 pt2));计算管线的斜率

  43.    (setq jl (distance pt1 pt2));计算管线的长度
  44.    ;(setq jl (atof (rtos jl 2 xiaoshu)));管线的长度的小数位数
  45.   (setq dimzv(getvar 'dimzin))
  46.   (setvar 'dimzin 0)
  47.   (setq dnout (strcat "DN" (itoa dn ) " L(m)=" (rtos (/  jl 1000.0) 2 xiaoshu)));dnout为输出管径,管道长度的字符串
  48.   (setvar 'dimzin dimzv)
  49.   (setq wz (- (/ jl 2)  (/ (+ (strlen dnout) (* 2 gao)) 2) ))
  50.    (setq wz (polar pt1 ag wz));wz为管线的中点
  51.    
  52.    (setq ag (if(and (> ag (/ pi 2)) (< ag (* pi 1.5))) (- ag pi) ag));将ag调整到0~pi
  53.   
  54.    (setq dnwz (polar wz (+ ag (/ pi 2)) (* 1.5 bl)));dnwz为管径标注的位置
  55.   
  56.    

  57.    (setq du (/ (* ag 180.0) pi));将管线斜率ag转换为度,负给du
  58.    (setq wdpt1 (polar wz 2.356 100))
  59.    (setq wdpt2 (polar wz -0.785 100));wdpt1,wdpt2为放大标注位置矩形对角两点
  60.    (command "zoom" wdpt1 wdpt2)
  61.    ;(command "text" dnwz du gao  dnout);输出管径
  62.   (command "_.text" dnwz gao  dnout);输出管径
  63.   (setq ee(1- ee))
  64.   )
  65.    (command "zoom" "previous")
  66.    (princ);静默退出
  67. )
 楼主| 发表于 2014-2-19 09:00 | 显示全部楼层
本帖最后由 l18c19 于 2014-2-20 09:58 编辑

非常感谢77077(沙发)和edata(板凳)两位老师的热情相助。
1、77077 老师的管长设置成3位小数点不好使(仍只能保留1位小数)。若管线长2989.4mm,标注时应显示2.989m。而实际显示成3m。
2、  edata  老师的:
74   ;(command "text" dnwz dugao  dnout);输出管径
75   (command "_.text" dnwz gao  dnout);输出管径

增改后,无法自动标注了。
小数位显示仍未得到解决
发表于 2015-7-6 13:09 | 显示全部楼层
我就是来看看!
发表于 2015-7-6 15:33 | 显示全部楼层
试一试
;同时标注管径和管长的程序
;*****************参数初始化**********************
(vl-load-com)
(terpri)
(prompt "程序初始化......")
(terpri)

(setq bl (if(setq bl (getreal "输入出图比例1:[1/2/5/10/20/50/100/1000]<1>:")) bl 1.0));出图比例为1/bl
(setq gao (* bl 3.0));根据比例计算字高。
(setq tg (strcat "标注文字高度<" (rtos gao) ">:"))
(setq gao (if(setq xxx (getreal tg)) xxx gao));改变字高。

(setq  xiaoshu (getint  "请输入精度位数[整数(0)/1位(1)/2位(2)/3位(3)]<1>: "))
(if (= xiaoshu nil) (setq xiaoshu 1))

;;;启动时在命令行要显示的内容
   (terpri)
   (prompt "管长管经标注程序加栽完毕,启动命令GDBZ")

;*************初始化完毕********************
(defun c:GDBZ (/ jl pt1 pt2  x1 y1 z1 x2 y2 z2  ts ag wz du dnwz lwz dnin dnout jlout ob e ee)
(setvar "dimzin" 0)
(setq ob (ssget '((0 . "line"))))
;;;(setq ob (ssget ))
  (setq dn (if(> dn 0) dn 800))
   (setq ts (strcat "输入管径<" (itoa dn) ">:"));将"输入管径<默认管径>:"负值给ts
   (setq dn (if(setq dnin (getint ts)) dnin dn));输入新的管径,回车取默认值(即上次运行的值)

  
(repeat (setq ee(sslength ob))

  (setq e(ssname ob  (1- ee)))

  (setq pt1 (vlax-curve-getstartpoint e)
              pt2 (vlax-curve-getendpoint e)
        )

     (setq x1 (car pt1))
     (setq y1 (cadr pt1))
     (setq z1 (caddr pt1))
     (setq x2 (car pt2))
     (setq y2 (cadr pt2))
     (setq z2 (caddr pt2))

  (if
     (< x2 x1)
      (setq pt1 (list x2 y2 z2)
            pt2 (list x1 y1 z1))
     
   )


  
   (setq ag (angle pt1 pt2));计算管线的斜率

   (setq jl (distance pt1 pt2));计算管线的长度
   ;(setq jl (atof (rtos jl 2 xiaoshu)));管线的长度的小数位数
  (setq dnout (strcat "DN" (itoa dn) " L=" (rtos (/  jl 1000.0) 2 xiaoshu) "m"));dnout为输出管径,管道长度的字符串
  
  (setq wz (- (/ jl 2)  (/ (+ (strlen dnout) (* 2 gao)) 2) ))
   (setq wz (polar pt1 ag wz));wz为管线的中点
   
   (setq ag (if(and (> ag (/ pi 2)) (< a
                                       g (* pi 1.5))) (- ag pi) ag));将ag调整到0~pi
  
   (setq dnwz (polar wz (+ ag (/ pi 2)) (* 31.5 bl)));dnwz为管径标注的位置
   

   (setq du (/ (* ag 180) pi));将管线斜率ag转换为度,负给du
   (setq wdpt1 (polar wz 2.356 100))
   (setq wdpt2 (polar wz -0.785 100));wdpt1,wdpt2为放大标注位置矩形对角两点
   (command "zoom" wdpt1 wdpt2)
   (command "text" dnwz gao du dnout);输出管径
  (setq ee(1- ee))
  )
   (command "zoom" "previous")
(setvar "dimzin" 8)
   (princ);静默退出
)

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
l18c19 + 1 + 5 赞一个!

查看全部评分

 楼主| 发表于 2015-7-6 21:31 | 显示全部楼层
感谢楼上朋友的热情相助,确实很好用了。若能增加标注文字离管道的距离调整(上和下选择)就完美了!
发表于 2015-12-26 21:21 | 显示全部楼层
非常感谢………………
发表于 2016-5-7 04:35 来自手机 | 显示全部楼层
不错,很好的学习资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 13:33 , Processed in 0.257997 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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