明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 29026|回复: 89

发个批量插图/图纸后台处理程序[2013.2.5]

    [复制链接]
发表于 2012-12-19 17:55:58 | 显示全部楼层 |阅读模式
本帖最后由 xiaxiang 于 2013-2-5 16:19 编辑

批量插入同样大小的图纸
程序思路来自明经通道网友xiaoyingzi 的帖子
http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=89231&pid=481612&fromuid=358682
原帖现在已被我改得面目全非了,呵呵哈哈哈
帖子发出来很久没人关注,可能是介绍太少,又可能是我许久不共享程序的结果
看到没人需要我就不想再更新了,直到今天老黄把我的帖子又顶了出来
还是来做个介绍吧,程序的主体是Lee Mac的DBX容器,真的很棒!
最新版的程序,主要功能如下
一。使用DBX方法处理选中的图纸
1.将图纸中离散的属性文字转换为文字,以便插图时不再出错;
2.将图纸中模型空间的所有图形对象集合从选集的左下角点移动至坐标原点(0 0 0);
3.对图纸模型空间模仿ZOOM命令(其实是改变view对象的属性);
4.处理图纸字体缺失的问题;
5.清理图形中空字串文字和零长度直线和多义线;
6.其余的功能有待添加。。。
二。插图或者图纸后台处理
1.如在当前图形中选点,则将上一步处理过的图纸拷贝至当前图纸模型空间;相当于插图的功能,不过不再使用insert命令;后台处理过的图纸皆不存盘;
2.如取消选点,则将上一步处理过的图纸存盘并退出程序。
。。。
编程的酸甜苦辣只有身在其中时才能体会。
献给所有对lisp语言如痴如醉的朋友们,祝你们蛇年心想事成!
版权归各位作者,请勿用于商业用途
其余不解释
  1. ;;**********************************************************************************************
  2. ;;程序主体来自明经通道网友xiaoyingzi 的帖子
  3. ;;http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=89231&pid=481612&fromuid=358682
  4. ;;**********************************************************************************************
  5. ;;拼图1.0程序,初版,完成于2012.1.6
  6. ;;**********************************************************************************************
  7. ;;拼图1.1程序,修正了一些bug,完成于2012.12.19
  8. ;;本程序会对需要插入的图纸进行后台操作并存盘,请注意做好备份!!!
  9. ;;程序与2004与2008下调试通过,其它版本未做测试
  10. ;;bug1.图纸插入点问题,因为要插入的图纸的左下角不在原点(0 0 0)而是一个负值,造成插图的时候方向为
  11. ;;     从右向左,与前面的图重叠;
  12. ;;bug2.属性文字问题,图纸里有属性文字,插入的时候需要手动填写值的,在自动插入时直接忽略了本张图;
  13. ;;  使用了DBX方法解决了这两个问题,引用了Lee Mac的程序。注意DBX方法有使用的讲究,不能用ss选择集类,
  14. ;;  command类,ent实体类,系统变量类的命令,也不能使用必须依赖活动文档activedocument相关的命令,
  15. ;;  如vla-get-selectionsets,vla-ZoomExtents等;
  16. ;;  DBX方法不是很稳定,在后台处理图纸时经常出现问题,不好排查,原则上在图纸打开时不即可以处理;
  17. ;;  用DBX方法处理过的图纸用别的版本cad打开似乎会报错,必须用处理时那个版本的cad打开再保存一次才能
  18. ;;  正常;
  19. ;;bug3.图名排序的问题,使用了VVA的高仿win_sort程序,跟windows的按名称排序基本一致,可以忽略大小写
  20. ;;     的干扰,同时加入了对"_"全部改为"-"的处理,这是因为图名不规范的原因;
  21. ;;bug4.待插入图纸的左下角判断问题,因为图纸中很多实体的插入点会影响vla-GetBoundingBox的判断,所以
  22. ;;     本例中只判断图纸中的直线和多义线两种实体的左下角点;
  23. ;;bug5.新建的图纸Drawing1.dwg执行本程序会出错,提示参数太少,再执行一次则正常,似乎跟_insert命令
  24. ;;     有关系;
  25. ;;  其它未发现的bug有待进一步完善。
  26. ;;**********************************************************************************************
  27. ;;拼图1.11程序,完成于2012.12.20
  28. ;;加入了备份提示和参数修改功能,完善了注释
  29. ;;**********************************************************************************************
  30. ;;拼图1.12程序,完成于2013.1.6
  31. ;;用vla-InsertBlock 替换command "insert",但是以上bug5依然存在,提示参数太少
  32. ;;需要插入的图纸若打开时出现报错提示框(如字体替换框),则插入后用了缺失字体的文字不会被插入本图
  33. ;;不知如何解决
  34. ;;**********************************************************************************************
  35. ;;拼图1.2程序,完成于2013.1.9
  36. ;;增加后台替换字体功能
  37. ;;**********************************************************************************************
  38. ;;拼图1.3程序,完成于2013.1.10
  39. ;;重要更新
  40. ;;改变原有插入方式,commmand方式和vl方式;改为DBX方式
  41. ;;改变操作模式,1为DBX方式插入图纸但不改变原图纸,2为DBX方式后台处理图纸并保存
  42. ;;**********************************************************************************************
  43. ;;拼图1.4程序,完成于2013.1.16
  44. ;;重要更新
  45. ;;修正以上bug4,使用了ElpanovEvgeniy的lst-getboundingbox函数,改变了图纸的左下角点判断算法
  46. ;;增加ZOOM功能,其实是用计算左下角点和右上角点的方式来计算View(视图)的中心,高度,宽度;
  47. ;;实际与ZoomExtents还是有区别的!
  48. ;;DBX方法不能处理任何与"Active"有关的东西,activedocument或activeviewport,等等
  49. ;;**********************************************************************************************
  50. ;;拼图1.45程序,完成于2013.1.18
  51. ;;重要更新
  52. ;;继续修正以上bug4,增加了purge功能,处理0长度的文字和直线
  53. ;;**********************************************************************************************
  54.    ;;全局变量赋值
  55.   (setq *x_paper_dist* 20);;全局变量,图纸x坐标偏移量,列间隔
  56.   (setq *y_paper_dist* 20);;全局变量,图纸y坐标偏移量,行间隔
  57.   (setq *x_num* 10)              ;;全局变量,每行图纸数量
  58.   ;;插图到一起,来源吴所不及的插计算书源程序,自己做了修改,可多选文件,自动排列插入
  59. (defun c:batchins (/ oldosmode filelist file_list)
  60.   (setq oldosmode (getvar "osmode"))
  61.   (setvar "cmdecho" 0)
  62.   (setvar "osmode" 0)

  63.   (setq *acdoc*(vla-get-activedocument(vlax-get-acad-object)))
  64.   (setq filelist (ayGetMultFiles "选择多个DWG文件" "图形文件(*.dwg)|*.dwg|所有(*.*)|*.*" "") )
  65.   (setq *filedir* (car filelist))
  66.   (setq file_list (cdr filelist))
  67.    (if file_list
  68.    (my_insert file_list 1)
  69.   )
  70.   (princ "\n清理插入图纸临时生成的块:\n")
  71.   (command "purge" "b" "*" "n")
  72.   ;(vla-purgeall (vla-get-activedocument(vlax-get-acad-object)))
  73.   (command "zoom" "e" "zoom" "0.8x")
  74.   (setvar "osmode" oldosmode)
  75.   (princ)
  76. )

  77. ;;-------------------------------------------------------------------------------------------------------------
  78. ;; 明经通道 参照xiaomu写于2005-10-12,按wangph意见,ayunger修改于2008-11-07  
  79. ;; Windows多文件选择(适用于CADR15以上) 函数                        
  80. ;; 说明: 本函数使用MsComDlg.Commondialog对象(Comdlg.OCX)                     
  81. ;; 调用: (ayGetMultFiles "多选文件" "图形文件(*.dwg)|*.dwg|所有(*.*)|*.*" "")
  82. ;; 返回: ("C:\\DWG" "1.dwg" "2.dwg" "3.Dwg")                                
  83. (if (/= (vl-registry-read "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905")
  84.       "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
  85.    (vl-registry-write "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905" ""
  86.        "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
  87. )
  88. (defun ayGetMultFiles (strTitle strFilter strInitDir / Maxfiles Flags WinDlg mFiles Catchit)
  89.   (vl-load-com)
  90.   (setq WinDlg (vlax-create-object "MSComDlg.CommonDialog"))
  91. (if (not WinDlg)
  92.   (progn;then
  93.    (princ "\n【错误】系统中未安装通用控件Comdlg.OCX, 请安装后再运行!")
  94.    (setq mFiles nil)
  95.   );end_progn then
  96.   
  97.   (progn;else
  98.    (setq Maxfiles 32767)
  99.    (setq Flags (+ 4 512 524288 1048576 1024))
  100.    (vlax-put-property WinDlg 'CancelError :vlax-true)
  101.     (vlax-put-property WinDlg 'MaxFileSize Maxfiles)
  102.     (vlax-put-property WinDlg 'Flags Flags)
  103.     (vlax-put-property WinDlg 'DialogTitle strTitle)
  104.     (vlax-put-property WinDlg 'Filter strFilter)
  105.     (vlax-put-property WinDlg 'InitDir strInitDir)
  106.    (setq Catchit nil)
  107.    (setq Catchit (vl-catch-all-apply '(lambda ()
  108.                      (vlax-invoke-method WinDlg 'ShowOpen)
  109.                      (setq mFiles (vlax-get WinDlg 'Filename)))))
  110.     (vlax-release-object WinDlg)
  111.    (if (not (vl-catch-all-error-p Catchit));处理"取消"错误.
  112.     (ayFSTR->LST mFiles)
  113.     nil;else
  114.    );end_if
  115.   );end_progn
  116. );end_if
  117. );end_defun
  118. ;; 明经通道 参照xiaomu 按wangph意见 ayunger修改
  119. ;; 处理Windows多文件选择返回值 函数      
  120. ;; 说明: 将"C:\\DWG1\0001.dwg\0002.dwg" 处理成:   
  121. ;; ("C:\\DWG1" "1.dwg" "2.dwg" "3.dwg") 表形式.   
  122. (Defun ayFSTR->LST (xMFileStr / mFileList k)
  123. (if (= xMFileStr "")
  124.    (setq mFileList nil);then
  125.   (progn
  126.    (if (vl-string-position (ascii "\000") xMFileStr)
  127.      (progn
  128.        (while (vl-string-position (ascii "\000") xMFileStr)
  129.       (setq k (vl-string-position (ascii "\000") xMFileStr))
  130.       (setq mFileList (append mFileList (list (substr xMFileStr 1 k))))
  131.       (setq xMFileStr (substr xMFileStr (+ k 2) (- (strlen xMFileStr) k 1)))
  132.        );end_while
  133.        (setq mFileList (append mFileList (list (vl-string-left-trim "\" xMFileStr))))
  134.      );end_progn then
  135.      (progn
  136.        (setq mFileList (vl-filename-directory xMFileStr))
  137.        (setq mFileList (list mFileList (vl-string-left-trim "\" (vl-string-subst "" mFileList xMFileStr))))
  138.      );end_progn else
  139.    );end_if
  140.    mFileList
  141.   );end_progn
  142. );end_if
  143. );end_defun
  144. ;;字符串转换为数字,不完善,本例没有使用
  145. (defun str-to-num (str1)
  146.   (setq n 0)
  147.   (setq s1 "")
  148.   (while
  149.     (if (and (/= "" (setq cha (substr str1 (setq n (1+ n)) 1))))
  150.       (if (wcmatch cha "#")
  151. (setq s1 (strcat s1 cha))
  152. (if (/= s1 "")
  153.    nil
  154.    t
  155. )
  156.       )
  157.       nil
  158.     )
  159.   )
  160.   (setq num1 (atoi s1))
  161. )
  162. ;;字符串中只保留数字,本例没有使用
  163. (defun str-remove(str / b c d e)
  164. (setq b (vl-string->list str))
  165. (setq c (vl-remove-if '(lambda (x) (>= x 57)) b))
  166. (setq d (vl-remove-if '(lambda (x) (<= x 46)) c))
  167. ;以上两句是求出(0123456789)
  168. (setq e (vl-list->string d))
  169. )
  170. ;;;=================================================================*
  171. ;;;      通用函数 之 选择集转换系列                                 *
  172. ;;;=================================================================*
  173. ;;;功能:选择集转换为图元名的vla-object表                           *
  174. ;;;参数:ss -----选择集                                             *
  175. ;;;返回:vla-object表                                               *
  176. ;;;本例没有使用
  177. (defun ss2list (ss / i l objs)
  178.   (setq i -1 l (sslength ss) objs nil)
  179.   (repeat l
  180.     (setq objs (cons (vlax-ename->vla-object (ssname ss (setq i (1+ i)))) objs))
  181.   )
  182. )
  183. ;;;=================================================================*
  184. ;;;      03                                                         *
  185. ;;;功能:图元名表转换为选择集                                       *
  186. ;;;参数:lst_en -----图元名列表                                     *
  187. ;;;返回:选择集                                                     *
  188. (defun enlist->ss (lst_en / ss en)
  189.     (setq ss (ssadd))
  190.     (foreach en  lst_en
  191.   (if (= (type en) 'ename)
  192.       (ssadd en ss)    ;  (setq ss (ssadd en ss))
  193.   )
  194.     )
  195.     ;;返回
  196.     (if  (= (sslength ss) 0)
  197.   nil
  198.   ss
  199.     )
  200. )
  201. ;; [功能] 获取在图元 en 之后产生的图元列表
  202. ;; [参数] en----图元名
  203. ;; [返回] 图元列表
  204. ;; [测试]1.(setq en (entlast))
  205. ;;         执行创建图元的命令,如 LINE,BOUNDARY
  206. ;;         (MJ:EntNextAll en)
  207. ;;       2.(MJ:EntNextAll (car(entsel)))
  208. (defun MJ:EntNextAll (EN / LST)
  209.   (if EN
  210.     (while (setq EN (entnext EN))
  211.       (if (not (member (cdr (assoc 0 (entget EN)))
  212.                        '("*TEXT*""ATTRIB" "VERTEX" "SEQEND")
  213.                )
  214.           )
  215.         (setq LST (cons EN LST))
  216.       )
  217.     )
  218.   )
  219.   (reverse LST)
  220. )
  221. ;;图纸插入计算子程序
  222. (defun my_insert (file_list  scale / pt mode file_list1 num x y filename   
  223.                 ll ur pt1 pt2 distx disty en sslist plist)
  224.   (setq num 0)
  225.   (setq mode
  226.     (if(setq pt (getpoint "\n请选择插入点,请注意插入点为图纸的左下角<右键只处理图纸,不插入>:"))
  227.      nil
  228.      t
  229.      )
  230.   )
  231.   (if pt
  232.     (setq x (car pt)
  233.         y (cadr pt)
  234.     )
  235.   )
  236.     ;;Windows type Sort function ,by VVA
  237.     (setq file_list(SortStringWithNumberAsNumber  file_list t));;文件名排序
  238.     (setq file_list1 '())
  239.     (foreach filename file_list                            ;;文件全路径处理
  240.     (setq file_list1 (cons (strcat *filedir* "\" filename) file_list1))
  241.      )
  242.      (setq file_list1 (reverse file_list1))

  243.     (foreach filename file_list1
  244.     (setq en (entlast))
  245.     (progn
  246.        ;*******************************************************
  247.        ;调用DBX方法进行图纸后台预处理,可视情况添加删除或者禁用
  248.        (LM:ODBX 'My_Dbx_Handle (list filename) mode)
  249.        ;*******************************************************
  250.       (if pt
  251.        (progn
  252.       (setq sslist(MJ:EntNextAll en))                    ;;获得图纸插入后的新选择集并转换为表
  253.       (foreach  en sslist                                ;;图纸的插入点为(0,0,0),故将新选择集移动至新插入点
  254.         (vla-move (vlax-ename->vla-object en) (vlax-3d-point '(0 0 0)) (vlax-3d-point (list x y 0)))
  255.       )

  256.       (setq plist(lst-getboundingbox (mapcar(function vlax-ename->vla-object)sslist)))
  257.       ;(setq plist(lst-getboundingbox(mapcar(function vlax-ename->vla-object)(vl-remove-if(function listp)(mapcar(function cadr)(ssnamex ss1))))))
  258.       ;(mapcar(function vlax-ename->vla-object)(vl-remove-if(function listp)(mapcar(function cadr)(ssnamex ss1))))
  259.       (setq pt1  (list x y 0)
  260.             pt2 (cadr plist));;计算右上角点
  261.       
  262.       (setq distx (- (car pt2) (car pt1)))
  263.       (setq disty (- (cadr pt2) (cadr pt1)))

  264.       (setq x (+ distx x *x_paper_dist*)) ;_增加图的x坐标.

  265.       (setq num (1+ num))
  266.       (if (> num (1- *x_num*))
  267.        (progn
  268.         (setq y (- y(+ disty  *y_paper_dist*))) ;_增加图的y坐标.
  269.         (setq x (car pt))
  270.         (setq num 0)
  271.        )
  272.       )
  273.       (princ (strcat "\n已插入" *filedir* "\" filename))
  274.     )
  275.      )
  276.     )
  277.   )
  278. )
  279. ;;Published http://www.theswamp.org/index.php?topic=16564.0
  280. ;;By VVA --  05.20.07 mods by CAB
  281. ;;Usage (SortStringWithNumberAsNumber '("A9" "A1" "A10" "B11" "B2" "B05") nil)
  282. ;;With ignore case (SortStringWithNumberAsNumber '("A9" "A1" "A10" "B11" "B2" "B05") t)
  283. ;;  CAB added Ignore Case Flag as an argument
  284. ;;Return ("A1" "A9" "A10" "B2" "B05" "B11")
  285. (defun SortStringWithNumberAsNumber (ListOfString IgnoreCase / NorStrs count)
  286. ;;;Function Normalize (add 0 befor number) number in string
  287. ;;; Count normalize symbols set in variable count
  288. ;;; CAB added count as an argument
  289.   (defun NormalizeNumberInString (str count / ch i pat ret buf)
  290.     (setq i   0
  291.           pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
  292.           ret ""
  293.     ) ;_ end of setq
  294.     (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
  295.       (if (vl-position ch pat)
  296.         (progn
  297.           (setq buf ch) ;_ end of setq
  298.           (while
  299.             (vl-position (setq ch (substr str (setq i (1+ i)) 1)) pat)
  300.              (setq buf (strcat buf ch))
  301.           ) ;_ end of while
  302.           (while (< (strlen buf) count) (setq buf (strcat "0" buf)))
  303.           (setq ret (strcat ret buf))
  304.         ) ;_ end of progn
  305.       ) ;_ end of if
  306.       (setq ret (strcat ret ch))
  307.     ) ;_ end of while
  308.     ret
  309.   ) ;_ end of defun
  310.   ;;-------------------------------------------------
  311.   ;;  function to Count the longest number in string
  312.   ;;  CAB added to get the correct COUNT
  313.   (defun getcount (lst / count pat)
  314.     (setq count 0)
  315.     (setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
  316.     (mapcar
  317.       '(lambda (str / i maxlen ch)
  318.          (setq i 0 maxlen 0)
  319.          (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
  320.            (if (vl-position ch pat) ; number
  321.              (setq maxlen (1+ maxlen))
  322.              (setq count  (max count maxlen) maxlen 0)
  323.            )
  324.          )
  325.   (setq count  (max count maxlen)) ;_<<< ADD 21.06.2007 by VVA
  326.        )
  327.       Lst
  328.     )
  329.     count
  330.   )
  331.   ;;===============================================
  332.   (setq count   (GetCount ListOfString)
  333.         NorStrs (mapcar '(lambda (x) (setq x(ST_RepChar "_" "-" x))   ;;ADD 19.12.2012 by xiaxiang
  334.                             (NormalizeNumberInString x count))
  335.                         ListOfString)
  336.   )
  337.   (and IgnoreCase (setq NorStrs (mapcar 'strcase NorStrs)))
  338.   (mapcar '(lambda (x) (nth x ListOfString)) (vl-sort-i NorStrs '<))
  339. ) ;_ end of defun

  340. ;; | ----------------------------------------------------------------------------
  341. ;; | ST_RepChar
  342. ;; | ----------------------------------------------------------------------------
  343. ;; | Function : Replace one character in a string with another
  344. ;; | Argument : 'oldchar'  - Old Character (source)
  345. ;; |            'newchar'  - New Character (replace with)
  346. ;; |            'Str'      - String to process
  347. ;; | Return   : The string with the specified characters replaced
  348. ;; | Updated  : February 5, 1999
  349. ;; | e-mail   : rakesh.rao@4d-technologies.com
  350. ;; | Web      : www.4d-technologies.com
  351. ;; | ----------------------------------------------------------------------------
  352. (defun ST_RepChar(oldchar newchar Str / len cnt nstr cchar)
  353. (setq
  354.   len (strlen str)
  355.   nstr ""
  356.   cnt 1
  357. )
  358. (repeat len
  359.   (setq
  360.     cchar (substr str cnt 1)
  361.     cnt (1+ cnt)
  362.   )
  363.   (if (/= cchar oldchar)
  364.     (setq nstr (strcat nstr cchar))
  365.     (setq nstr (strcat nstr newchar))
  366.   )
  367. )
  368. nstr
  369. )

  370. ;;; Not used
  371. ;;; Insert block into drawing
  372. ;;; #Name - name of block
  373. ;;; #InsPt - insert point
  374. ;;; #XScale - block X scale
  375. ;;; #YScale - block Y scale
  376. ;;; #Rot - block rotation
  377. ;;; Alan J. Thompson, 04.21.09
  378. (defun AT:InsertBlock (#Name #InsPt #XScale #YScale #Rot)
  379.   (if (or (tblsearch "block" #Name)
  380.           (findfile #Name)
  381.       ) ;_ or
  382.     (vla-insertblock
  383.       ((if (eq (getvar "cvport") 1)
  384.          vla-get-paperspace
  385.          vla-get-modelspace
  386.        ) ;_ if
  387.         (vla-get-ActiveDocument
  388.           (vlax-get-acad-object)
  389.         ) ;_ vla-get-ActiveDocument
  390.       )
  391.       (vlax-3d-point #InsPt)
  392.       #Name
  393.       #XScale
  394.       #YScale
  395.       #XScale
  396.       #Rot
  397.     ) ;_ vla-insert-block
  398.   ) ;_ if
  399. ) ;_ defun

  400. ;lst-getboundingbox By ElpanovEvgeniy
  401. ;lst  -  list of vla-object
  402. (defun lst-getboundingbox (lst)
  403.   (vl-load-com)
  404.   (if (and lst (listp lst))
  405.     ((lambda (x)
  406.        (list
  407.          (apply
  408.            (function mapcar)
  409.            (cons
  410.              (function min)
  411.              (mapcar (function car) x)
  412.            ) ;_  cons
  413.          ) ;_  apply
  414.          (apply
  415.            (function mapcar)
  416.            (cons
  417.              (function max)
  418.              (mapcar (function cadr) x)
  419.            ) ;_  cons
  420.          ) ;_  apply
  421.        ) ;_  list
  422.      ) ;_  lambda
  423.       (vl-remove-if
  424.         (function null)
  425.         (mapcar
  426.           (function
  427.             (lambda (x / minp maxp)
  428.               (if (not
  429.                     (vl-catch-all-error-p
  430.                       (vl-catch-all-apply
  431.                         (function vla-getboundingbox)
  432.                         (list x 'minp 'maxp)
  433.                       ) ;_  vl-catch-all-apply
  434.                     ) ;_  vl-catch-all-error-p
  435.                   ) ;_  not
  436.                 (list
  437.                   (vlax-safearray->list minp)
  438.                   (vlax-safearray->list maxp)
  439.                 ) ;_  list
  440.               ) ;_  if
  441.             ) ;_  lambda
  442.           ) ;_  function
  443.           lst
  444.         ) ;_  mapcar
  445.       ) ;_  vl-remove-if
  446.     )
  447.   ) ;_  if
  448. ) ;_  defun

  449. ;Not used
  450. ;Get All of the vla-object in one Layout
  451. ;Argument
  452. ;Doc    -  Name of Document
  453. ;Layout -  Name of Layout
  454. ;Return -  List of vla-object
  455. (defun GetObjLayout (Doc Layout / newlay lst)
  456.    (vl-catch-all-error-p
  457.     (setq newlay
  458.       (vl-catch-all-apply
  459.         (function vla-item)
  460.           (list (vla-get-Layouts Doc) Layout)
  461.       )
  462.     )
  463.   )
  464.   (vlax-for o (vla-get-Block newlay)
  465.      (setq lst (cons o lst))
  466.   )
  467.   lst
  468. )

  469. ;;------------------=={ ObjectDBX Wrapper }==-----------------;;
  470. ;;                                                            ;;
  471. ;;  Evaluates a supplied function on all drawings in a        ;;
  472. ;;  given list or selected directory.                         ;;
  473. ;;                                                            ;;
  474. ;;------------------------------------------------------------;;
  475. ;;                                                            ;;
  476. ;;  Author: Lee Mac, Copyright ?2012 - www.lee-mac.com       ;;
  477. ;;                                                            ;;
  478. ;;------------------------------------------------------------;;
  479. ;;                                                            ;;
  480. ;;  Arguments:                                                ;;
  481. ;;                                                            ;;
  482. ;;  _function  [SYM]                                          ;;
  483. ;;  ---------------------------------                         ;;
  484. ;;  A function requiring a single argument (the Document      ;;
  485. ;;  object), and following the 'rules' of ObjectDBX:          ;;
  486. ;;                                                            ;;
  487. ;;  - No SelectionSets    (ssget, ssname, ssdel   etc)        ;;
  488. ;;  - No Command Calls    (command "_.line" ..    etc)        ;;
  489. ;;  - No ent* methods     (entget, entmod, entupd etc)        ;;
  490. ;;  - No System Variables (setvar, getvar, setvariable etc)   ;;
  491. ;;                                                            ;;
  492. ;;  _drawinglist  [LIST] [Optional]                           ;;
  493. ;;  ---------------------------------                         ;;
  494. ;;  List of DWG Filenames                                     ;;
  495. ;;  If nil, BrowseForFolder Dialog is displayed               ;;
  496. ;;                                                            ;;
  497. ;;  _save  [SYM]                                              ;;
  498. ;;  ---------------------------------                         ;;
  499. ;;  Boolean flag determining whether drawings should be saved ;;
  500. ;;  after function evaluation (T=saved, nil=not saved)        ;;
  501. ;;                                                            ;;
  502. ;;------------------------------------------------------------;;
  503. ;;                                                            ;;
  504. ;;  Returns:                                                  ;;
  505. ;;                                                            ;;
  506. ;;  List of:                                                  ;;
  507. ;;                                                            ;;
  508. ;;  (                                                         ;;
  509. ;;      (<Drawing Filename> . <Function Result>)              ;;
  510. ;;      (<Drawing Filename> . <Function Result>)              ;;
  511. ;;      ...                                                   ;;
  512. ;;      (<Drawing Filename> . <Function Result>)              ;;
  513. ;;  )                                                         ;;
  514. ;;                                                            ;;
  515. ;;  Where:                                                    ;;
  516. ;;                                                            ;;
  517. ;;  <Drawing Filename>                                        ;;
  518. ;;  is the filename of drawing that has been processed        ;;
  519. ;;                                                            ;;
  520. ;;  <Function Result>                                         ;;
  521. ;;  is the result of evaluating the supplied function on the  ;;
  522. ;;  Document Object representing the associated drawing       ;;
  523. ;;  filename.                                                 ;;
  524. ;;                                                            ;;
  525. ;;  If an error occurs when evaluating the supplied function  ;;
  526. ;;  the Function Result will be nil and the error message     ;;
  527. ;;  will be printed to the command-line.                      ;;
  528. ;;                                                            ;;
  529. ;;------------------------------------------------------------;;

  530. (defun LM:ODBX

  531.     (
  532.         _function
  533.         _drawinglist
  534.         _save

  535.         /

  536.         *error*
  537.         _releaseobject
  538.         acapp acdoc acdocs dbxdoc doc err path result
  539.     )

  540.     (defun *error* ( msg )
  541.         (_releaseobject doc)
  542.         (_releaseobject dbxdoc)
  543.         (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  544.             (princ (strcat "\nError: " msg))
  545.         )
  546.         (princ)
  547.     )
  548.   
  549.     (defun _releaseobject ( obj )
  550.         (if
  551.             (and
  552.                 (eq 'VLA-OBJECT (type obj))
  553.                 (not (vlax-object-released-p obj))
  554.             )
  555.             (vl-catch-all-apply 'vlax-release-object (list obj))
  556.         )
  557.     )

  558.     (setq
  559.         acapp  (vlax-get-acad-object)
  560.         acdoc  (vla-get-activedocument acapp)
  561.         dbxdoc (LM:ObjectDBXDocument acapp)
  562.     )
  563.     (vlax-for x (vla-get-documents acapp)
  564.         (setq acdocs
  565.             (cons
  566.                 (cons (strcase (vla-get-fullname x)) x)
  567.                 acdocs
  568.             )
  569.         )
  570.     )

  571.     (foreach dwg
  572.         (cond
  573.             (   _drawinglist   )
  574.             (   (setq path (LM:DirectoryDialog "Select Folder of Drawings to Process" nil 512))
  575.                 (mapcar
  576.                     (function (lambda ( filename ) (strcat path "\" filename)))
  577.                     (vl-directory-files path "*.dwg" 1)
  578.                 )
  579.             )
  580.         )
  581.         (if
  582.             (setq doc
  583.                 (cond
  584.                     (   (cdr (assoc (strcase dwg) acdocs))   )
  585.                     (   (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbxdoc dwg))))
  586.                         dbxdoc
  587.                     )
  588.                 )
  589.             )
  590.             (progn
  591.                 (setq err (vl-catch-all-apply _function (list doc)))
  592.                 (setq result
  593.                     (cons
  594.                         (cons
  595.                             dwg
  596.                             (if (vl-catch-all-error-p err)
  597.                                 (prompt (strcat "\n" dwg "\t" (vl-catch-all-error-message err)))
  598.                                 err
  599.                             )
  600.                         )
  601.                         result
  602.                     )
  603.                 )
  604.                 (if _save
  605.                     (vla-saveas doc dwg)
  606.                 )
  607.             )
  608.             (princ (strcat "\nError Opening File: " (vl-filename-base dwg) ".dwg"))
  609.         )
  610.     )
  611.     (_releaseobject doc)
  612.     (_releaseobject dbxdoc)
  613.     (reverse result)
  614. )

  615. ;;-------------------=={ Directory Dialog }==-----------------;;
  616. ;;                                                            ;;
  617. ;;  Displays a dialog prompting the user to select a folder   ;;
  618. ;;------------------------------------------------------------;;
  619. ;;  Author: Lee Mac, Copyright ?2012 - www.lee-mac.com       ;;
  620. ;;------------------------------------------------------------;;
  621. ;;  Arguments:                                                ;;
  622. ;;  msg  - message to display at top of dialog                ;;
  623. ;;  dir  - root directory (or nil)                            ;;
  624. ;;  flag - bit coded flag specifying dialog display settings  ;;
  625. ;;------------------------------------------------------------;;
  626. ;;  Returns:  Selected folder filepath, else nil              ;;
  627. ;;------------------------------------------------------------;;

  628. (defun LM:DirectoryDialog ( msg dir flag / fold path self shell )
  629.     (vl-catch-all-apply
  630.         (function
  631.             (lambda ( / acapp hwnd )
  632.                 (if
  633.                     (setq
  634.                         acapp (vlax-get-acad-object)
  635.                         shell (vla-getInterfaceObject acapp "Shell.Application")
  636.                         hwnd  (vl-catch-all-apply 'vla-get-hwnd (list acapp))
  637.                         fold  (vlax-invoke-method shell 'BrowseForFolder (if (vl-catch-all-error-p hwnd) 0 hwnd) msg flag dir)
  638.                     )
  639.                     (setq
  640.                         self (vlax-get-property fold 'Self)
  641.                         path (vlax-get-property self 'Path)
  642.                         path (vl-string-right-trim "\" (vl-string-translate "/" "\" path))
  643.                     )
  644.                 )
  645.             )
  646.         )
  647.     )
  648.     (if self  (vlax-release-object  self))
  649.     (if fold  (vlax-release-object  fold))
  650.     (if shell (vlax-release-object shell))
  651.     path
  652. )

  653. ;;-----------------=={ ObjectDBX Document }==-----------------;;
  654. ;;                                                            ;;
  655. ;;  Retrieves a version specific ObjectDBX Document object    ;;
  656. ;;------------------------------------------------------------;;
  657. ;;  Author: Lee Mac, Copyright ?2012 - www.lee-mac.com       ;;
  658. ;;------------------------------------------------------------;;
  659. ;;  Arguments:                                                ;;
  660. ;;  acapp - AutoCAD VLA Application Object                    ;;
  661. ;;------------------------------------------------------------;;
  662. ;;  Returns:  VLA ObjectDBX Document object, else nil         ;;
  663. ;;------------------------------------------------------------;;

  664. (defun LM:ObjectDBXDocument ( acapp / acver )
  665.     (vla-getinterfaceobject acapp
  666.         (if (< (setq acver (atoi (getvar "ACADVER"))) 16)
  667.             "ObjectDBX.AxDbDocument"
  668.             (strcat "ObjectDBX.AxDbDocument." (itoa acver))
  669.         )
  670.     )
  671. )

  672. (vl-load-com) (princ)

  673. ;;------------------------------------------------------------;;
  674. ;;                         End of File                        ;;
  675. ;;------------------------------------------------------------;;

  676. ;; change exploded block attribute tags to text
  677. ;; From T.Willey
  678. ;;http://forums.augi.com/showthread.php?40372-change-exploded-block-attribute-tags-to-text&p=351262&viewfull=1#post351262
  679. ;;When working with ObjectDBX you are working with the ObjectDBX Document Object,
  680. ;;not the ActiveDocument, so the function supplied to my ObjectDBX Wrapper function
  681. ;;will need to require a single argument - the ObjectDBX Document.

  682. (defun AttDef2Text ( Doc / ActDoc LayoutCol tmpLayoutBlk)
  683. ; Changes attdef entities (attributes that haven't been put into a block) into dtext in the whole drawing
  684. ;(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  685. ;(vla-StartUndoMark ActDoc)
  686. (setq LayoutCol (vla-get-Layouts Doc))
  687. (vlax-for LayoutObj LayoutCol
  688. (setq tmpLayoutBlk (vla-get-Block LayoutObj))
  689. (vlax-for Obj tmpLayoutBlk
  690.   (if (= (vla-get-ObjectName Obj) "AcDbAttributeDefinition")
  691.    (progn
  692.     (setq TextObj (vla-AddText tmpLayoutBlk (vla-get-TagString Obj) (vla-get-InsertionPoint Obj) (vla-get-Height Obj)))
  693.     (vla-put-Alignment TextObj (vla-get-Alignment Obj))
  694.     (if (/= (vla-get-Alignment TextObj) 0)
  695.      (vla-put-TextAlignmentPoint TextObj (vla-get-TextAlignmentPoint Obj))
  696.     )
  697.     (vla-put-Backward TextObj (vla-get-Backward Obj))
  698.     (vla-put-Layer TextObj (vla-get-Layer Obj))
  699.     (vla-put-Normal TextObj (vla-get-Normal Obj))
  700.     (vla-put-ObliqueAngle TextObj (vla-get-ObliqueAngle Obj))
  701.     (vla-put-Rotation TextObj (vla-get-Rotation Obj))
  702.     (vla-put-ScaleFactor TextObj (vla-get-ScaleFactor Obj))
  703.     (vla-put-StyleName TextObj (vla-get-StyleName Obj))
  704.     (vla-put-UpsideDown TextObj (vla-get-UpsideDown Obj))
  705.     (vla-Delete Obj)
  706.    )
  707.   )
  708. )
  709. )
  710. ;(vla-EndUndoMark ActDoc)
  711. (princ)
  712. )
  713. ;Delete empty text & zero length lines & polylines
  714. (defun purge_all(Doc / newlay)
  715.    ;(vla-PurgeAll Doc)
  716.    (vl-catch-all-error-p
  717.     (setq newlay
  718.       (vl-catch-all-apply
  719.         (function vla-item)
  720.           (list (vla-get-Layouts Doc) "Model")
  721.       )
  722.     )
  723.   )
  724.   (vlax-for o (vla-get-Block newlay)
  725.     (if (or
  726.         ;empty text
  727.         (and(wcmatch(strcase(vla-get-objectname o))"*TEXT")(wcmatch(vla-get-TextString o)", "))
  728.         ;zero length lines & polylines
  729.         (and(wcmatch(strcase(vla-get-objectname o))"*LINE")(equal(vlax-curve-getdistatparam o(vlax-curve-getendparam o))0.0 1e-6))
  730.          )
  731.      (vl-catch-all-error-p(vl-catch-all-apply 'vla-delete (list o)))
  732.      )
  733.   )
  734. )
  735. ;;处理图纸左下角点子程序
  736. (defun get_all_move ( Doc / newlay lst plist)
  737.    (vl-catch-all-error-p
  738.     (setq newlay
  739.       (vl-catch-all-apply
  740.         (function vla-item)
  741.           (list (vla-get-Layouts Doc) "Model")
  742.       )
  743.     )
  744.   )
  745.   (setq plist
  746.      (lst-getboundingbox
  747.       (vlax-for o (vla-get-Block newlay)
  748.          (setq lst (cons o lst))
  749.       )
  750.      )
  751.    )
  752.   (vlax-for o (vla-get-Block newlay)
  753.   (vla-move o (vlax-3d-point (car plist)) (vlax-3d-point '(0 0 0)))
  754.   )
  755. )
  756. ;;处理图纸缩放范围子程序
  757. (defun zoom_view (Doc / views av v p1 p2 c1 ds newlay lst plist)
  758. ;***********************************************
  759. ;;  CAB 11.16.07 rev. 12.23.08
  760. ;;  Remove based on pointer list
  761.   (defun RemoveNlst (nlst lst)
  762.     (setq i -1)
  763.     (vl-remove-if '(lambda (x) (vl-position (setq i (1+ i)) nlst)) lst)
  764.   )
  765. ;;***************************Main Routine**************************
  766. (setq views (vla-get-views Doc) av(vla-item(vla-get-Viewports Doc)0));;Is there No.1 Viewport in each dwg?

  767.    (vl-catch-all-error-p
  768.     (setq newlay
  769.       (vl-catch-all-apply
  770.         (function vla-item)
  771.           (list (vla-get-Layouts Doc) "Model")
  772.       )
  773.     )
  774.   )
  775.   (setq plist
  776.      (lst-getboundingbox
  777.       (vlax-for o (vla-get-Block newlay)
  778.          (setq lst (cons o lst))
  779.       )
  780.      )
  781.    )

  782. (setq v (vla-Add views "MyView"))

  783. (setq p1 (car plist);'(100. 100.)
  784.       p2 (cadr plist);'(500. 500.)
  785.       c1 (mapcar '(lambda (x y) (* 0.5 (+ x y))) p1 p2)
  786.       ds (mapcar 'abs (mapcar '- p1 p2)))

  787. (vlax-put v 'Center (RemoveNlst '(2) c1))
  788. (vlax-put v 'Height (cadr ds))
  789. (vlax-put v 'Width (car ds))

  790. (vla-setview av v)
  791. ;(vla-put-activeViewport Doc av);;No need and can not to activeViewport
  792. (vla-Delete v)
  793. (princ)
  794. )
  795. ;;处理字体缺失问题
  796. (defun change_font (Doc / Font BigFont Ttf obj)

  797. ;;  CAB @ TheSwamp 15.11.12
  798. ;;  returns nil if not found, else font name if found
  799. ;;  TTF file names should have the extension already added
  800. ;;  "romant.ttf"
  801. (defun find_font (fname / path font$)
  802.   (setq path (getenv "windir"))
  803.   (if (vl-position (substr path (strlen path)) '("/" "\"))
  804.     (setq path (strcat path "FONTS\"))
  805.     (setq path (strcat path "\\FONTS\"))
  806.   )
  807.   (setq font$ (if (wcmatch fname "*\\*,*`.*")
  808.                 fname
  809.                 (strcat fname ".shx")
  810.               )
  811.   )

  812.   (cond
  813.     ((findfile font$) font$)
  814.     ((and path (findfile (strcat path font$))) font$)
  815.   ((= fname "") fname)    ;;Added By xiaxiang 09.01.13
  816.     (t nil)
  817.   )
  818. )

  819. ;;  CAB @ TheSwamp 03.06.07
  820. ;;  Modified By xiaxiang 09.01.13
  821. ;;  Create or Update a Text Style
  822. ;;  Returns T is sucessfull created/updated else nil
  823. ;;  Prompts with any failures
  824. ;;  On Failure of Height or Width the other operations are completed
  825. (defun CREATE_TEXTSTYLE
  826.                         (Doc         ;document
  827.             StyleName ; String - "txt" or "txt.shx" or "ArialN.TTF"
  828.                          Font      ; String
  829.              BigOrNot ; T -> BigFont and nil -> Font
  830.                          / TextStyles VLTextStyle msg)
  831.   (vl-load-com)
  832.   (if (null (wcmatch Font "*`.*"))
  833.     (setq Font (strcat Font ".shx"))
  834.   )
  835.   (if
  836.     (or (and (setq file (findfile font)) ; found an shx font
  837.              (setq file font)
  838.         )
  839.         (setq file (findfile (strcat (getenv "windir") "\\fonts\" font)))
  840.         (prompt (strcat "\nFont File " Font " not found."))
  841.     )
  842.      (progn
  843.        (princ (strcat "\nText Style " StyleName))
  844.        (if (tblsearch "style" StyleName)
  845.          (princ " Updateing....")
  846.          (princ " Createing....")
  847.        )
  848.        (setq TextStyles (vla-get-textstyles Doc))
  849.        (if (vl-catch-all-error-p
  850.               (setq VLTextStyle
  851.                     (vl-catch-all-apply
  852.                       'vla-add (list (vla-get-textstyles Doc) StyleName))))
  853.          (not (princ " Failed\n**  Bad Style Name...."))
  854.          (progn
  855.            (or (not (vl-catch-all-error-p
  856.                        (vl-catch-all-apply 'vlax-put (list VLTextStyle (if BigOrNot 'BigFontFile  'FontFile) file))))
  857.                  (prompt "\n**  Bad Font File...."))
  858.         )
  859.        )
  860.      )
  861.   )
  862. )
  863. ;;***************************Main Routine**************************
  864.    (setq Font "simplex" BigFont "hztxt" Ttf  "simfang.ttf")
  865.    (vlax-for obj (vla-get-textstyles Doc)
  866.    (if (null(find_font (vla-get-fontfile obj)))
  867.      (if(wcmatch (vla-get-fontfile obj) "*tt@,*TT@")
  868.      (CREATE_TEXTSTYLE Doc (vla-get-name obj) Ttf nil)
  869.      (CREATE_TEXTSTYLE Doc (vla-get-name obj) Font nil)
  870.      )
  871.    )
  872.    (if (null(find_font (vla-get-bigfontfile obj)))
  873.    (CREATE_TEXTSTYLE Doc (vla-get-name obj) BigFont t)
  874.    )
  875.    ) ;_ vlax-for
  876.   ;(vla-regen Doc 1)
  877. )
  878. ;;将图纸拷贝至当前图纸模型空间
  879. (defun CopyFromAnother ( Doc / l o name objlst newlay)
  880.   (vlax-for l (vla-get-Layouts Doc)
  881.     (if (= (setq name (vla-get-Name l)) "Model")
  882.     (progn
  883.         (setq objlst nil)
  884.         (vlax-for  o (vla-get-Block l)
  885.       (setq objlst (cons o objlst))
  886.         )
  887.        (vl-catch-all-error-p
  888.         (setq newlay
  889.           (vl-catch-all-apply
  890.             (function vla-item)
  891.               (list (vla-get-Layouts *acdoc*) "Model")
  892.           )
  893.         )
  894.       )
  895.     (vla-Copyfrom newlay l);;the layout object (plot settings and visual properties) which can be copied by vla-CopyFrom
  896.       (vlax-invoke
  897.       Doc
  898.       'CopyObjects        ;;and an block (graphic objects and viewports) which components can be copied by vla-CopyObjects
  899.       (reverse objlst)
  900.       (vla-get-Block newlay)
  901.       )
  902.     )
  903.     )
  904.   )
  905. )
  906. ;;DBX方法集中处理子程序
  907. (defun My_Dbx_Handle (Doc)
  908. (change_font Doc)
  909. (AttDef2Text Doc)
  910. (purge_all Doc)
  911. (get_all_move Doc)
  912. (zoom_view Doc)
  913. (if (null mode)(CopyFromAnother Doc))
  914. )
  915. ;;适时模式打印子程序
  916. (defun printt ()
  917. (princ (strcat "\n*****行距" (rtos *x_paper_dist* 2 0) ",列距" (rtos *y_paper_dist* 2 0) ",每行" (rtos *x_num* 2 0) "张图纸*****\n"))
  918. )
  919.   
  920.   
  921. (defun c:modify ()
  922.    (printt)
  923.    ;;参数调整子程序
  924.    (defun xxkey (global str / key keyw )
  925.   (setq key
  926.      (getint
  927.        (strcat str
  928.          (rtos global 2 0)
  929.          ">>: "
  930.        )
  931.      )
  932.     )
  933.   (if (not key)
  934.   (setq keyw global)
  935.   (setq keyw key)
  936.   )
  937.   (setq global keyw)
  938.   )
  939.    ;;此处可修改行距
  940.    (setq *x_paper_dist*(xxkey *x_paper_dist* "\n请输入行距,回车重复上次选择 : <<"))
  941.    ;;此处可修改列距
  942.    (setq *y_paper_dist*(xxkey *y_paper_dist* "\n请输入列距,回车重复上次选择 : <<"))
  943.    ;;此处可修改每行图纸数量
  944.    (setq *x_num*(xxkey *x_num* "\n请输入每行图纸数量,回车重复上次选择 : <<"))
  945.   (printt)
  946.   (princ)
  947. )
  948. (princ "\n*****快速拼图程序 命令:batchins*****")
  949. (princ "\n***** 可用命令:modify修改参数  *****")
  950. (printt)
  951. (princ)


   


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-10-3 20:17:37 | 显示全部楼层
是可以插入,就是有些特殊图元,比如勘察中的理正图元会丢失
回复 支持 0 反对 1

使用道具 举报

发表于 2019-4-8 15:57:04 | 显示全部楼层
本帖最后由 softbird 于 2019-4-8 17:21 编辑

有多个目录的dwg分别要合并成对应的目录名.DWG,请教一下如何加上批处理,比如把所有的目录名作为参数加到scr文件分别执行合并,然后保存为各自的目录名.DWG。

  • (defun c:dj()
  •   (command "filedia" 0)
  •   (command "script" "d:/1.scr")
  •   (command "filedia" 1)
  • 1.scr
  • (batchinsert "D:\\图纸合并\\dwg1")(batchinsert "D:\\图纸合并\\dwg2")(batchinsert "D:\\图纸合并\\dwg3")(batchinsert "D:\\图纸合并\\dwg4")
  • 请教一下主程序应该怎么修改
发表于 2018-8-12 21:49:03 | 显示全部楼层
xiaxiang 发表于 2013-8-20 13:07
朋友,你的例图我已经看过了。程序的作用是将零散的带图框的图纸批量插入你运行程序的这张图纸,不知道你 ...

能改善一下代码吗 图框大小不一致  会出现重叠的地方
发表于 2012-12-19 18:30:33 | 显示全部楼层
支持版主...
发表于 2012-12-19 20:36:24 | 显示全部楼层
支持版主,支持源码,留存备用!
发表于 2012-12-21 07:40:37 | 显示全部楼层
这个必须预留个位置,顺便问一下DXF可以实现上面的演示吗?
谢谢

点评

稍微做点改动就可以  发表于 2012-12-21 09:26
发表于 2013-2-5 14:26:24 | 显示全部楼层
这个对打印人员特别有用,谢谢共享!!

点评

感谢关注,程序已更新,请重新下载!  发表于 2013-2-5 16:12
发表于 2013-2-7 01:48:04 | 显示全部楼层
版主我爱死你了!!
发表于 2013-2-7 11:27:12 | 显示全部楼层
试用了一下,感觉还不错,但有几点疑问,请教X版
1 若一张图上,有A2 A3 A4几张图怎么办?
2 假如图框不是块怎么办?
3 假如有二个件,一个是A2 ,一个A4,怎么判断?
4 假如二个文件,都是A2图,放大比例不同,如何处理?
 楼主| 发表于 2013-2-7 11:58:02 | 显示全部楼层
本帖最后由 xiaxiang 于 2013-2-7 11:59 编辑
自贡黄明儒 发表于 2013-2-7 11:27
试用了一下,感觉还不错,但有几点疑问,请教X版
1 若一张图上,有A2 A3 A4几张图怎么办?
2 假如图框不是 ...


感谢关注,请教谈不上,互相学习,共同进步。
本程序主要考虑的是拼图或者后台处理图形,我想研究或讨论的是DBX方法。
1.被插的那张图上有多少图没有关系,但最好是单文件单图,不然插图后也是不规整排列的?
2.计算插图的时候与图框的类型无关,计算的是被插图形里的所有对象。
3.若有各种版面的图纸想拼到一张图上,是否可以考虑全部拼到一行,设置一下参数即可。这涉及到排版的问题,若按照版面来排版,是否会打乱原来的图样顺序?目前是按照图纸文件的名称来计算顺序的,没有考虑版面不同的问题,不知道有什么好的建议没有?
4.图纸比例的问题没考虑过,假如原图图框大小是一致的,插入后仍然不变,且插入后图形的比例与原图一致。
欢迎深入讨论,谢谢。
发表于 2013-2-8 14:32:58 | 显示全部楼层
谢谢版主的好程序!有个问题帮忙看一下,
有些图形提示错误:参数值错误: AcDbCurve -33813392;(xiaoyingzi 的那个我用了,没有这个提示)



 楼主| 发表于 2013-2-26 14:42:36 | 显示全部楼层
为何生 发表于 2013-2-8 14:32
谢谢版主的好程序!有个问题帮忙看一下,
有些图形提示错误:参数值错误: AcDbCurve -33813392;(xiaoyin ...

庆祝论坛重生,回复测试:
这个报错估计是清理零长度直线造成的,方便的话上传样图以便调试。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 21:40 , Processed in 0.219038 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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