明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1009|回复: 5

[基础] 多图形文件合并问题

[复制链接]
发表于 2016-4-16 11:55 | 显示全部楼层 |阅读模式
1明经币
我在网上下载以下代码:
;; 原点批量插图块
(defun c:tt (/ pf path lst)
  (defun sub (path lst mode / a name)
    (foreach a lst
      (setq name (strcat path a)
            name (if (= mode 0)
                   name
                   (strcat "*" name)
                 )
      )
      (command "insert" name "0,0" "1" "1" "")
    )
  )
  (setq        dwg  (getfiled "指定原文件路径中的一个图形文件:>" "*" "dwg" 8)
        path (strcat (vl-filename-directory dwg) "\\")
        lst  (vl-directory-files path "*.dwg" 1)
        ukw  (UKWORD 1 "1 2" "1-按块插入/2-解块插入" ukw)
  )
  (prompt "\n程序正在插入图幅,请等待...")
  (cond        ((= ukw "1") (sub path lst 0))
        ((= ukw "2") (sub path lst t))
  )
  (princ)
)
(defun ukword (bit kwd msg def / inp)
  (if (and def (/= def ""))
    (setq msg (strcat "\n" msg "<" def ">: ")
          bit (* 2 (fix (/ bit 2)))
    )
    (setq msg (strcat "\n" msg ": "))
  )
  (initget bit kwd)
  (setq inp (getkword msg))
  (if inp
    inp
    def
  )
)

这个程序我刚才试过,批量好的图不在原坐标位置,曾在平移和旋转,怎么会这样?
我只是想把cad很多图纸并到一张图上,且保持原来的比例和位置。其实达到这个功能最笨的办法就是复制---黏贴到原坐标,这样就会没有一点问题。

我在cass中批量插入试过,不行,他会把图形放大倍数且坐标也不在原位置,不知是为什么?手工可以通过复制后黏贴到原坐标,这种笨办法可以,一直搞不懂是什么引起的。

 楼主| 发表于 2016-4-19 13:28 | 显示全部楼层

DING
DING
回复

使用道具 举报

发表于 2016-4-19 23:08 | 显示全部楼层
如果存在旋转,需要仔细检查(command "insert" name "0,0" "1" "1" "")里边的各个参数特别是0,0"1""1"“”这一部分
存在平移那么需要在调用sub前关闭捕捉,或者 (command "insert" name "0,0" "1" "1" "")的"0,0"前加上"non"临时关闭捕捉
回复

使用道具 举报

发表于 2022-11-27 20:29 | 显示全部楼层
谢谢楼主的程序,有些CAD文件图是分开画的,但是坐标系统是统一的,用这个程序合并多个文件非常好,。我试了一下,有些图形会放大倍数,是因为源文件设置了“插入比例”,即 “INSUNITS” 系统变量的值不为 0。打开源文件,命令行输入 units 即可查看,如果插入块时不按指定单位缩放,请选择“无单位”,或将 “INSUNITS” 系统变量的值设为 0。
回复

使用道具 举报

发表于 2022-11-27 21:51 | 显示全部楼层
(defun c:tt ()
  "原点批量插图块"
  (or kw (setq kw "1"))
  (setq        dwg  (getfiled "指定原文件路径中的一个图形文件:>" "*" "dwg" 8)
        path (strcat (vl-filename-directory dwg) "\\")
        lst  (vl-directory-files path "*.dwg" 1)
        kw   (Ukword 1 "1 2" "[按块插入(1)/解块插入(2)]" kw)
  )
  (princ "\n程序正在插入图幅,请等待...")
  (setq        mode (cond ((= kw "1") nil)
                   ((= kw "2") t)
             )
  )
  (foreach a lst
    (setq bn (strcat path a)
          bn (if mode(strcat "*" bn)bn)
    )
    (command "-insert" bn '(0 0) 1 1 0)
  )
  (princ)
)
回复

使用道具 举报

发表于 2022-11-28 01:04 | 显示全部楼层
xyp1964 发表于 2022-11-27 21:51
(defun c:tt ()
  "原点批量插图块"
  (or kw (setq kw "1"))

兄弟,你把UKWORD这个函数给去掉了,系统提示错误啊
; 错误: no function definition: UKWORD
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 11:19 , Processed in 0.237307 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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