明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3798|回复: 6

[讨论] [原创]快速制作带序号的图块lisp

[复制链接]
发表于 2010-6-27 21:02:00 | 显示全部楼层 |阅读模式
最近要批量做些带序号的块,简单的做了个LISP程序。
自己用,写的简单,实用为主。
希望论坛的高人给指点指点。

  1. ;功能:制作带序号的图块,图形为转换为块模式。
  2. ;命令:SB 需要选择插入点. 命令 SB2 默认插入基点在选择图形的左下角.
  3. ;命令:RSB 重设块名及序号.首次运行SB或SB2会要求设置.
  4. ;The code by edata bbs.mjtd.com 2010年6月27日20:48:16
  5. ;注意:选择图形不能为空,否则将循环选择,可以按ESC退出.
  6. (defun c:sb2(/ pt1 pt2 en pt_list ssblock1)
  7. (while (= ssblock1 nil) ;选择图形,如为空则需要重新选择.
  8. (setq ssblock1(ssget))
  9. )
  10. (setq pt_list '());开始计算选择的图形左下角点.
  11. (setq sn (sslength ssblock1))
  12. (setq n -1)
  13. (repeat sn
  14. (setq en (ssname ssblock1 (setq n (1+ n))))
  15. (vla-getboundingbox (vlax-ename->vla-object en) 'pt1 'pt2)
  16. (setq pt_list (cons (vlax-safearray->list pt1) pt_list))
  17. ;(setq pt_list (cons (vlax-safearray->list pt2) pt_list))
  18. )
  19. (setq pt1 (apply 'mapcar (cons 'min pt_list)))
  20. ;(setq pt2 (apply 'mapcar (cons 'max pt_list))) ;右上角点
  21. (sk_bname1);调用获得图块名称函数.
  22. (sk_makeblock1);调用制作图块函数.
  23. (princ)
  24. (prin1)
  25. )
  26. ;程序主体需要指定基点
  27. (defun c:sb(/ pt1 ssblock1)
  28. (princ "\n<RSB>按RSB键重新设置参数")
  29. (while (= ssblock1 nil)
  30. (setq ssblock1(ssget)
  31.     pt1 (getpoint "\n请选择插入点:")
  32.     )
  33. )
  34. (sk_bname1)
  35. (sk_makeblock1)
  36. (princ)
  37. )
  38. ;提示输入块名前缀函数
  39. (defun sk_bname1();获得块名函数
  40. (if (or (= sk_blocknamex1 nil)(= sk_blocknamex1 ""))
  41. (setq sk_blocknamex1 (getstring "\n请输入块名前缀:")))
  42. (if (= sk_num1 nil)
  43. (progn
  44. (setq sk_num1 (getint "\n请输入序号" ))
  45. (if (= sk_num1 nil) (setq sk_num1 0))))
  46. (if (= blockname1 nil) (setq blockname1 (strcat sk_blocknamex1 (rtos sk_num1))))
  47. (while (/= (tblobjname "block" blockname1) nil)
  48. (setq sk_num1 (+ sk_num1 1))
  49. (setq blockname1 (strcat sk_blocknamex1 (rtos sk_num1))))
  50. (princ)
  51. )
  52. ;做块函数
  53. (defun sk_makeblock1();制作块函数部分
  54. (if
  55. (= (tblobjname "block" blockname1) nil)
  56. (progn
  57. (command "-block" blockname1 pt1 ssblock1 "")
  58. (command "-insert" blockname1 pt1 "" "" "")
  59. (princ (strcat "\n!!!成功制作新块< " blockname1" >!!!!"))
  60. )
  61. )
  62. (princ)
  63. )
  64. ;重置块名设置
  65. (defun c:rsb();重置块主函数
  66. (setq sk_num1 nil
  67.     sk_blocknamex1 nil)
  68. (sk_bname1)
  69. (princ "\n 设置成功,请重新运行程序")
  70. (princ)
  71. )
  72. (PRINC "\n SB 启动程序")

点评

最好加个演示,有图有码有真相!  发表于 2014-3-1 09:45

评分

参与人数 1明经币 +1 收起 理由
yjr111 + 1 很好啊!非常实用!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-6-27 21:10:00 | 显示全部楼层

支持!!!!!!!!!!!!!

发表于 2010-6-28 11:54:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2014-2-28 14:43:05 | 显示全部楼层
有注释。别人好消化。谢谢!
发表于 2014-3-1 07:43:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2014-3-1 10:48:49 | 显示全部楼层


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
edata + 1 + 50 很给力!

查看全部评分

发表于 2024-4-21 09:55:34 | 显示全部楼层
E大提示有多余的括号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:45 , Processed in 0.174811 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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