明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 24878|回复: 91

[源码] 块按顺序编号-V2.4

    [复制链接]
发表于 2013-3-28 11:22 | 显示全部楼层 |阅读模式
本帖最后由 张和平 于 2014-3-7 09:06 编辑

第⑦次更新==V2.4=====================================



最好有探索者字体,或者将你常用的字体复制一份改成以下文件夹中的两种字体的名称:

第⑥次更新=======================================
更新至V2.1.0,加入了文字加框功能。  
  1.           "\n######         块编号       #######"
  2.           "\n######     VERSION 2.1.0    #######"
  3.           "\n#######     peace [ZIAD]    #######"
  4.           "\n#######      2013/04/09     #######"
  5.           "\n##      zhptj1986@gmail.com      ##"
  6.           "\n## blog.sina.com.cn/peacelvirene ##"
  7.           "\n## Copyright (C) 2012-2013 ZIAD  ##"
  8.           "\n##      All Rights Reserved      ##"
  9.           "\n***********************************"
  10.           "\n1、块编号命令:BN;"
  11.           "\n2、可选择起始编号、编号前缀及编号顺"
  12.           "\n   序。"
  13.           "\n***********************************"
  14.           "\nV2.1.0更新说明(2013/04/09):"
  15.           "\n1、加入了文字加框功能,有不加框、加"
  16.           "\n   圆框、加矩形框、加圆角矩形框和加"
  17.           "\n   椭圆框五种模式;"
  18.           "\n2、加入了错误处理功能,但是还不够完"
  19.           "\n   善,以后小版本中慢慢完善。"
  20.           "\n***********************************"
复制代码


第⑤次更新=======================================
          "\n######         块编号       #######"
          "\n######     VERSION 2.0.0    #######"
          "\n#######     peace [ZIAD]    #######"
          "\n#######      2013/04/08     #######"
          "\n##      zhptj1986@gmail.com      ##"
          "\n## blog.sina.com.cn/peacelvirene ##"
          "\n## Copyright (C) 2012-2013 ZIAD  ##"
          "\n##      All Rights Reserved      ##"
          "\n***********************************"
          "\n1、块编号命令:BN;"
          "\n2、可选择起始编号、编号前缀及编号顺"
          "\n   序。"
          "\n***********************************"
          "\nV2.0.0更新说明(2013/04/08):"
          "\n1、全面改版,加入了参数设置对话框,"
          "\n   不必每次都设置一遍参数,提高了绘"
          "\n   图效率;"
          "\n2、此版在功能上与前一版没有大差别,"
          "\n   只是让绘图步骤更加直观;"
          "\n3、参数设置界面加入了文字加框的一些"
          "\n   选项,但是目前尚不起作用,将在下"
          "\n   一版中加入这个功能。"
          "\n***********************************"


第④次更新=======================================
完善了不少内容,更新说明如下:
;"***********************************"
;"V1.3.0更新说明:"
;"1、文字随块一起转动,并调整方向使得"
;"   视图上比较舒服;"
;"***********************************"
;"V1.2.0更新说明:"
;"1、编号显示三位数,不足三位的前面以"
;"   0补足;"
;"2、修改原先有种编号顺序不能用的bug。"
;"3、增加编号顺序至五种;"
;"4、不强制前缀;"
;"***********************************"
;"V1.1.0更新说明:"
;"1、更新了获取块外框角点的函数,解决"
;"   编号位置不准的bug;"
;"***********************************"

总体效果如下图所示:

放上V1.3.0源码:


第③次更新=======================================
放上V1.1.0源码

第②次更新=======================================
在某些块上会出现定位不准的bug,现在已经找到更为强大的获取块边框角点的函数,这个bug基本解决了,随后更新上新的源码。
另外,有个问题,我在运行时,虽然是正确的,但是在command栏会跳出好多下面的提示:
  1. 未知命令“BN”。按 F1 查看帮助。
  2. 未知命令“BN”。按 F1 查看帮助。
  3. 未知命令“BN”。按 F1 查看帮助。
  4. 未知命令“BN”。按 F1 查看帮助。
  5. 未知命令“BN”。按 F1 查看帮助。
  6. 未知命令“BN”。按 F1 查看帮助。
  7. 未知命令“BN”。按 F1 查看帮助。
  8. 未知命令“BN”。按 F1 查看帮助。
  9. 未知命令“BN”。按 F1 查看帮助。
  10. 未知命令“BN”。按 F1 查看帮助。
  11. 未知命令“BN”。按 F1 查看帮助。
  12. 未知命令“BN”。按 F1 查看帮助。
  13. 未知命令“BN”。按 F1 查看帮助。
  14. 未知命令“BN”。按 F1 查看帮助。
  15. 未知命令“BN”。按 F1 查看帮助。
  16. 未知命令“BN”。按 F1 查看帮助。
复制代码
第①次更新=======================================其中借用了论坛上一些大神们的函数,在源码中也标出了。。

源码贴上:
  1. ;"######         块编号       #######"
  2. ;"######     VERSION 1.0.0    #######"
  3. ;"#######     peace [ZIAD]    #######"
  4. ;"#######      2013/03/28     #######"
  5. ;"##      zhptj1986@gmail.com      ##"
  6. ;"## blog.sina.com.cn/peacelvirene ##"
  7. ;"## Copyright (C) 2012-2013 ZIAD  ##"
  8. ;"##      All Rights Reserved      ##"
  9. ;"***********************************"
  10. ;"1、块编号命令:BN;"
  11. ;"2、可选择起始编号、编号前缀及编号顺"
  12. ;"   序。"
  13. ;"***********************************"
  14. ;"欢迎使用!欢迎提出意见和建议!"
  15. ;"***********************************"
  16. (DEFUN C:BN(/ en vlay blockname i m end minp minp maxp minx maxx miny maxy pmin pmax
  17.               startnum frontname midplst vcmd nummode)
  18.   (vl-load-com)
  19.   (princ "\n块编号,by Peace ZIAD。有问题请发邮件至zhptj1986@gmail.com")
  20.   (setq vlay (getvar "CLAYER"))
  21.   (setq vcmd (getvar "cmdecho"))
  22.   (setq vlup(getvar "luprec"))
  23.   (setvar "cmdecho" 0)
  24.   (setvar "luprec" 0)
  25.   (bnlayermake "车位编号" 2 "continuous")
  26.   (setq startnum "")
  27.   (setq frontname "")
  28.   (setq nummode "")
  29.   (setq startnum (getstring "\n ①请输入起始编号[1]:"))
  30.   (if (= startnum "")(setq startnum 1)(setq startnum (atoi startnum)))
  31.   (setq frontname (getstring "\n ②请输入前缀[car]:"))
  32.   (if (= frontname "")(setq frontname "car"))
  33.   (setq nummode (getstring "\n ③编号顺序:由上到下由左到右(A)/由下到上由左到右(B)[A]:"))
  34.   (if (= nummode "")(setq nummode "A")
  35.     (if (= (strcase nunmode) "B")        ;将字符转换成大写
  36.       (setq nunmode "B")
  37.       (setq nunmode "A")
  38.     )
  39.   )
  40.   ;(setq blockname "")
  41.   ;(while (= blockname "")
  42.     (setq blockname (cdr (assoc 2 (entget (car (entsel "\n ④请拾取要编号的块名:"))))))
  43.   ;)
  44.   (PRINC (strcat "\n**块名选择成功,需要编号的块名为"" blockname ""\n ⑤选择要编号的块:"))
  45.   (while(null(setq en (ssget (list'(0 . "insert")(cons 2 blockname))))))
  46.   (setq i 1)
  47.   (setq midplst nil)
  48.   (repeat (setq m (sslength en))
  49.     (setq end (ssname en (1- i)))
  50.     (bngetmidp)
  51.     (setq midplst (cons midp midplst))
  52.     (setq i (1+ i))
  53.   )
  54.   (if (= nummode "A")
  55.     (setq midplst (bnsort-xy midplst '(< >)))
  56.     (setq midplst (bnsort-xy midplst '(< <)))
  57.   )
  58.   (setq i 1)
  59.   (repeat m
  60.     (setq midp (nth (1- i) midplst))
  61.     (command "text" "j" "m" midp 300 "" (strcat frontname (rtos (1- (+ startnum i)))) "")
  62.     (setq i (1+ i))
  63.   )
  64.   (setvar "CLAYER" vlay)
  65.   (setvar "cmdecho" vcmd)
  66.   (setvar "luprec" vlup)
  67.   (princ (strcat "\n[BN]块编号顺利完成任务!共编号" (rtos m) "个!最大编号=" (rtos (1- (+ m startnum)))))
  68.   (princ)
  69.   
  70. )

  71. (defun bngetmidp()
  72. (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
  73. (setq minp (vlax-safearray->list minp)
  74.        maxp (vlax-safearray->list maxp))
  75. (setq minx (car minp)
  76.        maxx (car maxp)
  77.        miny (cadr minp)
  78.        maxy (cadr maxp))
  79. (setq pmin (list minx miny)
  80.        pmax (list maxx maxy))
  81. (setq midp (mapcar '* '(0.5 0.5) (mapcar '+ pmin pmax)))
  82. )

  83. (defun bnlayermake (name color ltype)
  84.   (command "layer" "m" name "c" color name "l" ltype name "")
  85. )

  86. ;来源http://bbs.mjtd.com/thread-9546-1-1.html[提供者:aeo000000]
  87. ;(sort-xy li '(>))  只按x由大到小
  88. ;(sort-xy li '(<))  只按x由小到大
  89. ;(sort-xy li '(nil >))    只按y由大到小
  90. ;(sort-xy li '(nil <))    只按y由小到大
  91. ;其余x和y组合的情况类推
  92. (defun bnsort-xy (li how / a)
  93. (if(setq a(car how))(setq li(vl-sort li '(lambda(x y)((eval a)(car x)(car y))))))
  94. (if(setq a(cadr how))(setq li(vl-sort li '(lambda(x y)((eval a)(cadr x)(cadr y))))))
  95. li
  96. )

  97. (princ "\n块编号,命令BN")
  98. (princ)

复制代码
效果如下:





本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
flytoday + 1 加入行跟误差限制为好~
flyfox1047 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-4-1 14:16 | 显示全部楼层
张和平 发表于 2013-4-1 10:30
我怎么没有找到cal这个命令呢?请问能给出这个命令的详细格式及作用吗?

CAL 命令 :计算数学和几何表达式

通常,程序假定所有坐标都是相对于当前 UCS 的。 可以使用下列函数在 UCS 和 WCS 之间转换点的坐标值。

w2u(p1)

将以 WCS 表示的点 p1 转换到当前 UCS 中。

u2w(p1)

将以当前 UCS 表示的点 p1 转换到 WCS 中。

可使用 w2u 查找用当前的 UCS 表示的 WCS 的原点:

w2u([0,0,0])

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-26 22:40 | 显示全部楼层
本帖最后由 Aries 于 2022-3-26 22:44 编辑

求助  顺序能不能加上功能   上下分行,行左起啊?    就是第一排12345   第二排6789 10   F:\微信公众号久讑學習社\天正图转换纸演示\编号.png

本帖子中包含更多资源

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

x
发表于 2013-3-28 12:11 | 显示全部楼层
  (command "text" "j" "m" midp 300 "" (strcat frontname (rtos (1- (+ startnum i)))) "")
修改成  (command "text" "j" "m" midp 300 "" (strcat frontname (rtos (1- (+ startnum i)))))
 楼主| 发表于 2013-3-28 12:38 | 显示全部楼层
hao3ren 发表于 2013-3-28 12:11
(command "text" "j" "m" midp 300 "" (strcat frontname (rtos (1- (+ startnum i)))) "")
修改成  (co ...

OK...额,,居然忘记这个地方了,,,现在好了,,谢谢!
发表于 2013-3-31 21:46 | 显示全部楼层
最近正在学习对车位进行编号呢,过来学习一下!实际操作中的编号文字方向应该是同一方向,而不愿其随着图块转方向!
 楼主| 发表于 2013-3-31 22:54 | 显示全部楼层
黑洞—杜明智 发表于 2013-3-31 21:46
最近正在学习对车位进行编号呢,过来学习一下!实际操作中的编号文字方向应该是同一方向,而不愿其随着图块 ...

这个简单,通过简单修改便可增加选项,选择文字是否随图块旋转
发表于 2013-3-31 23:10 | 显示全部楼层
本帖最后由 黑洞—杜明智 于 2013-3-31 23:13 编辑
张和平 发表于 2013-3-31 22:54
这个简单,通过简单修改便可增加选项,选择文字是否随图块旋转

  1. ;;取得对象要插入编号的点->对象的中点
  2. (setq obj (vlax-ename->vla-object en))
  3. ;; 得到包围框   
  4. (setq avc (vla-GetBoundingBox Obj 'minpt 'maxpt))   
  5. (setq minPt (vlax-safearray->list minPt))   
  6. (setq maxPt (vlax-safearray->list maxPt))   
  7. (setq minPt (cal "w2u(minPt)"))   
  8. (setq maxPt (cal "w2u(maxPt)"))   
  9. (setq PtCen        (list (/ (+ (car minpt) (car maxpt)) 2)                      (/ (+ (cadr minpt) (cadr maxpt)) 2)                )    )
一直困惑我的UCS与WCS之间的转换,看了很多矩阵转换函数,无奈数学基础差,就在刚刚突然发现了CAD原有的CAL命令,一下子解决了我的大问题。运用还不成熟,不过顺着搞下去也许有成效。也要谢谢你的程序带给我的灵感。

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-4-1 10:30 | 显示全部楼层
黑洞—杜明智 发表于 2013-3-31 23:10
一直困惑我的UCS与WCS之间的转换,看了很多矩阵转换函数,无奈数学基础差,就在刚刚突然发现了CAD原有的C ...

我怎么没有找到cal这个命令呢?请问能给出这个命令的详细格式及作用吗?
 楼主| 发表于 2013-4-1 14:32 | 显示全部楼层
黑洞—杜明智 发表于 2013-4-1 14:16
CAL 命令 :计算数学和几何表达式

通常,程序假定所有坐标都是相对于当前 UCS 的。 可以使用下列函数在 ...

这个好牛逼啊。。。。
发表于 2013-4-1 21:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 07:23 , Processed in 0.269603 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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