【悬赏活动1】请高手编制一个小程序!!!
yuanjingde
yuanjingde Lv.2
2006年11月14日 12:02:40
只看楼主

现在将多张CAD图纸导入到一个CAD文件中常使用拖入的办法,可是图纸太多重复劳动,哪个高手能编个程序将一个固定文件夹中的CAD文件全部导入CAD中,并在CAD文件中规则排列!急需!我的邮箱:yuanjingde@163.com(biechen注:凡给出最佳解答者(源码),给与100分奖励,参与者均有奖励,正确但非最佳答案也会给与高分,欢迎大家积极参与)

现在将多张CAD图纸导入到一个CAD文件中常使用拖入的办法,可是图纸太多重复劳动,哪个高手能编个程序将一个固定文件夹中的CAD文件全部导入CAD中,并在CAD文件中规则排列!急需!我的邮箱:yuanjingde@163.com


(biechen注:凡给出最佳解答者(源码),给与100分奖励,参与者均有奖励,正确但非最佳答案也会给与高分,欢迎大家积极参与)
免费打赏
hangxingmeng
2006年11月15日 21:25:24
2楼
是啊,俺都是不厌其烦,
回复
lyy5672
2006年12月19日 14:29:31
3楼
我不会。
回复
biechen
2006年12月19日 15:29:31
4楼
用vlisp简单写了一个,做个引子吧
(defun c:test()
;com init
(vl-load-com)
;call the directory common dialog by shell,then get the directory path
(setq objSH (vlax-create-object "Shell.Application"))
(setq dir (vlax-invoke-method objSH ’BrowseForFolder 0 "Select a forlder:" 1))
(setq msg (vl-catch-all-apply
’(lambda ()
(setq dir (vlax-get-property dir ’self))
(setq path (vlax-get-property dir ’path))
)
)
)
(if (vl-catch-all-error-p msg) (setq path nil))

(if path (setq dir (strcat path "\\")) (progn (princ "get directory path failure")(exit)))

;;get the list of all dwgfilename
(setq dwglist (vl-directory-files dir "*.dwg" 1))

;iter
(setq len (length dwglist))
(setq i -1)
(setq ybuf nil)

(repeat len
(setq dwgpath (strcat dir (nth (setq i (1+ i)) dwglist)))
;insert dwg by block
(command "_.insert" dwgpath (list 0 0 0) "" "" "")
(setq ent (entlast))
(vla-getboundingbox (vlax-ename->vla-object ent) ’minpoint ’maxpoint)
(setq pt1 (vlax-safearray->list minpoint)
pt2 (vlax-safearray->list maxpoint)
;here,you can calc perfect coordinates for your insert dwg
x1 (car pt1)
y1 (cadr pt1)
y2 (cadr pt2)
h (- y2 y1)
)
(if (= nil ybuf)
(progn
(setq ybuf (+ y2 (* h 1.1)))
)
(progn
(setq pt2 (list x1 ybuf))
(setq ybuf (+ ybuf (* h 1.1)))
(command "_.move" ent "" pt1 pt2)

)
)

(command "_.explode" ent)
);end iter
)
回复
wujimmy
2006年12月25日 07:18:07
5楼
;;以下程序用于插入PKPM计算书wpj*.dwg
(defun c:iwpj ()
(setq dir (qf_getFolder "选择文件夹:"))
(if dir
(progn
(setq x 0)
(setq diet 30000)
(setq i (getint "\n输入起始层号:"))
(setq i (1- i))
(setq num (getint "\n输入最大层号:"))
(repeat (- num i)
(princ (strcat dir (strcat "\\wpj" (rtos i 2 0) ".dwg")))
(command
"_insert"
(strcat dir
(strcat "\\wpj" (rtos (setq i (1+ i)) 2 0) ".dwg")
)
(list 0 (setq x (+ diet x)) 0)
1000
1000
0
)

)
)
)
)

回复
wujimmy
2006年12月25日 07:18:22
6楼
子函数:
(defun qf_getFolder (msg / WinShell shFolder path catchit)
;; 作者:秋枫,参考了灯火的VBA程序
;; 用法:(qf_getFolder msg)
;; 例子:(qf_getFolder "选择文件夹:")
;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil

(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq
shFolder (vlax-invoke-method WinShell ’BrowseForFolder 0 msg 1)
)
(setq
catchit (vl-catch-all-apply
’(lambda ()
(setq shFolder (vlax-get-property shFolder ’self))
(setq path (vlax-get-property shFolder ’path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
)

回复
yegong330
2006年12月25日 13:23:52
7楼
我倒觉得简单点的话,就直接用外部引用,2004以上可以一次选很多张,一起引用,再一起绑定,就行了,只是要挪动一下位置
回复
stonedwg
2006年12月28日 12:58:55
8楼
斑主的和吴所不及的已经是并列最佳了
俺就不来抢你们的积分了

有个小建议
根据图名分行列
免得排得比长城还长

比如PKPM计算书通常都是按楼层的
文件名都是以数字结尾
把相同的类型的如WPJ*按楼层排成一列
PL*再另外排成一列

。。。。
回复
love_wxiao1314
2006年12月29日 15:53:50
9楼
都是高手啊,我是菜鸟,只有学习的份,不过感谢版主给我提供这么好的学习机会。
回复
林海一舟
2006年12月30日 12:15:35
10楼
CAD用蛮多,对于编程不是很懂,希望高手能给一些基本资料,让我等低手学习学习
回复
笑对人生
2006年12月31日 09:16:38
11楼
以前学的编程知识,好久没用快忘完了,看来还应该再温习一次
回复

相关推荐

APP内打开