明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 123abc

如何将多个DWG文件图纸自动导入一个DWG文件中?

  [复制链接]
发表于 2004-11-29 12:46:00 | 显示全部楼层
这些文件过程的实现不是问题,问题是怎么才能确定哪个是一个图框,自动把图框选择出来,因为要搜索整个图形,而你的图框仅仅是简单的直线,我搜索到直线时无法判断这是图框的直线,还是你图形中的直线。。。为什么你的图框就这么简单?


现在只能给你做个半自动的,就是你的图必须按你导入的规则排列好的,然后输入一些距离和大小的参数来计算所有图框的位置,如果你的图框及排列跟图中的一样,而且是固定不变的话(数量可以变化),就好办些
 楼主| 发表于 2004-11-29 13:16:00 | 显示全部楼层
meflying老师: 我的图形都是和28楼附件中的图形图框一样的,而且位置都是一成不变的,大小也是一样的,只要用各个图框的对角点确定选择图形范围即可。 其实我的图形中的图框都是在图框层中的,但我只要求能用固定的位置确定图形范围即可。 在编程时,一切图框位置、大小按28楼附件即可。 谢谢
发表于 2004-11-29 21:10:00 | 显示全部楼层
本帖最后由 作者 于 2004-11-30 11:12:17 编辑
  1. (defun c:em( / str_pre ss_lst Newdoc Doc i m path pt pt1 pt2 ss Sels pt_temp)
  2.    (setq m t)
  3.    (setq i 0)
  4.    (setvar "cmdecho" 0)
  5.    (setq path (GetFolder "e:\" "选择输出文件夹..."))
  6.    (if (not path) (exit))
  7.    (setq str_pre (getstring "文件规则(前缀):"))
  8.    (setq pt (getpoint "选择起点:"))
  9.    (setq NewDoc (vla-open (vla-get-documents (vlax-get-acad-object)) (getenv "LastTemplate")))
  10.    (setq Doc (vla-get-activedocument (vlax-get-acad-object)))   
  11.    (command "_.undo" "be")
  12.    (while m
  13.        (setq pt1 (polar pt 0 (* (rem i 5) 500.0)))
  14.        (setq pt1 (polar pt1 (* 1.5 pi) (* (/ i 5) 400.0)))
  15.        (setq pt_temp pt1)
  16.        (setq pt2 (list (+ (car pt1) 346) (- (cadr pt1) 245)))
  17.        (setq pt1 (polar pt1 (angle pt2 pt1) 2) pt2 (polar pt2 (angle pt1 pt2) 2))
  18.        (command "_.zoom" "w" pt1 pt2 )
  19.        (setq ss (ssget "_C" pt1 pt2))
  20.        (princ "\n")
  21.        (if ss
  22.            (Emas ss Doc NewDoc (GetFilename path str_pre i))
  23.            (setq m nil)
  24.        )
  25.        (setq i (1+ i))
  26.    );while
  27.    (vla-close NewDoc)
  28.    (command "_.undo" "e")
  29.    (command "_.u")
  30.    (princ)
  31. )(defun Emas(ss Doc NewDoc filename / i n ss_lst ssv ent New obj)
  32.    (vlax-for obj (vla-get-modelspace NewDoc)
  33.        (vla-delete obj)
  34.    )
  35.    (vla-saveas NewDoc filename acR15_DWG)
  36.    (setq i 0 n (sslength ss))
  37.    (setq ssv (vlax-make-safearray vlax-vbobject (cons 0 (1- n))))
  38.    (repeat n
  39.        (setq ent (ssname ss i))
  40.        (vlax-safearray-put-element ssv i (vlax-ename->vla-object ent))
  41.        (setq i (1+ i))
  42.    )
  43.    (vla-copyobjects Doc ssv (vla-get-modelspace NewDoc))
  44.    (vlax-for obj (vla-get-modelspace NewDoc)
  45.        (vla-move obj (vlax-3d-point (polar pt_temp (* 1.5 pi) 246.0)) (vlax-3d-point '(0 0 0)))
  46.    )   
  47.    (vla-save NewDoc)
  48. )
  49. (defun GetFilename(path pre i /)
  50.    (if (< i 10)
  51.        (setq i (strcat "0" (itoa (1+ i))))
  52.        (setq i (itoa (1+ i)))
  53.    )
  54.    (strcat path pre i)
  55. )(defun GetFolder(path msg / dcl_id Act Files ns Devices Directories path R
  56.      Load_dlg GetDevs Get_Files Getfiles GetParantPath fill_pop Fill_All Act_Dev Act_Dir)
  57.    (defun Load_dlg( msg / dcl_id f filename)
  58.        (setq filename (strcat (getenv "TMP") "GetFilesDialog.dcl"))
  59.        (setq f (open filename "w"))
  60.        (write-line "GetFileDialog:dialog{" f)
  61.        (write-line (strcat "label ="" msg "";") f)
  62.        (write-line ":text {label = ""; key = "name";}" f)
  63.        (write-line ":list_box {label = "路径:"; key = "dir"; fixed_height = true; height = 16; fixed_width = true; width = 30;}" f)
  64.        (write-line ":popup_list {label = "驱动器:"; key = "dev";}" f)
  65.        (write-line "ok_cancel;}" f)
  66.        (close f)
  67.        (if (< (setq dcl_id (load_dialog filename)) 0) (exit))
  68.        (vl-file-delete filename)
  69.        dcl_id
  70.    )
  71.    (defun GetDevs (/ i Device Devs)
  72.        (setq i 67)
  73.        (while (vl-directory-files (setq Device (strcat (chr i) ":")))
  74.            (setq Devs (append Devs (list Device)))
  75.            (setq i (1+ i))
  76.        )
  77.        Devs
  78.    )
  79.    
  80.    (defun Getfiles(path ftype flag / Files)
  81.        (setq Files (vl-directory-files path ftype flag))
  82.        (if Files
  83.            (setq Files (acad_strlsort Files))
  84.        )
  85.        (vl-remove "." Files)
  86.    )
  87.    (defun GetParantPath (path)
  88.        (setq i 0)
  89.        (setq n (strlen path))
  90.        (while (/= (substr path (- n i) 1) "\")
  91.            (setq i (1+ i))
  92.        )
  93.        (setq i (1+ i))
  94.        (substr path 1 (- n i))
  95.    )
  96.    (defun fill_pop(key lst)
  97.        (start_list key)
  98.        (mapcar 'add_list lst)
  99.        (end_list)
  100.    )
  101.    (defun Fill_All(path / dirs Files)
  102.        (fill_pop "dir" (GetFiles path nil -1))
  103.    )
  104.    (defun Act_Dev(n Devices / Dev)
  105.        (setq Dev (nth n Devices))
  106.        (Fill_All Dev)
  107.        (set_tile "name" Dev)
  108.        Dev
  109.    )
  110.    (defun Act_Dir(n path / folder)
  111.        (setq folder (nth n (GetFiles path nil -1)))
  112.        (if (= folder "..")
  113.            (setq path (getParantPath path))
  114.            (setq path (strcat path "\" folder))
  115.        )
  116.        (set_tile "name" path)
  117.        (fill_all path)
  118.        path
  119.    )
  120.    (if (= (substr path (strlen path) 1) "\")
  121.        (setq path (substr path 1 (- (strlen path) 1)))
  122.    )
  123.    (setq dcl_id (Load_dlg msg))
  124.    (if (not (new_dialog "GetFileDialog" dcl_id)) (exit))
  125.    (setq Devices (GetDevs))
  126.    (fill_pop "dev" Devices)
  127.    (set_tile "dev" (itoa (vl-position (strcase (substr path 1 2)) Devices)))
  128.    (Fill_All path)
  129.    (set_tile "name" path)
  130.    (action_tile "dev" "(setq path (Act_Dev (atoi $value) Devices))")
  131.    (action_tile "dir" "(setq path (Act_Dir (atoi $value) path))")
  132.    (action_tile "accept" "(setq ns (get_tile "name")) (done_dialog 1)")
  133.    (setq Act (start_dialog))
  134.    (unload_dialog dcl_id)
  135.    (if ns (strcat ns "\"))
  136. )
 楼主| 发表于 2004-11-29 23:39:00 | 显示全部楼层
谢谢meflying老师! 我家里机子是win98+CAD2000,现在运行出现以下错误: Command: em
文件规则(前缀):ttt
选择起点:; error: ActiveX Server returned an error: 参数不可选。 我单位机子是winXP+CAD2004,我明天在单位再试试。 第二行程序:(setq m t)
不知什么意思,“t”代表什么?是什么值?
 楼主| 发表于 2004-11-29 23:45:00 | 显示全部楼层
六楼程序,程序前面加上(vl-load-com)后,
在WIN98+Acad2000机子上,现在运行出现以下错误: Command: im
Usage: (acad_strlsort <list of strings>)
; error: bad argument type: stringp nil 在winXP+CAD2004机子上运行正常。
发表于 2004-11-30 08:33:00 | 显示全部楼层
33楼的程序已经稍加改动,你再看看,如果不行,再试试将acR15_DWG改为ac2000_dwg


35楼的问题已经讨论过了啊,怎么又来讨论?这次的错误跟上次是不一样的,应该跟系统版本无关,可能CAD的版本有些问题
 楼主| 发表于 2004-11-30 09:14:00 | 显示全部楼层
真的非常感激meflying老师!你的程序真是太棒了,我在ACAD2004下用非常好, 如有可能一定找机会请你客。 还有一个小要求: 能否将新图的图框左下角都放在原点(0,0)点,再次谢谢您!
发表于 2004-11-30 11:12:00 | 显示全部楼层
已改好
 楼主| 发表于 2004-11-30 12:12:00 | 显示全部楼层
我的原图都用如下程序加了标识,meflying老师,你能在新导出的图形中也用以下程序加上标识吗?否则,我的一些需要验证标识的程序在新图中无法运行。 (defun reg(ty)
(vl-load-com)
(vlax-ldata-put "mydict" "mykey" ty T)
(princ (strcat "已将图纸标识为" ty "\n"))
(princ)
)
(defun com()
(vl-load-com)
(vlax-ldata-get "mydict" "mykey" nil T)
) (defun c:tytyty (/ LYTAA001)
(vl-load-com)
(setq LYTAA001 (ssget "x")) (while (= LYTAA001 NIL) (princ)
(setq LYTAA001 8)
(reg "TYTYTY")
)
)
发表于 2004-11-30 13:31:00 | 显示全部楼层
这样,只要在原文件有的东西,导出后都有了


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-9-30 04:31 , Processed in 0.148586 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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