明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2212|回复: 6

[源码] 连续明细标注(新手报到帖)欢迎拍砖

[复制链接]
发表于 2014-4-17 22:09 | 显示全部楼层 |阅读模式
本帖最后由 Rimford 于 2014-4-17 22:11 编辑

刚到明经社区,有一种相见恨晚的感觉。坛子里的精华太多,看不完啊!
光看贴不发贴,不能称之为交流啊!

这是我自己做的一个可以进行连续明细标注的小程序,还有待进一步完善和扩展,欢迎高手拍砖!
以后我想把明细标注和明细栏关联,请高手指点。之前在清华天河和机械工程师见过类似功能。

  1. (defun c:label_num()
  2.     ;本程序用于零件序号标注,代替多重引线功能
  3.   (commonsets);检查图层设置

  4.     (setvar "clayer" "DIM")
  5.     (setvar "textstyle" "5.0")
  6.   (setq dd 8)(setq dc 1)
  7.   (setq num (getint "\n起始编号 <1>: "))
  8.   (if (null num) (setq num 1))
  9.   (setq dd2(/ dd 5))
  10.   (setq pt1 (getpoint "\n第一点: "))
  11.   (while (/= pt1 nil)
  12.     (command "donut" 0 dd2 pt1 "")
  13.       (setvar "osmode" 16383);打开所有对象捕捉
  14.     (setq pt2 (getpoint "\n第二点: "))
  15.     (setvar "osmode" 0);关闭所有对象捕捉
  16.     (command "line" pt1 pt2 "")
  17.       ;通过pt1-pt2的角度,判断pt3的位置
  18.     (setq ang (angle pt1 pt2))
  19.     (cond  ((and (> ang (* pi 0.5)) (< ang (* pi 1.5)))  (setq pt3 (polar pt2 pi dd)))
  20.       (t (setq pt3 (polar pt2 0 dd)))
  21.     )
  22.     (command "line" pt2 pt3 "")
  23.     (setq en1 (entlast))
  24.    
  25.     (command "text" "m" (polar (get_midpt pt2 pt3) (/ pi 2) (/ dd 2))  0  (itoa num))
  26.     (setq en2 (entlast))

  27.     ;判断是否增加连续序号
  28.       (setq what null)
  29.       (setq num (+ num 1))
  30.       (setq what(getstring "\n[增加连续竖向序号(H)][增加连续横向序号(V)]"))
  31.    
  32.       (if(or (= what "h" ) (= what "H" ))(label_num_H))
  33.       (if(or (= what "v" ) (= what "V" ))(label_num_V))
  34.       ;如果不增加连续序号,则重新开始标注
  35.     (setq pt1 (getpoint "\n第一点: "))
  36.   )
  37.   (prin1)   
  38. )

  39. (defun label_num_V()
  40.     ;本程序用于增加连续横向序号
  41.   (cond  ((and (> ang (* pi 0.0)) (< ang (* pi 0.5)))  (label_num_V1))
  42.       ((and (> ang (* pi 1.0)) (< ang (* pi 1.5)))  (label_num_V1))
  43.       (t (label_num_V2))
  44.     )
  45. )

  46. (defun label_num_V1()
  47.     ;本程序用于增加连续横向序号
  48.    (setq ss1(ssadd))
  49.   (setq en3 nil)

  50.     (setq pan3 "Y")
  51.     (while(= pan3 "Y")
  52.     (cond  ((and (> ang (* pi 0.0)) (< ang (* pi 0.5)))
  53.         (progn
  54.           (setq pt4(polar pt3 (* pi 1.75) dc))
  55.            (setq pt5(polar pt4 (* pi 0.25) dc))
  56.            (setq pt6(polar pt5 (* pi 0.0) dd))
  57.         )
  58.       )
  59.       (t
  60.         (progn
  61.           (setq pt4(polar pt3 (* pi 1.25) dc))
  62.            (setq pt5(polar pt4 (* pi 0.75) dc))
  63.            (setq pt6(polar pt5 (* pi 1.0) dd))
  64.         )
  65.       )
  66.     )
  67.     (command "line" pt3 pt4 "")
  68.     (command "line" pt4 pt5 "")
  69.     (command "line" pt5 pt6 "")
  70.     (command "text" "m" (polar (get_midpt pt5 pt6) (/ pi 2) (/ dd 2)) 0 (itoa num))
  71.   
  72.       (setq pt3 pt6)
  73.   
  74.     (setq num (+ num 1))
  75.     (setq pan3(getstring "\n是否继续横向添加连续序号?[终止添加(N)]"))
  76.       (if (and (/= pan3 "N") (/= pan3 "n"))(setq pan3 "Y"))
  77.   )
  78. )

  79. (defun label_num_V2()
  80.     ;本程序用于增加连续横向序号
  81.   (setq ss1(ssadd));建立或清空选择集
  82.   (setq en3 nil);付值
  83.     (setq en4 nil);付值

  84.     (setq pan4 "Y");付初始值,判断是否继续
  85.     (while(= pan4 "Y")
  86.       (setq ent1 en1)
  87.       (setq ent2 en2)
  88.   
  89.       (ssadd ent1 ss1)
  90.       (ssadd ent2 ss1)
  91.    
  92.       (if(/= en3 nil)
  93.       (progn
  94.           (setq ent3 en3)
  95.           (ssadd ent3 ss1)
  96.       )
  97.     )

  98.       (if(/= en4 nil)
  99.       (progn
  100.           (setq ent4 en4)
  101.           (ssadd ent4 ss1)
  102.       )
  103.     )
  104.    

  105.      (cond  ((and (> ang (* pi 0.5)) (< ang (* pi 1.0)))
  106.          (progn
  107.            (setq pt3(polar pt2 (* pi 1.0) dd))
  108.           (setq pt4(polar pt3 (* pi 1.25) dc))
  109.            (setq pt5(polar pt4 (* pi 0.75) dc))
  110.         )
  111.       )
  112.       ((and (> ang (* pi 1.5)) (< ang (* pi 2.0)))
  113.           (progn
  114.            (setq pt3(polar pt2 (* pi 0.0) dd))
  115.           (setq pt4(polar pt3 (* pi 1.75) dc))
  116.            (setq pt5(polar pt4 (* pi 0.25) dc))
  117.         )
  118.       )
  119.     )
  120.   
  121.       (command "move" ss1 "" pt2 pt5)
  122.   
  123.     (command "line" pt2 pt3 "")
  124.     (setq en1 (entlast))
  125.     (command "text" "m" (polar (get_midpt pt2 pt3) (/ pi 2) (/ dd 2)) 0 (itoa num))
  126.     (setq en2 (entlast))
  127.       (command "line" pt3 pt4 "")
  128.       (setq en3(entlast))
  129.       (command "line" pt4 pt5 "")
  130.       (setq en4(entlast))
  131.   
  132.     (setq num (+ num 1))
  133.     (setq pan4(getstring "\n是否继续横向添加连续序号?[终止添加(N)]"))
  134.       (if (and (/= pan4 "N") (/= pan4 "n"))(setq pan4 "Y"))
  135.   )
  136. )

  137. (defun label_num_H()
  138.     ;本程序用于增加连续纵向序号
  139.   (cond  ((and (> ang (* pi 0.0)) (< ang (* pi 0.5)))  (label_num_H1))
  140.       ((and (> ang (* pi 1.0)) (< ang (* pi 1.5)))  (label_num_H1))
  141.       (t (label_num_H2))
  142.     )
  143.   (prin1)   
  144. )

  145. (defun label_num_H2()
  146.     ;本程序用于增加连续纵向序号
  147.     (setq pan2 "Y")
  148.     (while(= pan2 "Y")
  149.     (cond  ((and (> ang (* pi 0.5)) (< ang (* pi 1.5)))
  150.         (progn
  151.           (setq pt4(polar pt2 (* pi 0.5) dd))
  152.            (setq pt5 (polar pt4 pi dd))
  153.         )
  154.       )
  155.       (t
  156.         (progn
  157.           (setq pt4(polar pt2 (* pi 1.5) dd))
  158.             (setq pt5 (polar pt4 (* pi 0.0) dd))
  159.         )
  160.       )
  161.     )
  162.     (command "line" pt4 pt5 "")
  163.     (command "line" pt2 pt4 "")
  164.     (command "text" "m" (polar (get_midpt pt4 pt5) (/ pi 2) (/ dd 2)) 0 (itoa num))
  165.   
  166.       (setq pt2 pt4)
  167.   
  168.     (setq num (+ num 1))
  169.     (setq pan2(getstring "\n是否继续竖向添加连续序号?[终止添加(N)]"))
  170.       (if (and (/= pan2 "N") (/= pan2 "n"))(setq pan2 "Y"))
  171.   )
  172.   (prin1)   
  173. )

  174. (defun label_num_H1()
  175.     ;本程序用于增加连续纵向序号
  176.   (setq ss1(ssadd))
  177.   (setq en3 nil)

  178.     (setq pan1 "Y")
  179.     (while(= pan1 "Y")
  180.       (setq ent1 en1)
  181.       (setq ent2 en2)
  182.       (ssadd ent1 ss1)
  183.       (ssadd ent2 ss1)
  184.       (if(/= en3 nil)
  185.       (progn
  186.           (setq ent3 en3)
  187.           (ssadd ent3 ss1)
  188.       )
  189.     )
  190.    
  191.      (cond  ((and (> ang (* pi 0.0)) (< ang (* pi 0.5)))  (setq pt4(polar pt2 (* pi 0.5) dd)))
  192.       ((and (> ang (* pi 1.0)) (< ang (* pi 1.5)))  (setq pt4(polar pt2 (* pi 1.5) dd)))
  193.     )

  194.      (command "move" ss1 "" pt2 pt4)
  195.   
  196.     (command "line" pt2 pt3 "")
  197.     (setq en1 (entlast))
  198.     (command "text" "m" (polar (get_midpt pt2 pt3) (/ pi 2) (/ dd 2)) 0 (itoa num))
  199.     (setq en2 (entlast))
  200.       (command "line" pt2 pt4 "")
  201.       (setq en3(entlast))
  202.   
  203.     (setq num (+ num 1))
  204.     (setq pan1(getstring "\n是否继续竖向添加连续序号?[终止添加(N)]"))
  205.       (if (and (/= pan1 "N") (/= pan1 "n"))(setq pan1 "Y"))
  206.   )
  207. )

  208. (defun get_midpt(pt1 pt2);求两点中点坐标
  209.     (setq mx(/ (+ (car pt1) (car pt2)) 2))
  210.       (setq my(/ (+ (cadr pt1) (cadr pt2)) 2))
  211.     (list mx my)
  212. )
  1. <div class="blockcode"><blockquote>;**********************本程序为公用程序,用于加载加载项,设置图层等*******************************
  2. (defun  commonsets()
  3.     ;--------------变量设置-------------------------------------------------
  4.     (setq textfont "SIMFANG.TTF");字体设置为仿宋
  5.     (setq textfont (strcat (strcat (getenv "windir") "\\fonts\") textfont));Windows字体设置
  6. ;;;  (setq bigtextgont "hztxt.shx");大字体设置
  7.     (setq textwidth 0.7);字体比例

  8.     ;------------------ActiveX准备工作-----------------------------------------------------------
  9.     (vl-load-com);加载Visual Lisp扩展功能函数,同时可以控制ActiveX对象
  10.     (setq acadobj(vlax-get-acad-object));取得当前AutoCAD应用程序母体对象
  11.     (setq dwgobj(vla-get-ActiveDocument acadobj));取得作用中的图形文件
  12.     (setq mspace(vla-get-ModelSpace dwgobj));取得模型空间集合对象
  13.     (setq layersobj(vla-get-layers dwgobj));取得图层集合对象
  14.     (setq stylesobj(vla-get-textstyles dwgobj));取得字体集合对象
  15.     (setq linetypesobj(vla-get-linetypes dwgobj));取得字体集合对象
  16.     (setq blocksobj(vla-get-blocks dwgobj));取得图形中的块集合对象
  17.     (setq layoutsobj(vla-get-layouts dwgobj));取得图形中的所有布局设置集合对象
  18.     ;------------------设置图层------------------------------------------------------------------
  19.     ;------------------加载中心线、双点画线和虚线----------
  20.     (vl-catch-all-apply 'vla-load (list linetypesobj "divide" (findfile "acadiso.lin")) );加载双点划线
  21.     (vl-catch-all-apply 'vla-load (list linetypesobj "center" (findfile "acadiso.lin")) );加载中心线
  22.     (vl-catch-all-apply 'vla-load (list linetypesobj "dashed" (findfile "acadiso.lin")) );加载虚线
  23.     ;-------------------取得图层集合列表-------------------
  24.     (setq laylist nil)
  25.     (vlax-for sobj layersobj
  26.     (setq layname(vla-get-name sobj))
  27.         (setq laylist(cons layname laylist))
  28.     )
  29.     ;---------判断图层是否存在,如果不存在,增设该图层-----
  30.     ;---------------设置0图层------------------------------
  31.     (setq lay1(vla-add layersobj "0"))
  32.     (vla-put-color lay1 7)
  33.     (vla-put-linetype lay1 "continuous")
  34.     (vla-put-lineweight lay1 50)
  35.     ;---------------设置CEN图层----------------------------
  36.     (setq lay1(vla-add layersobj "CEN"))
  37.     (vla-put-color lay1 3)
  38.     (vla-put-linetype lay1 "Center")
  39.     (vla-put-lineweight lay1 25)
  40.     ;---------------设置DASH图层---------------------------
  41.     (setq lay1(vla-add layersobj "DASH"))
  42.     (vla-put-color lay1 2)
  43.     (vla-put-linetype lay1 "DASHED")
  44.     (vla-put-lineweight lay1 25)
  45.     ;---------------设置DIM图层----------------------------
  46.     (setq lay1(vla-add layersobj "DIM"))
  47.     (vla-put-color lay1 4)
  48.     (vla-put-linetype lay1 "continuous")
  49.     (vla-put-lineweight lay1 25)
  50.     ;---------------设置DIV图层----------------------------
  51.     (setq lay1(vla-add layersobj "DIV"))
  52.     (vla-put-color lay1 5)
  53.     (vla-put-linetype lay1 "Divide")
  54.     (vla-put-lineweight lay1 25)
  55.     ;---------------设置HAT图层----------------------------
  56.     (setq lay1(vla-add layersobj "HAT"))
  57.     (vla-put-color lay1 6)
  58.     (vla-put-linetype lay1 "continuous")
  59.     (vla-put-lineweight lay1 25)
  60.     ;---------------设置THIN图层---------------------------
  61.     (setq lay1(vla-add layersobj "THIN"))
  62.     (vla-put-color lay1 1)
  63.     (vla-put-linetype lay1 "continuous")
  64.     (vla-put-lineweight lay1 25)
  65.     ;---------------设置TXT图层----------------------------
  66.     (setq lay1(vla-add layersobj "TXT"))
  67.     (vla-put-color lay1 2)
  68.     (vla-put-linetype lay1 "continuous")
  69.     (vla-put-lineweight lay1 25)
  70.     ;---------------设置STR图层----------------------------
  71.     (setq lay1(vla-add layersobj "STR"))
  72.     (vla-put-color lay1 7)
  73.     (vla-put-linetype lay1 "continuous")
  74.     (vla-put-lineweight lay1 50)
  75.     ;-------------------设置文字样式--------------------------------------------------------
  76.     ;-------------------取得文字样式集合列表---------------
  77.     (setq stylist nil)
  78.     (vlax-for tobj stylesobj
  79.     (setq styname(vla-get-name tobj))
  80.         (setq stylist(cons styname laylist))
  81.     )
  82.     ;------------------设置文字样式1.8---------------------
  83.     (setq sty1(vla-add stylesobj "1.8"))
  84.     (vla-put-fontfile sty1 textfont)
  85. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  86.     (vla-put-height sty1 1.8)
  87.     (vla-put-width sty1 textwidth)
  88.     ;------------------设置文字样式2.5---------------------
  89.     (setq sty1(vla-add stylesobj "2.5"))
  90.     (vla-put-fontfile sty1 textfont)
  91. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  92.     (vla-put-height sty1 2.5)
  93.     (vla-put-width sty1 textwidth)
  94.     ;------------------设置文字样式3.5---------------------
  95.     (setq sty1(vla-add stylesobj "3.5"))
  96.     (vla-put-fontfile sty1 textfont)
  97. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  98.     (vla-put-height sty1 3.5)
  99.     (vla-put-width sty1 textwidth)
  100.     ;------------------设置文字样式5.0---------------------
  101.     (setq sty1(vla-add stylesobj "5.0"))
  102.     (vla-put-fontfile sty1 textfont)
  103. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  104.     (vla-put-height sty1 5.0)
  105.     (vla-put-width sty1 textwidth)
  106.     ;------------------设置文字样式7.0---------------------
  107.     (setq sty1(vla-add stylesobj "7.0"))
  108.     (vla-put-fontfile sty1 textfont)
  109. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  110.     (vla-put-height sty1 7.0)
  111.     (vla-put-width sty1 textwidth)
  112.     ;------------------设置文字样式10---------------------
  113.     (setq sty1(vla-add stylesobj "10"))
  114.     (vla-put-fontfile sty1 textfont)
  115. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  116.     (vla-put-height sty1 10)
  117.     (vla-put-width sty1 textwidth)
  118.     ;------------------设置文字样式14---------------------
  119.     (setq sty1(vla-add stylesobj "14"))
  120.     (vla-put-fontfile sty1 textfont)
  121. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  122.     (vla-put-height sty1 14)
  123.     (vla-put-width sty1 textwidth)
  124.     ;------------------设置文字样式20---------------------
  125.     (setq sty1(vla-add stylesobj "20"))
  126.     (vla-put-fontfile sty1 textfont)
  127. ;;;    (vla-put-bigfontfile sty1 bigtextfont)
  128.     (vla-put-height sty1 20)
  129.     (vla-put-width sty1 textwidth)
  130.   ;-----------------避免不必要的输出--------------------
  131.     (prin1)
  132. ) ;_ 结束defun

本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
菜鸟初来乍到 + 1 为焊缝程序来这里加币的,感谢楼主奉献
liuhaixin88 + 1 支持!谢谢分享!

查看全部评分

发表于 2014-4-23 15:17 | 显示全部楼层
很不错啊,下载下来用了几天,有几个问题想请教一下:
1、能不能把件号跟全局标注比例连接起来,因为标注完后拉件号有时件号太小,不成比例;getvar(dimscale类似这样子的
2、件号对齐不方便,见过langjs弄过一个自动对齐件号的,很不错;《动态引线标注 v2.0》
3、拉出件号的时候能不能是动态可见的,方便调整件号的角度。。。
 楼主| 发表于 2014-4-24 14:01 | 显示全部楼层
梦里水香 发表于 2014-4-23 15:17
很不错啊,下载下来用了几天,有几个问题想请教一下:
1、能不能把件号跟全局标注比例连接起来,因为标注完 ...

这也是我想做的
研究研究先
发表于 2017-12-18 20:56 | 显示全部楼层
楼主请问这个现在优化了吗
 楼主| 发表于 2017-12-29 22:13 | 显示全部楼层
ansyss 发表于 2017-12-18 20:56
楼主请问这个现在优化了吗

你看我另一篇帖子吧,里面有这个优化
发表于 2017-12-30 10:52 | 显示全部楼层
非常感谢楼主,在这里看到很多VLA函数的用法,谢谢!
发表于 2023-4-2 08:08 | 显示全部楼层
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 14:57 , Processed in 0.499143 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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