8350 发表于 2016-4-16 11:55:24

多图形文件合并问题

我在网上下载以下代码:
;; 原点批量插图块
(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中批量插入试过,不行,他会把图形放大倍数且坐标也不在原位置,不知是为什么?手工可以通过复制后黏贴到原坐标,这种笨办法可以,一直搞不懂是什么引起的。

8350 发表于 2016-4-19 13:28:52


DING
DING

llsheng_73 发表于 2016-4-19 23:08:49

如果存在旋转,需要仔细检查(command "insert" name "0,0" "1" "1" "")里边的各个参数特别是0,0"1""1"“”这一部分
存在平移那么需要在调用sub前关闭捕捉,或者 (command "insert" name "0,0" "1" "1" "")的"0,0"前加上"non"临时关闭捕捉

xq4u 发表于 2022-11-27 20:29:27

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

xyp1964 发表于 2022-11-27 21:51: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)
)

xq4u 发表于 2022-11-28 01:04:24

xyp1964 发表于 2022-11-27 21:51
(defun c:tt ()
"原点批量插图块"
(or kw (setq kw "1"))


兄弟,你把UKWORD这个函数给去掉了,系统提示错误啊
; 错误: no function definition: UKWORD
页: [1]
查看完整版本: 多图形文件合并问题