三维网

标题: 如何做一个把所选图形别存为一个文件的命令??? [打印本页]

作者: hellojaby    时间: 2011-4-15 14:09
标题: 如何做一个把所选图形别存为一个文件的命令???
先上个图,看图说话,' f" A" c. e2 `8 w, J
8 {0 F! i; J; {; r7 t; H
如何做一个把所选图形别存为一个文件的命令; q. H$ m9 {5 T" R0 J; ?
  l8 y" w. w! u0 o
请各位指点一二。谢谢了。
$ v& @, Z! X+ s9 S2 o+ P9 k0 `! h' ], J+ D5 M( h5 Q' n
' X. ]; B- A" q5 _  a3 i2 `8 N3 f$ S
我在网上搜了一下说W命令可以,但是用那个命令文件名还是得手动输入,如何才能自动点呢????, e# M. S: L  w; o) m- f

8 k/ u7 f: g+ e. T- k  t# g/ Z4 y[attach]1875264[/attach]
作者: hb-park    时间: 2011-4-16 15:09
使用写块命令即可
作者: woaishuijia    时间: 2011-4-19 09:57
1# hellojaby
! q# C/ h- n; e; Q请上传DWG文件
作者: hellojaby    时间: 2011-4-19 13:59
3# woaishuijia
. u3 A  l7 f0 v+ o
) ]! k  _  h, S+ w; b+ m9 A0 M您好,现在我上传的就是零件的图,每个零件上面的字是零件名(Name图层)。现在是想让每个零件都存为一个DWG文件,文件的文件名变成零件名子,不知道怎么样实现,用W命令虽然可以,但是我有些图有几百个上千个零件一个个手工做起来太麻烦了
作者: woaishuijia    时间: 2011-4-19 16:16
本帖最后由 woaishuijia 于 2011-4-19 16:24 编辑 2 H/ x) ?- X' c

3 \+ `: E3 p/ @! d# M. `你准备用作零件文件名的字符串中含有非法字符,不能做文件名!5 \2 S) O. o& z9 W+ S  g
如果保证该文字中没有非法字符,可以参考下面的代码(VBA)
8 r6 h. }' C7 J1 O1 r' D; h- A

  1. 4 Q6 Z) R9 \" g1 d
  2.     Dim SS As AcadSelectionSet, E(0) As AcadEntity, S As String" |" Q7 s# p0 j% F$ ?8 C; P
  3.     '创建选择集
    # s* L# e/ B- a' p7 F  N
  4.     Set SS = ThisDrawing.SelectionSets.Add("SS")
    2 c# v6 q/ C! D$ h# ?2 M, K
  5.     '由用户在屏幕上选取零件图图元,包括准备用作文件名的Name图层的单行文字5 U0 A6 p. j4 W0 ~/ j; }
  6.     SS.SelectOnScreen
    + c; C8 ]8 y3 U: H( t; V' w
  7.     '遍历选择集,查找其中Name图层的单行文字
    6 m+ l3 `% s9 {' M2 {, J9 @  X
  8.     For Each E(0) In SS
    / r. J0 `: X  H! Y* X
  9.         If E(0).ObjectName = "AcDbText" And E(0).Layer = "Name" Then. k7 F( j2 @6 R% b% G
  10.             '找到文字后提取字符串9 ?# Y7 _4 S, d7 I/ l
  11.             S = E(0).TextString
    ; L# z2 ~$ L% J& ~& `# Q
  12.             '从选择集中移除该单行文字,在新的零件文件中不保存它.
    4 U) O5 I2 d! s
  13.             '如果在零件文件中需要保存该文字,则删掉下面这行
    ) D5 V& h3 s3 [" z
  14.             SS.RemoveItems E- y0 G. w  h" I
  15.             Exit For& E0 N( C- i7 K6 f
  16.         End If
    * C5 u" \+ ]5 I2 H# c6 G
  17.     Next
    2 n! e: Z6 \& |. v1 y) P5 _
  18.     '调用写块方法在新文件中保存选择集中的图元,路径与当前文档相同,文件名使用从单行文字中提取的字符串
    9 L) L: }) x& c" ^6 `9 }) R
  19.     ThisDrawing.Wblock ThisDrawing.Path & "" & S & ".dwg", SS3 |) R9 }  k3 t" V
  20.     '删除用过的选择集; t  k7 p( S3 P9 R6 E% P/ {% A+ D; U
  21.     SS.Delete
    ! A* [9 b: k2 }4 e$ D5 j
复制代码

作者: hellojaby    时间: 2011-4-19 18:35
5# woaishuijia   |" m" H7 O8 {! q5 W4 a

* U1 w) N0 K* Q8 C9 Y* Q! L- T2 `- p: ~8 C$ a
你好啊,大哥,真是谢谢你了, 不过你能不能教教我这个东西怎么用啊,我实在是不会用这代码怎么去实现功能,谢谢。
作者: www1974    时间: 2011-4-19 22:59
6# hellojaby
* g; x- }6 R/ U+ }* |" z* c借用上面的VBA,加载附件的vlx后,运行wxssh-tt,可以自动批量导出。注意斑竹提示把斜杠用其他字符替代。
作者: hellojaby    时间: 2011-4-20 08:26
7# www1974 : t, W) `& T) p

/ X* y& y+ ]& n% L- p; T. u& l5 m( f' P: A; `. L( V

$ h# a* U* }0 F6 v谢谢大哥了,真的很感谢你们。
作者: hellojaby    时间: 2011-4-20 08:49
7# www1974 4 B  k# C8 R0 u

% b! g% c. e& ]* @" s; d' C# q- D$ K# K4 w+ K( }/ H; M
你好,发现个问题就是我在运行的时候不成功,我把“/”分别给换成“-”和“&”试了一下,都出现以下的东西
. _% E% R, H0 L" V1 J# M. w& b3 l& ], m& L- I% v) ?" l. |
这应该怎么解决啊??请大哥指点一二。谢谢了。
. D! T2 N6 F& \: V1 k, ]5 [: A" _4 G; k
  1.   D& M3 p) t7 l9 x2 l' N
  2. 令: wxssh-tt, Z: m1 y0 T2 q+ L) R2 R
  3. 选择对象: 指定对角点: 找到 1 个
    1 I( W. T" \  l: p
  4. 选择对象:
    ' ^7 A6 g+ N5 |& G5 d% N
  5. ._select
    6 x# d0 ~- `6 D1 Z, j1 l" P
  6. 选择对象: CP5 A0 H$ ], D; `/ @, N- P/ m6 e2 H: A1 Q& Y
  7. 第一圈围点: none
    # A, N2 t7 e; T, T) l! N' q
  8. 指定直线的端点或 [放弃(U)]: none
    & B1 w% c8 u1 B* j6 O! X
  9. 指定直线的端点或 [放弃(U)]: none
    9 P1 n- N4 K; F/ M7 V! Y
  10. 指定直线的端点或 [放弃(U)]: none8 e3 q# }+ l8 L9 |' F7 b
  11. 指定直线的端点或 [放弃(U)]: none2 K3 k$ @1 }$ q
  12. 指定直线的端点或 [放弃(U)]: none' ]/ K& H; g8 h( A$ o1 D7 ~
  13. 指定直线的端点或 [放弃(U)]: none
    2 Z+ S. \% }; W# u0 j
  14. 指定直线的端点或 [放弃(U)]: none# L$ A. r- }  b! i1 Z
  15. 指定直线的端点或 [放弃(U)]: none; ?" y. j3 Z2 o; U9 p! @
  16. 指定直线的端点或 [放弃(U)]: none6 ^* d/ M- m* b
  17. 指定直线的端点或 [放弃(U)]: none
    8 B2 o1 ^( g9 r! m: D
  18. 指定直线的端点或 [放弃(U)]: 找到 3 个
    , `, `0 X  N: c) R3 f
  19. 选择对象:
    & J- `' i. g" g9 r5 P3 q1 ?/ F& h
  20. 命令: ._vbarun 正在初始化 VBA 系统...  ^% j$ _- Q) Q& f: Y5 ?( L0 \
  21. 宏名称(M): tt 执行错误
    , T8 d5 Y- @! D6 }2 `
  22. 命令: <选择集: 476>
    * ?8 {- q; {3 v8 Z% Z; S5 a
  23. WXSSH-TT 未知命令“WXSSH-TT”。按 F1 查看帮助。- M9 Z( O$ J& ]
  24. 命令: WXSSH-TT 未知命令“WXSSH-TT”。按 F1 查看帮助。
    * r" x  y" M. I3 v/ J
  25. 命令: -1! M3 Z6 y0 S* `3 N
  26. , _# V+ l. g9 K
复制代码

作者: www1974    时间: 2011-4-20 20:26
命令: ._vbarun 正在初始化 VBA 系统...
0 ^! \4 _/ H6 H& Z5 [
2 h( j0 ^' x7 ~宏名称(M): tt 执行错误
( [6 a# `9 d% D$ {% @9 F. @6 I$ M* X, _  P, z% Z
把斑竹的VBA定义宏tt
作者: hellojaby    时间: 2011-4-21 09:18
10# www1974 1 F) Y3 [6 h( n$ K4 Z& x
" U! @5 U; }  s- m6 d( G8 Y. H" l
大哥我还没懂那个怎么用啊.我用2005和2008的都试了,' K) K( _# H* a
( w3 u' c6 t9 Z# a$ k
按你说把那个加载到VBA咋加载啊,这方面一门不门啊.多指点指点一下,谢谢了
作者: woaishuijia    时间: 2011-4-21 10:16
在CAD图形界面按"Alt+F11"(高版本可能需要按两次)打开VBA IDE界面,双击"工程资源管理器"中的"thisdrawing"对象,弹出代码窗口,在其中输入"sub tt"(没有引号,注意中间有空格),回车.代码窗口会出现
  1. Sub tt(); X0 q+ k$ @( D* y
  2. # d1 L, C7 n) X( n9 c# ]
  3. End Sub
复制代码
在中间的空行粘贴5#的代码.回到CAD图形界面,按"Alt+F8"(高版本可能需要按两次),在弹出的"宏"对话框上点击"运行"按钮即可运行程序.8 r: ~! L* v1 h0 O' R( z2 b
上面的VBA代码是一个输出单个文件的程序,加载7#的LISP程序后就可以自动反复调用VBA代码,从而批量输出零件文件.
+ A) f4 D, |  F9 w5 ]: \6 P加载的方法是:点出"工具"菜单下的"加载应用程序..."7 {) l9 R  L% j0 z! x( a  A
在VBA IDE界面,点"文件"菜单下的"保存",把VBA程序保存为".dvb"文件,便于以后使用.以后使用时加载的方法同上.
作者: koutx    时间: 2011-5-22 14:59
12# woaishuijia + D" U2 u+ Q& q  n
谢谢版主




欢迎光临 三维网 (http://www.3dportal.cn/discuz/) Powered by Discuz! X3.4