免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 24691|回复: 83
收起左侧

[软件] 批量插入影像到CAD

    [复制链接]

0

主题

783

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
62
QQ
发表于 2018-5-18 17:39 | 显示全部楼层 |阅读模式
本帖最后由 qingchao 于 2018-6-4 16:28 编辑

可以批量或单张插入影像到CAD中,支持tif、jpg、png、ecw格式。坐标文件可以和影像不在同一目录下,可以手动选择。效果如下图所示。

注意:重复插入或删除后再插入之前的影像可能会报错,解决办法是,运行image命令,把状态显示未参照的图像选中,然后拆离就可以了!再次插入就可以正常插入了。
  1. (vl-load-com)

  2. (if (null degrad)
  3.   (defun degrad        (ang)
  4.     (* pi (/ ang 180.0))
  5.   )
  6. )

  7. (if (null raddeg)
  8.   (defun raddeg        (ang)
  9.     (* 180.0 (/ ang pi))
  10.   )
  11. )
  12. (defun c:inimg()
  13.     (initget "1 2")
  14.     (princ "\n选择插入影像方式:")
  15.     (setq key (getkword "\n1单张\\2批量\\<1>:"))
  16.        (cond ((not key) (dz))    ;
  17.        ((= key "1") (dz))  ;
  18.        ((= key "2") (pl))  ;
  19.        );cond
  20. )
  21.         (defun dz()
  22.          (findfile (setq im (getfiled "选择影像文件"
  23.                                        (getvar "dwgprefix")
  24.                                        "tif;jpg;png;ecw"
  25.                                        16
  26.                              )
  27.                     )
  28.           )
  29.         (tfw im)         
  30.         )
  31.         (defun pl()
  32.                 (setq dir (LM:getfiles "选择文件" "" "tif;jpg;png;ecw"))
  33.                 (repeat (setq n (length dir))
  34.                         (setq kk (length dir))
  35.                         (setq n (1- n))
  36.                         (setq e (nth n dir))
  37.                         (setq k (- kk n))
  38.                         (princ (strcat "\n正在插入 " (itoa k) "张影像......"))
  39.                         (tfw e)
  40.                 )
  41.                 (princ (strcat "\n完成!成功插入 " (itoa (length dir)) "张影像!"))
  42.                 (princ)
  43.         )


  44. (defun tfw ( im / img file res pt        xres yres xrot yrot left top minpt maxpt)
  45.                                         ;define the function name and variables
  46.       (if (= (type im) 'str)
  47.         (progn
  48.           (setq        img
  49.                  (vla-addraster
  50.                    (vla-get-block
  51.                      (vla-get-activelayout
  52.                        (vla-get-activedocument (vlax-get-acad-object))
  53.                      )
  54.                    )
  55.                    im
  56.                    (vlax-make-variant
  57.                      (vlax-safearray-fill
  58.                        (vlax-make-safearray vlax-vbdouble (cons 0 2))
  59.                        '(0.0 0.0 0.0)
  60.                      )
  61.                    )
  62.                    1.0
  63.                    0.0
  64.                  )
  65.           )
  66.           (if (snvalid (vl-filename-base im))
  67.             (vla-put-name img (vl-filename-base im))
  68.           )
  69.           (setq im (vlax-vla-object->ename img))
  70.         )
  71.         (setq imG (vlax-ename->vla-object (ssname im 0)))
  72.       )
  73.       (if (findfile (vl-string-subst
  74.                       ".ers"
  75.                       (vl-filename-extension (vla-get-imagefile img))
  76.                       (vla-get-imagefile img)
  77.                     )
  78.           )
  79.         (setq file (vl-string-subst
  80.                      ".ers"
  81.                      (vl-filename-extension (vla-get-imagefile img))
  82.                      (vla-get-imagefile img)
  83.                    )
  84.         )
  85.         (if (findfile (vl-string-subst
  86.                         ".tfw"
  87.                         (vl-filename-extension (vla-get-imagefile img))
  88.                         (vla-get-imagefile img)
  89.                       )
  90.             )
  91.           (setq        file (vl-string-subst
  92.                        ".tfw"
  93.                        (vl-filename-extension (vla-get-imagefile img))
  94.                        (vla-get-imagefile img)
  95.                      )
  96.           )
  97.           (if (findfile        (vl-string-subst
  98.                           ".jgw"
  99.                           (vl-filename-extension (vla-get-imagefile img))
  100.                           (vla-get-imagefile img)
  101.                         )
  102.               )
  103.             (setq file (vl-string-subst
  104.                          ".jgw"
  105.                          (vl-filename-extension (vla-get-imagefile img))
  106.                          (vla-get-imagefile img)
  107.                        )
  108.             )
  109.             (if        (findfile (vl-string-subst
  110.                             ".pgw"
  111.                             (vl-filename-extension (vla-get-imagefile img))
  112.                             (vla-get-imagefile img)
  113.                           )
  114.                 )
  115.               (setq file (vl-string-subst
  116.                            ".pgw"
  117.                            (vl-filename-extension (vla-get-imagefile img))
  118.                            (vla-get-imagefile img)
  119.                          )
  120.               )
  121.             )
  122.           )
  123.         )
  124.       )
  125.       (if (or file
  126.               (setq file (getfiled "选择坐标文件"
  127.                                    (vl-string-subst
  128.                                      ""
  129.                                      (vl-filename-extension (vla-get-imagefile img))
  130.                                      (vla-get-imagefile img)
  131.                                    )
  132.                                    "tfw;jgw;pgw;ers"
  133.                                    0
  134.                          )
  135.               )
  136.           )
  137.         (if (= (vl-filename-extension file) ".ers")
  138.           (progn
  139.             (setq file (open file "r"))
  140.             (repeat 19 (read-line file))
  141.             (setq left (atof (last (split (read-line file) " ")))
  142.                   top  (atof (last (split (read-line file) " ")))
  143.             )
  144.             (close file)
  145.             (vla-put-origin
  146.               img
  147.               (vlax-make-variant
  148.                 (vlax-safearray-fill
  149.                   (vlax-make-safearray 5 (cons 0 2))
  150.                   (list left (- top (vla-get-height img)) 0.0)
  151.                 )
  152.               )
  153.             )
  154.             (vla-put-imagewidth img (vla-get-width img))
  155.             (vla-put-imageheight img (vla-get-height img))
  156.             (vla-getboundingbox img 'minpt 'maxpt)
  157.             (vla-zoomwindow (vlax-get-acad-object) minpt maxpt)
  158.           )
  159.           (progn
  160.             (setq file (open file "r")
  161.                   xres (atof (read-line file))
  162.                   xrot (atof (read-line file))
  163.                   yrot (atof (read-line file))
  164.                   yres (atof (read-line file))
  165.                   ins  (list (atof (read-line file)) (atof (read-line file)) 0.0)
  166.                   ins  (polar ins
  167.                               (* (/ (+ xrot 90.0) 180.0) pi)
  168.                               (* (vla-get-height img) yres)
  169.                        )
  170.             )
  171.             (close file)
  172.             (vla-put-rotation img (degrad xrot))
  173.             (vla-put-origin
  174.               img
  175.               (vlax-make-variant
  176.                 (vlax-safearray-fill (vlax-make-safearray 5 (cons 0 2)) ins)
  177.               )
  178.             )
  179.             (vla-put-imageheight
  180.               img
  181.               (* (vla-get-height img) (abs yres))
  182.             )
  183.             (vla-put-imagewidth img (* (vla-get-width img) (abs xres)))
  184.             (vla-getboundingbox img 'minpt 'maxpt)
  185.             (vla-zoomwindow (vlax-get-acad-object) minpt maxpt)
  186.           )
  187.         )
  188.       )
  189.   (princ)                                ;exit quietly
  190. )

  191. ;;------------------------=={ Get Files Dialog }==----------------------;;
  192. ;;                                                                      ;;
  193. ;;  An analog of the 'getfiled' function for multiple file selection.   ;;
  194. ;;----------------------------------------------------------------------;;
  195. ;;  Author:  Lee Mac, Copyright ?2012  -  [url=http://www.lee-mac.com]www.lee-mac.com[/url]              ;;
  196. ;;----------------------------------------------------------------------;;
  197. ;;  Arguments:                                                          ;;
  198. ;;  msg - [str/nil] Dialog box label; 'Select Files' if nil or "".      ;;
  199. ;;  def - [str/nil] Default directory; dwgprefix if nil or "".          ;;
  200. ;;  ext - [str/nil] File extension filter (e.g. "dwg;lsp"); "*" if nil  ;;
  201. ;;----------------------------------------------------------------------;;
  202. ;;  Returns:  List of selected files, else nil                          ;;
  203. ;;----------------------------------------------------------------------;;
  204. ;;  Version 1.6    -    2016-03-21                                      ;;
  205. ;;----------------------------------------------------------------------;;
复制代码

现在将多选放出来,配合本附件就可以批量插入了。本来这就是别人的程序,我是希望大家自己下载的,可是还是有人问,所以提供附件。 GetFilesV1-6.rar (3.28 KB, 下载次数: 2331)

评分

参与人数 2铜板 +4 收起 理由
gwar + 2 感谢分享!
759944659 + 2 赞!

查看全部评分

6

主题

2万

铜板

11

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
1639

灌水勋章

发表于 2018-5-18 19:32 | 显示全部楼层
为什么  按照你写的程序  输入xcz  没用啊?
回复 支持 2 反对 0

使用道具 举报

0

主题

457

铜板

0

好友

技术员

Rank: 3Rank: 3

积分
58
发表于 2018-5-27 16:56 | 显示全部楼层
本帖最后由 bobest 于 2018-5-27 17:20 编辑

批量加载不行,没有反应。提示“no function definition: LM:GETFILES”
回复 支持 1 反对 0

使用道具 举报

0

主题

783

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
62
QQ
 楼主| 发表于 2018-5-19 11:49 | 显示全部楼层
wubenben0307 发表于 2018-5-18 19:32
为什么  按照你写的程序  输入xcz  没用啊?

(defun c:inimg()
命令是:inimg,可以自己改的啊
回复 支持 1 反对 0

使用道具 举报

0

主题

234

铜板

1

好友

实习生

Rank: 1

积分
5
发表于 2019-3-17 16:23 | 显示全部楼层
复制出来保存了 也加载了 然后还是出现错误: Automation 错误。 输入无效
回复 支持 1 反对 0

使用道具 举报

10

主题

4020

铜板

1

好友

VIP会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
201
发表于 2018-5-25 10:08 | 显示全部楼层
qingchao 发表于 2018-5-19 11:50
(defun c:inimg()
这个命令是:inimg,可以自己随便改的啊

兄弟。我知道了,再问下,坐标文件是什么意思的,能详细说下吗?
回复 支持 1 反对 0

使用道具 举报

0

主题

393

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
42
发表于 2018-5-18 17:55 | 显示全部楼层
兄弟,这代码怎么用啊
回复 支持 反对

使用道具 举报

27

主题

4317

铜板

36

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
939
发表于 2018-5-18 18:06 | 显示全部楼层
看看-----
回复

使用道具 举报

2

主题

6万

铜板

6

好友

VIP会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
3006
发表于 2018-5-19 07:21 | 显示全部楼层
怎么用呀?期盼多年,CASS之外没找到可替代的东西。
回复 支持 反对

使用道具 举报

4

主题

636

铜板

0

好友

助理工程师

Rank: 5Rank: 5

积分
108
发表于 2018-5-19 10:06 | 显示全部楼层
:zt:zt:zt
回复

使用道具 举报

10

主题

4020

铜板

1

好友

VIP会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
201
发表于 2018-5-19 11:26 | 显示全部楼层
wubenben0307 发表于 2018-5-18 19:32
为什么  按照你写的程序  输入xcz  没用啊?

一样啊。
回复 支持 反对

使用道具 举报

0

主题

783

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
62
QQ
 楼主| 发表于 2018-5-19 11:50 | 显示全部楼层

(defun c:inimg()
这个命令是:inimg,可以自己随便改的啊
回复 支持 反对

使用道具 举报

0

主题

783

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
62
QQ
 楼主| 发表于 2018-5-19 11:51 | 显示全部楼层
袁爱石 发表于 2018-5-18 17:55
兄弟,这代码怎么用啊

兄弟,复制下来,保存在文本文件中,重命名为*.lsp,在CAD中用appload加载,然后运行inimg命令就可以了啊
回复 支持 反对

使用道具 举报

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

本版积分规则

在线客服
快速回复 返回顶部 返回列表