明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5042|回复: 5

[基础] 求批量插入图纸的程序

[复制链接]
发表于 2010-5-26 22:01 | 显示全部楼层 |阅读模式

1.谁有批量插入图纸的程序,只要能把一个目录下的多张图纸,作为图块依次插入新图中,图块名用原文件名。

2.我不需要佷好的排版,不需要旋转,各个块能铺开不要叠成一堆就行。

3.另外我还需要反向操作的程序,即把一张图的各个图块依次输出,图块名做文件名。

以上这个东西的用途是,解密。

发表于 2010-5-27 00:00 | 显示全部楼层

不明白的是这样一个程序和解密有什么关联




归档文件合并.lsp

1。需要doslib函数库支持

2。需要手动建立c:\QGY_temp文件夹

(defun c:insdwgs()
 (princ "\n 归档文件合并   edit by yuuboo \n")
 (setvar "cmdecho" 0)
 (setq dwgpath (dos_getdir "选择要操作的文件夹:" (if dwgpath dwgpath "F:\\work归档") "归档文件后处理"))
 (if dwgpath
  (progn
   (setq fff (dos_dir (strcat dwgpath "*.dwg") 1))
   (setq ini (open "c:\\QGY_temp\\目录列表.ini" "w"))
   (foreach x fff
    (write-line (strcat dwgpath x) ini)
   )
   (setq ini (open "c:\\QGY_temp\\目录列表.ini" "r"))
   (insdwgs_main)
  )
 )
(princ)
)

(defun ax:2DPoint (pt)
 (vl-load-com)
 (vlax-make-variant
  (vlax-safearray-fill
   (vlax-make-safearray vlax-vbdouble '(0 . 1))
   (list (car pt) (cadr pt))
  )
 )
)

(defun ax:GetBoundingBox (ent / ll ur)
 (vl-load-com)
 (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
 (mapcar 'vlax-safearray->list (list ll ur))
)

(defun insdwgs_main()
 (setq ss-ss '())
 (while (and (setq newdwg (read-line ini)) (/= newdwg ""))
  (command "insert" newdwg "non" "0,0" 1 1 0)
  (setq dwg_block (entlast))
  (setq ss (ssadd))
  (setq ss (ssadd (entlast) ss))
  (setq box (ax:getboundingbox dwg_block))
  (setq p1 (car box))
  (setq p2 (cadr box))
  (setq pp (polar (list (car p2)(cadr p1)) (* pi 0.25) 20000))
 ;; (command "text" "non" pp 20000 0 (substr (nth 2 (dos_strtokens (nth 2 (dos_splitpath newdwg)) "-")) 3))
 (command "text" "non" pp 20000 0 newdwg);;我的程序是针对工程图纸合并所写,所以20000的字高对一般的应用可能大了,自己改吧
  (setq ss (ssadd (entlast) ss))
  (setq diss (- (cadr p2)(cadr p1) -10000))
  (setq ss-ss (cons (list (list (car p1)(cadr p2)) diss ss) ss-ss))

 )
 (setq po '(0 0))
 (setq ss-ss (reverse ss-ss))
 (foreach x ss-ss
  (setq aa (nth 0 x))
  (setq bb (nth 1 x))
  (setq cc (nth 2 x))
  (command "move" cc "" "non" aa "non" po)
  (setq po (polar po (* pi -0.5) bb))
 )
 (command "zoom" "e")
 (close ini)
 
 (setq filename (getfiled "保存文件" dwgpath "dwg" 1))
 (if (findfile filename)
  (command "save" filename "y")
  (command "save" filename)
 )
 (setvar "filedia" 1)

(princ)
)

发表于 2010-5-27 00:04 | 显示全部楼层

输出所有块

(defun c:wab()
 (setq bk_list '())
 (setq aa (tblnext "block" T))
 (if aa (setq aa (cdr (assoc 2 aa))))
 (if aa (setq bk_list (cons aa bk_list)))
 (while (setq aa (tblnext "block"))
  (setq aa (cdr (assoc 2 aa)))
  (setq bk_list (cons aa bk_list))
 )
 (prin1 bk_list)
 (foreach x bk_list
  (if (findfile (strcat "d:\\eeeeeeeeee\\" x ".dwg"))
   (command "wblock" (strcat "d:\\eeeeeeeeee\\" x) "y" "=")
   (command "wblock" (strcat "d:\\eeeeeeeeee\\" x) "=")
  )
 )
 (princ "\n+++")
(princ)
)

 楼主| 发表于 2010-5-28 20:04 | 显示全部楼层

谢谢了,

 

和解密的关系有:

1.假如需要偷偷解密,当然要合并一下再搞。

2.有些加密的cad可以通过word的导入导出解密,当然没人想一次只搞一张。

发表于 2013-6-7 12:57 | 显示全部楼层
学习了,不过不知道doslib函数库是什么呀?
发表于 2018-1-16 16:37 | 显示全部楼层
这就是个批量插入块的程序,其实最好按照坐标值依次递增的顺序插入,这样就不会乱。上某宝搜搜就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 00:13 , Processed in 0.283415 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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