找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 729|回复: 10

[编程申请]:请编一个可以写出图中所有块的程序

[复制链接]
发表于 2002-5-18 11:26:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
看到图形中有漂亮的图块,心里就痒,就想把她拥为已有.请编一个可以写出图中所有块的程序,要求写到特定的目录,文件名按块名.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-5-18 15:21:28 | 显示全部楼层

  1. (defun c:dwgc(/ E EN IN N NAM S)
  2.   (prompt "选择要成dwg图的图块[回车全选:")
  3.   (if (NOT (setq s(ssget '((0 . "INSERT")))))
  4.     (setq s(ssget "x" '((0 . "INSERT"))))
  5.     )
  6.   (setq mlm  (dos_getdir "\n选择文件存盘目录:" (if mlm mlm "d:\"))
  7.         n(sslength s) in 0)
  8.   (setvar "cmddia" 0)
  9.   (repeat n
  10.     (setq e(ssname s in) in(1+ in)
  11.           en(entget e)nam (dxf 2 en))
  12.     (command "wblock" (strcat mlm nam) nam )
  13.   )
  14.   (setvar "cmddia" 1) (princ)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2002-5-19 01:14:05 | 显示全部楼层
最初由 cy956 发布
[B][code]
(defun c:dwgc(/ E EN IN N NAM S)
  (prompt "选择要成dwg图的图块[回车全选:")
  (if (NOT (setq s(ssget '((0 . "INSERT")))))
    (setq s(ssget "x" '((0 . "INSERT"))))
    )
  (setq mlm  (dos... [/B]


是否还应该对匿名块进行下判断?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-19 01:17:41 | 显示全部楼层
  1. [FONT=century gothic]
  2. ;;bkc[block countor]选块计数(门窗统计)///bka--全图块统计///ttc文本计数(门窗统计)(text)--------------lxx.2001.2m
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-----门窗统计
  4. (DEFUN c:bkc(/ bn n)
  5.   (princ "\n选块计数------lxx.2001.2m")(princ "\n选择要计数的图块:")
  6.   (setq bn (cdr (assoc 2 (entget(car (entsel))))))
  7.   (princ "\n选择计数范围:")
  8.   (setq n (sslength (ssget(list (cons 2 bn)))))
  9.   (princ (strcat "\n图块 \042" bn "\042 共有 " (itoa n) " 个"))(princ);\042="
  10. )
  11. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  12. ;;;bka全图块统计------lxx.2001.2m
  13. (defun c:bka (/ i ss no)
  14. (princ "\nbka全图块统计------lxx.2001.2m")
  15. (setq i 0)
  16. (while (if(= 0 i)(setq bkn (cdr(assoc 2(tblnext "BLOCK" t))))(setq bkn (cdr(assoc 2(tblnext "BLOCK")))))
  17. (setq ss (ssget "x" (list(cons 2 bkn))) i (+ 1 i))
  18. (if ss (setq no (itoa(sslength ss)))(setq no "0"))
  19. (if (< (strlen bkn) 8)(adds (- 8 (strlen bkn))));;;;(adds len)块名不够8位的加到8位--整齐
  20. (princ (strcat "\n    图块   " bkn "  有  " no "  个"))(princ)
  21. )
  22. )
  23. ;;;;;;;;;;;;;;adds子程序;;;;;;;;;;;;;;;;
  24. (defun adds (len /)(repeat len (setq bkn (strcat bkn " "))));;;;块名不够8位的加到8位--整齐

  25. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. ;;;文本计数----eg.统计"c3"的个数-----门窗统计
  27. (defun c:ttc (/ txt ss i cnt)
  28. (princ "\n    ttc--文本计数[门窗统计]------for text-------lxx.2001.2m")
  29. (setq txt (getstring "\n要统计的text文本:") ss (ssget "x" '((0 . "TEXT"))) i 0 cnt 0)
  30. (repeat (sslength ss)
  31. (setq tt (cdr(assoc 1 (entget(ssname ss i)))) i (1+ i))
  32. (if (wcmatch tt txt)(setq cnt (1+ cnt)))
  33. )
  34. (princ (strcat "\n  文本\042 " txt "\042  共有" (itoa cnt) "  个"))(princ)
  35. )
  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  37. (princ "\n (门窗统计)bkc--[blockcountor]选块计数/bka--全图块统计/ttc文本计数(textcount)------lxx.2001.2m")(princ)
  38. [/font]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-19 01:32:46 | 显示全部楼层
应newer 的建议,改下:


  1. (defun c:dwgc(/ E EN IN N NAM S)
  2.   (prompt "选择要成dwg图的图块[回车全选:")
  3.   (if (NOT (setq s(ssget '((0 . "INSERT")))))
  4.     (setq s(ssget "x" '((0 . "INSERT"))))
  5.     )
  6.   (setq mlm  (dos_getdir "\n选择文件存盘目录:" (if mlm mlm "e:\\16\"))
  7.         n(sslength s) in 0)
  8.   (setvar "cmddia" 0)
  9.   (repeat n
  10.     (setq e(ssname s in) in(1+ in)
  11.           en(entget e)nam (dxf 2 en))
  12.     (if (wcmatch nam "\**")
  13.       (setq nam1(strcat "unb-" (substr nam 2)))
  14.       (setq nam1 nam)
  15.     )
  16.     (command "wblock" (strcat mlm nam1) nam)
  17.   )
  18.   (setvar "cmddia" 1) (princ)
  19. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2002-5-19 01:56:06 | 显示全部楼层
最初由 cy956 发布
[B]应newer 的建议,改下:

[code]
(defun c:dwgc(/ E EN IN N NAM S)
  (prompt "选择要成dwg图的图块[回车全选:")
  (if (NOT (setq s(ssget '((0 . "INSERT")))))
    (setq s(ssget "x" '((0 . "INSERT"))))... [/B]


能否程序最后给个提示,告诉生成了多少个块,存放到哪个目录下等等?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-19 06:11:25 | 显示全部楼层
谢谢各位的辛勤劳动成果,在些深表感谢.
我也从国外的网站下载了一个程序,带dcl对话框,功能还是不全,最好在dcl中选择目录及增加一些选项.比如把实体放在0层的选项.


[CODE]
(defun c:wba (/ dir pref name1 lpref lname bl bln dist star fa masege
                env dialog  ddr)
(setvar "cmdecho" 0)
(setq dir "")
(setq dialog "wba.dcl")
(setq ddr (getvar "dwgprefix"))
;.....................................................................

(setq dat (load_dialog dialog))
(if (not (new_dialog "wba" dat)) (exit))

(set_tile "but" ddr)
(mode_tile "but" 2)
(action_tile "but" "(setq dir $value)")
(action_tile "cancel" "(exit)")

(start_dialog)
(unload_dialog dat)

;....................................................................

(if (= dir "")(exit))
(setq pref (getvar "dwgprefix"))
(setq name1 (getvar "dwgname"))
(setq lpref (+ 1 (strlen pref)))
(setq lname (strlen name1))
(if
(> lname 8)
(setq name (substr name1 lpref))
(setq name name1)
)
(setq file (strcat dir name ".txt"))  

  (setq bl (tblnext "block" T))
  (setq bln (cdr (assoc 2 bl)))
  (setq dist (strcat dir bln))
  (setq star (substr bln 1 1))
   (if (/= star "*")
      (progn
       (command "wblock" dist "Y" bln)
       (setq fa (open file "w"))
       (write-line bln fa)
       (close fa)
      )
   )

   (while
    (setq bl (tblnext "block"))
    (setq bln (cdr (assoc 2 bl)))
    (setq dist (strcat dir bln))
    (setq star (substr bln 1 1))
      (if (/= star "*")
        (progn
         (command "wblock" dist "Y" bln)
         (setq fa (open file "a"))
         (write-line bln fa)
         (close fa)
        )
      )
   )
(setq mesage (strcat "Internal blocks are written to " dir " directory
as External Blocks.
List of blocks stored in " file))
(alert mesage)
(princ)
)
;=====================================================================


;.....................................................................


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(prompt "\nProgram WBA.LSP Version 1.1 is loaded. BTN
At command prompt type: WBA")
(PRINC)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-19 13:26:31 | 显示全部楼层
又一个写块的程序,不知这些程序哪个好,贴出来希望大家来共同学习,共同提高,共同改进.


  1. ; ----------------------------------------------------------------------
  2. ;          (Wblocks all local block definitions to target path)
  3. ;            Copyright (C) 2000 DotSoft, All Rights Reserved
  4. ;                   Website: [url]http://www.dotsoft.com[/url]
  5. ; ----------------------------------------------------------------------
  6. ; DISCLAIMER:  DotSoft Disclaims any and all liability for any damages
  7. ; arising out of the use or operation, or inability to use the software.
  8. ; FURTHERMORE, User agrees to hold DotSoft harmless from such claims.
  9. ; DotSoft makes no warranty, either expressed or implied, as to the
  10. ; fitness of this product for a particular purpose.  All materials are
  11. ; to be considered 慳s-is? and use of this software should be
  12. ; considered as AT YOUR OWN RISK.
  13. ; ----------------------------------------------------------------------

  14. (defun c:wblockm ()
  15.   (setq cmdecho (getvar "CMDECHO"))
  16.   (setvar "CMDECHO" 0)
  17.   ;
  18.   (if (not dos_getdir)
  19.     (setq path (getstring "\nDS> Target Folder: " T))
  20.     (setq path (dos_getdir "Target Folder" (getvar "DWGPREFIX")))
  21.   )
  22.   (if (/= path nil)
  23.     (progn
  24.       (if (= (substr path (strlen path) 1) "\")
  25.         (setq path (substr path 1 (1- (strlen path))))
  26.       )
  27.       (princ "\nDS> Building List of Blocks ... ")
  28.       (setq lst nil)
  29.       (setq itm (tblnext "BLOCK" T))
  30.       (while (/= itm nil)
  31.         (setq nam (cdr (assoc 2 itm)))
  32.         (setq pass T)
  33.         (if (/= (cdr (assoc 1 itm)) nil)
  34.           (setq pass nil)
  35.           (progn
  36.             (setq ctr 1)
  37.             (repeat (strlen nam)
  38.               (setq chk (substr nam ctr 1))
  39.               (if (or (= chk "*")(= chk "|"))
  40.                 (setq pass nil)
  41.               )
  42.               (setq ctr (1+ ctr))
  43.             )
  44.           )
  45.         )
  46.         (if (= pass T)
  47.           (setq lst (cons nam lst))
  48.         )
  49.         (setq itm (tblnext "BLOCK"))
  50.       )
  51.       (setq lst (acad_strlsort lst))
  52.       (princ "Done.")
  53.       ;
  54.       (foreach blk lst
  55.         (setq fn (strcat path (chr 92) blk))
  56.         (if (findfile (strcat fn ".dwg"))
  57.           (command "_.WBLOCK" fn "_Y" blk)
  58.           (command "_.WBLOCK" fn blk)
  59.         )
  60.       )
  61.     )
  62.   )
  63.   ;
  64.   (setvar "CMDECHO" cmdecho)
  65.   (princ)
  66. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-21 02:25:29 | 显示全部楼层
俺贴的上一个程序有误,重写
了一个,加点儿简单对话框;
最近很忙,没时间细检验了,
让大家试用,有问题请指出。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-21 08:46:05 | 显示全部楼层
收到,谢谢cy956兄,建议增加一个输出块到0层,使输出的块上所有实体都在0层。
程序运行时出现一些小错误:
1)点改目录出错,出现BLKSC ; 错误: no function definition: DOS_GETDIR
2)点块列表出错,出现BLKSC ; 错误: no function definition: DXF
3)点手选块输出后,选择实体时按右键出错,出现 错误: no function definition: DXF
改进这些错误,就是一个共享软件了:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-21 23:21:45 | 显示全部楼层
:)


DOS_GETDIR 只要你加载了doslib5.1以上版本即可使用。

把以下行粘贴到lisp文件中:
(defun dxf (#code #list)(cdr (assoc #code #list)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 00:47 , Processed in 0.394781 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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