明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13529|回复: 42

■合并指定目录内的所有文件■ 源码

  [复制链接]
发表于 2012-10-26 16:39 | 显示全部楼层 |阅读模式
  1. (defun c:mlpt (/ distx disty ent file files maxpoint minpoint path pmax
  2.           pmin pt1 pt2 sca
  3.        )

  4. (command ".UNDO" "BE")
  5.   (setq sca (getvar "dimscale"))
  6.   (setq cmd (getvar "cmdecho"))
  7.   (setq oldos (getvar "OSMODE"))
  8.   (setvar "cmdecho" 0)
  9.   (setvar "OSMODE" 0)
  10.    (getstring "\n本程序将合并指定目录内的所有文件,执行速度较慢,请耐心等待。回车继续...")
  11.   (setq pt2 (getpoint "\n请选择插入点:"))
  12.   (setq path (browseforfolder "请选择要合并图纸的目录"))
  13.   (if (/= path nil)
  14.     (progn
  15.       (if (/= (substr path (strlen path) 1) "\")
  16.   (setq path (strcat path "\"))
  17.       )
  18.       (setq files (vl-directory-files path "*.dwg" 0))
  19.       (while files
  20.   (setq file (strcat path (car files)));;;  (princ file)
  21. ;;;  (princ "\n")
  22.   (command "-INSERT" file pt2 1 1 0)
  23.   (setq ent (entlast));;;  (princ ent)
  24.   (vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
  25.   (setq pmax (vlax-safearray->list maxpoint)
  26.         pmin (vlax-safearray->list minpoint)
  27.   )
  28.   (setq distx (- (car pmax) (car pmin)))
  29.   (setq disty (- (cadr pmax) (cadr pmin)))
  30.   (setq pt1 (list (car pmax) (cadr pmin)))
  31.   (command "move" ent "" pt1 pt2)
  32.   (command "EXPLODE" ent "")
  33.   (setq pt2 (polar pt2 (/ pi 2) (+ disty (* 40 sca))))
  34.   (setq files (cdr files))
  35.       )
  36.     )
  37.   )
  38.   (setvar "OSMODE" oldos)
  39.   (setvar "CMDECHO" cmd)
  40.   (command ".UNDO" "E")
  41.   (princ)
  42. )

  43. ;;; [功能] 以目录树方式浏览文件夹并返回路径
  44. ;;; [参数] msg---提示信息
  45. ;;; [返回] 文件夹路径,如果选择了cancel, 返回nil
  46. ;;; [测试] (browseforfolder "选择文件保存路径: ")
  47. (defun browseforfolder (msg / shfolder path catchit)
  48.   (setq shfolder (vlax-invoke-method (vlax-create-object "Shell.Application")
  49.          'browseforfolder
  50.          (vlax-get-property
  51.        (vlax-get-acad-object)
  52.        'hwnd
  53.          ) msg 1
  54.    )
  55. catchit (vl-catch-all-apply '(lambda ()
  56.            (setq shfolder
  57.           (vlax-get-property shfolder
  58.         'self
  59.           )
  60.           path
  61.           (vlax-get-property shfolder
  62.         'path
  63.           )
  64.            )
  65.          )
  66.   )
  67.   )
  68.   (if (vl-catch-all-error-p catchit)
  69.     nil
  70.     path
  71.   )
  72. )
部分源码来自网络 在此谢过!

点评

(setvar "insunits" 0 )  发表于 2020-3-28 16:39
请再加一个系统变量 插入比例的  发表于 2020-3-28 16:39
发表于 2013-9-12 22:59 | 显示全部楼层
今天晚上逛了一个晚上的明经通道,收获很大,找到两个很好的lsp文件。尤其是这个程序,解决了困扰我很久的难题。经常要合并一些cad文件,二十几个甚至百多个,一个个的粘贴复制,是严重的体力活!!
刚才试用了下 效果很棒!
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-2 14:29 | 显示全部楼层
zhuquanmao 发表于 2020-5-30 22:56
有时候需要合并 有时候需要分割

受教了  很实用   
 楼主| 发表于 2020-5-30 22:56 | 显示全部楼层
liuxiooang 发表于 2020-5-30 00:06
合并    有什么用处吗

有时候需要合并 有时候需要分割
发表于 2012-10-26 21:38 | 显示全部楼层
太感谢了,谢谢,我想问下一下问题,,大家好,
(DEFUN C:FL()
       (command ".-layer" "off" "bh" "")              
       (command ".-layer" "off" "acx" "")
       (command ".-layer" "off" "a01" "")
       (command ".-layer" "off" "a02" "")
       (command ".-layer" "off" "a03" "")
       (command ".-layer" "off" "a04" "")
       (command ".-layer" "off" "a05" "")
       (command ".-layer" "off" "a06" "")
       (command ".-layer" "off" "a07" "")
       (command ".-layer" "off" "a08" "")
       (command ".-layer" "off" "a09" "")
       (command ".-layer" "off" "a10" "")
       (command ".-layer" "off" "a11" "")
       (command ".-layer" "off" "a12" "")
       (command ".-layer" "off" "a13" "")
       (command ".-layer" "off" "a14" "")
       (princ "\n ◆ a01--a14 已关闭")
(princ))
请问这个有简单的方法写吗?在加入当关闭图层“A01”~“A14”,“ACX”,“BH”时有当前层时 命令执行关闭当前层
请楼主帮忙写下,在这里先谢谢了
发表于 2012-11-27 15:41 | 显示全部楼层
先顶一下啦!回头有空再分析一下程序
发表于 2012-11-27 21:21 | 显示全部楼层
这有一个很快的,不过有时会重叠

;批量插图(qfkxc)
(defun c:pc()
(setvar "CMDECHO" 0)
(setq pf (getfiled "指定原文件路径中的一个图形文件:>" "*" "dwg" 8))
(setq path (vl-filename-directory pf))
(setq path (strcat path "\\"))
(setq aa (vl-directory-files path "*.dwg" 1))
(setq n (length aa))
(setq i 0 nn 0)
(setq pp (nth i aa))
(sub1)
(princ))
(defun sub1 ()
(prompt "\n")
(prompt "程序正在解块插入图幅,请等待...\n")
(while (/= pp nil)
(setq i (+ i 1))
(setq pp (strcat path pp))
(setq pp (strcat "*" pp))
(command "insert" pp "0,0" "1" "")
(setq nn (+ nn 1))
(princ (strcat "第" (itoa nn) "幅" "图号为" pp " \r"))
(setq pp (nth i aa))
(setq pp (nth i aa)))
(command "zoom" "e" "zoom" "0.95x"))
发表于 2012-11-29 21:05 | 显示全部楼层
有合并,那有没有拆分的呢?希望有啊。。
 楼主| 发表于 2012-12-2 20:12 | 显示全部楼层
freeok 发表于 2012-11-29 21:05
有合并,那有没有拆分的呢?希望有啊。。

有拆分的 不过和定义的图框有关系
发表于 2012-12-9 20:23 | 显示全部楼层
先顶一下啦!
发表于 2012-12-20 16:08 | 显示全部楼层
楼主太有才了
发表于 2012-12-23 11:39 | 显示全部楼层
有创意
发表于 2013-1-19 13:46 | 显示全部楼层
dwg里有相同名字而图元不一样的块就完蛋了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 09:31 , Processed in 0.188176 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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