明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1990|回复: 7

[提问] 怎么把目录下的DWG批量插入一张图里面并加外框(想不明白怎么加框)

[复制链接]
发表于 2014-12-26 11:24:37 | 显示全部楼层 |阅读模式
怎么把目录下的DWG批量插入一张图里面并加外框,想不明白怎么加框,有源码最好,没有的话有思路也行,谢谢!
发表于 2014-12-26 13:31:49 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-12-26 14:11:49 | 显示全部楼层
xyp1964 发表于 2014-12-26 13:31

院长太不厚道了,收了币回复等于没回复,不愿意放源码至少把思路写明白吧!
发表于 2014-12-26 14:28:06 | 显示全部楼层
待插入文件列表;确定起点;逐个插入;求图块的左下和右上角点;加外框;右下角点作为新的插入点……
发表于 2014-12-26 14:45:32 | 显示全部楼层
本帖最后由 x_s_s_1 于 2014-12-26 14:55 编辑

很烂的代码,自己改改基本思路是一样的,未测试
  1. ;; ! ***************************************************************************
  2. ;; ! xd_GetObjectBoundingBox
  3. ;; ! ***************************************************************************
  4. ;; ! 功  能  : 返回实体包围盒的对角点.
  5. ;; ! 参  数  : 'ename' - Any Drawing Object
  6. ;; ! 返回值  : 'Lst' - is a list of LL and UR
  7. ;; ! 说  明  : 适用 AutoCAD 2000+
  8. ;; ! e-mail  : eachy@xdcad.net
  9. ;; ! Web     : www.xdcad.net
  10. ;; ! ****************************************************************************
  11. (defun xd_GetObjectBoundingBox (ename / ll ur)
  12.   (vla-GetBoundingBox (vlax-ename->vla-object ename) 'll 'ur)
  13.   (list
  14.     (reverse (cdr (reverse (vlax-safearray->list ll))))
  15.     (reverse (cdr (reverse (vlax-safearray->list ur))))
  16.   ) ;_ 结束list
  17. ) ;_ 结束defun
  18. ;; ! ***************************************************************************
  19. ;; ! lstf(lst files)
  20. ;; ! ***************************************************************************
  21. ;; ! 功  能  : 从表中提取特殊字段子表.
  22. ;; ! 参  数  : (lst lst需判断的字符串如"CHKPM*" files 表)
  23. ;; ! 返回值  : 'Lstt' - 子表
  24. ;; ! 说  明  : 适用 AutoCAD 2000+
  25. ;; ! e-mail  : x_s_s_1@163.com
  26. ;; ! ****************************************************************************
  27. (defun lstf (lst files / i n)
  28.   (setq i 0)
  29.   (setq n (length files))
  30.   (setq lstt nil)
  31.   (while (< i n)
  32.     (if  (wcmatch (nth i files) lst)
  33.       (setq lstt (cons (nth i files) lstt))
  34.       t
  35.     )          ;end if
  36.     (setq i (1+ i))
  37.   )          ;end while
  38.   (setq lstt lstt)
  39. )          ;end defun
  40. ;;;=============================================
  41. ;;;      通用函数  检查是否存在图层,如无创建之              
  42. ;;;参数:l_l------线型(字符串)              
  43. ;;;      l_c------颜色(整型)               
  44. ;;;      l_s------图层状态(整型)                     
  45. ;;;      l_n------图层名(字符串)
  46. (defun ly_mak (l_l l_c l_s l_n /)
  47.   (if (= (tblobjname "LAYER" l_n) nil)
  48.     (progn
  49.       (entmake (list
  50.      (cons 0 "LAYER")
  51.      (cons 100 "AcDbSymbolTableRecord")
  52.      (cons 100 "AcDbLayerTableRecord")
  53.      (cons 6 l_l)
  54.      (cons 62 l_c)
  55.      (cons 70 l_s)
  56.      (cons 2 l_n)
  57.          ) ;_ 结束list
  58.       ) ;_ 结束entmake
  59.     ) ;_ 结束progn
  60.   ) ;_ 结束if
  61. ) ;_ 结束defun
  62. ;;;批量插入子程序
  63. (defun jss_insert (pt file files scale)
  64.   (setq  x (car pt)
  65.   y (cadr pt)
  66.   ) ;_ 结束setq
  67.   (setq max-xpolar 0)
  68.   (foreach name  files
  69.     (progn
  70.       (command "-insert"
  71.          (strcat file "\" name)
  72.          pt
  73.          scale
  74.          scale
  75.          "0"
  76.       ) ;_ 结束command
  77.       (SETQ PTLST (xd_GetObjectBoundingBox (entlast)))
  78.       (setq obj1 (entlast))
  79.       (setq pt1  (polar (list (car (car PTLST)) (cadr (car PTLST)))
  80.            (* pi 1.25)
  81.            1000
  82.     ) ;_ 结束polar
  83.       ) ;_ 结束setq
  84.       (setq pt2  (polar (list (car (cadr PTLST)) (cadr (cadr PTLST)))
  85.            (/ pi 4)
  86.            1000
  87.     ) ;_ 结束polar
  88.       ) ;_ 结束setq
  89.       (command "RECTANGLE" pt1 pt2)
  90.       (setq obj2 (entlast))
  91.       (entmake (list
  92.      (cons 0 "TEXT")
  93.      (cons 1 name)
  94.      (cons 40 600.0)
  95.      (cons 41 0.7)
  96.      (cons 10 (polar pt1 (/ pi 4) 1500))
  97.      (cons 50 (/ pi 2))
  98.      (cons 8 "吟一手好诗")
  99.      (cons 7 "hz")
  100.          ) ;_ 结束list
  101.       ) ;_ 结束entmake
  102.       (setq obj3 (entlast))
  103.       (command "_.move" obj1 obj2 obj3 "" pt1 (list x y))
  104.       (setq xpolar (- (car pt2) (car pt1)))
  105.       (setq ypolar (- (cadr pt2) (cadr pt1)))
  106.       (setq max-xpolar (max (+ xpolar 5000) max-xpolar))
  107.       (setq y (+ ypolar y 1000))
  108.     )          ;endprogn
  109.   )          ;endforeach
  110.   max-xpolar
  111. ) ;_ 结束defun
  112. ;;;程序
  113. (vl-load-com)
  114. (defun c:xjss ()
  115.   (SETVAR "osmode" 0)
  116.   (setvar "cmdecho" 0)
  117.   (ly_mak "CONTINUOUS" 1 0 "打印")
  118.   (command "-layer" "s" "打印" "")
  119.   (setq
  120.     filename (getfiled "选择文件夹并任意选取一个文件" "D:/" "dwg" 0)
  121.   ) ;_ 结束setq
  122.   (setq file (vl-filename-directory filename)) ;获取文件夹名称
  123.   (setq files (vl-directory-files file "*.dwg" 1))
  124.           ;获取文件夹中文件名称列表
  125.   (setq inspt (getpoint "\n 请输入插入点:"))
  126.    (jss_insert inspt file files 1)
  127.   (command "zoom" "e")
  128.   (princ)
  129. ) ;_ 结束defun
 楼主| 发表于 2014-12-26 16:07:02 | 显示全部楼层
x_s_s_1 发表于 2014-12-26 14:45
很烂的代码,自己改改基本思路是一样的,未测试

哈哈,我也想到了,以前一直散的插进来想不明白怎么求包围框。你用xd_GetObjectBoundingBox
求外包不太准,我正在找比较准的外包函数,谢谢了
发表于 2023-5-7 15:38:21 | 显示全部楼层
是我需要的,支持一下
发表于 2023-5-10 08:53:32 | 显示全部楼层
有最终的解决方案吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-22 18:29 , Processed in 0.155559 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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