QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
1天前
查看: 4491|回复: 27
收起左侧

[求助] 导入同一文件夹下多个txt文件的宏问题

[复制链接]
发表于 2014-3-10 16:12:35 | 显示全部楼层 |阅读模式 来自: 中国吉林长春

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
本帖最后由 bj-alex 于 2014-3-10 22:12 编辑
% W& O1 \# r6 t) |+ |3 [' A8 @" W
我有大量的曲线坐标以文本方式保存,每条曲线一个文本文件,现需要将曲线导入。参考坛子里各位大神的方法,写了个自动输入的宏。调试也没发现错误,但是就是曲线显示不了?还望各位高手指点。4 O; R- v9 U6 _$ x' z
Sub main(). o8 h+ A) O& ~6 y0 O; g
Dim swApp As Object$ ?9 J8 b' @; K1 E
Dim Part As Object; M8 R4 v4 R2 B( V# g! ~# l
Dim boolstatus As Boolean
: E$ V! p( R) H( a% Z% V Dim longstatus As Long, longwarnings As Long
' k. ~+ a' G' C0 G) B3 o' \0 z& P  f! q: o7 r
( E: M2 L  a" H* V1 ], N% q
Set swApp =  Application.SldWorks/ {) X( X9 P5 y; {" m# `) A9 O

) j$ K2 W. l# D/ A& P2 B Set Part = swApp.ActiveDoc0 T! K* P+ p; t1 z' @  i( }5 e
, u( @5 ^5 ?8 p2 G9 D
Dim f As String, folder As String4 `8 U) p$ T" B( F6 T$ v4 q
folder = "E:\F\CU\Feb2014\5mm\01\"
: M4 |$ I) I5 c6 b f = Dir(folder & "*.txt")
7 n: w% C( V. q1 f+ R5 Y, S7 b While f > ""
1 b7 y: n7 t) A7 O% j5 d+ J Dim x, y, z As Double / x- y* ^# x  g( n) y9 h1 Q
Dim n As Integer   
0 [3 c2 i5 B6 p# a2 q9 ^4 z Part.InsertCurveFileBegin
8 I) G$ z; C: b5 N4 \* A- X" }1 @. m Open folder & f For Input As #1/ O" ?4 i# b& |) k0 G( v0 {! d
     n = 04 S2 K* |6 |0 K! s* m, z
     Do While Not EOF(1)% o& z4 V; b0 H0 x0 ]3 z/ v! a; r
          Input #1, x
" [* ^1 l& ]1 h* |          If EOF(1) Then# G' b$ N& B; x& R3 ~$ T
          Exit Sub
, n& c  j8 k$ K( ]1 `& z6 V+ [          End If
8 w- c6 u! L* i" n: t          Input #1, y
& }! f( X5 B; H( v# K5 d          If EOF(1) Then. j( I, \: k0 ^4 F/ A+ X+ y/ R9 V
          Exit Sub3 i$ `' E3 p% V" B  O& `
          End If
: b1 \8 d* r$ n4 k  u( }          Input #1, z: Z. ]) ~9 S2 m' E2 }' c: O  q
          n = n + 1
0 q0 x* y1 U3 ~$ ?. @' a        Part.InsertCurveFilePoint x, y, z
" V& n5 s; i( i$ G8 I     Loop- Y! ]: B2 ^! W# ?6 ^
    Part.InsertCurveFileEnd+ S+ _% ?( \8 B3 k( C8 ~, Z2 T
Close #1   
: t0 ^4 j5 C3 V& B; O    f = Dir
7 g7 k9 E  k4 P3 h  P& Q: ~+ L Wend: c. F3 I3 j9 E; U& N/ w  Q
End Sub
 楼主| 发表于 2014-3-10 22:10:24 | 显示全部楼层 来自: 中国吉林长春
还请高手指点啊,这个问题困扰我好久了
发表于 2014-3-11 09:37:28 | 显示全部楼层 来自: 中国浙江嘉兴
bj-alex 发表于 2014-3-10 22:10 static/image/common/back.gif; s( e! c8 }. m, b
还请高手指点啊,这个问题困扰我好久了

' w  s" u, o9 L% R. H! \, N1. TXT檔用連續不跳號之數字取名稱如 1.txt,2.txt ....,就可以配合  For Next 之 i 值,抓取全部的 TXT 檔.3 x! s* U* V, x
2. 把 全部的 TXT 檔 置放在須要的文件路徑下.
0 |- G6 w7 c  h- B8 R3. 先開SW的零件檔,執行如下宏,會在零件檔新插入3D草圖作出全部的 TXT 放樣曲線圖.. g1 d7 ?# w4 V2 j
4. 附檔是兩個測試檔 1.txt,2.txt 可以試看.5 f+ `8 r$ T9 g  t1 {# |
9 _+ r' W/ |6 i# J; ^- e' d
測試圖: x+ w) P# D0 n  z0 t4 \' Y8 f, Q) L
capture-29.gif ' C/ g6 ?5 X( a
Sub main()
* i! W/ |2 u8 b8 v' QDim swApp As Object1 v# S  I1 i4 p1 i7 r$ r9 Y
Dim Part As Object( U# T  E4 K2 u* S: y, K
Dim boolstatus As Boolean; q( ~& x; _, j& Z4 d8 A
Dim longstatus As Long, longwarnings As Long
7 b0 o' A6 O  wDim SketchMgr                 As Object: _: a- X& u, l2 _5 k# e" c' |
Dim pointArray As Variant
( l/ Y1 F0 r5 D" {" K( xDim points() As Double* W7 O* q; M1 `
On Error Resume Next
. n7 |/ Z+ d1 l4 y# d6 eSet swApp = Application.SldWorks
1 i4 ?; r( q4 Z, wSet Part = swApp.ActiveDoc
; G2 J% p& ^0 s0 b; CFor i = 1 To 2# Y1 k& N  ]9 F
    Dim f As String, folder As String; P+ b$ L$ F; c. `# Z
    folder = "E:\F\CU\Feb2014\5mm\01\"
2 _( P- b* ]  P8 K    f = Dir(folder & i & "*.txt")7 @2 E# @5 s6 f
    While f > ""+ g- W+ }) k, Z, U) I8 D0 s
    Dim x, y, z As Double& A, `$ ~; L/ O6 H- p3 F9 k, O3 h
    Dim s: _1 M& n! s  z+ d5 S
    Dim n As Integer; |' V, t) n2 U& p
    Open folder & f For Input As #1
3 @* Y' B1 h8 V6 m7 k" v    n = 0
) O) ~  A4 K: |. O, z    Do While Not EOF(1)
) O1 e) K( H9 d4 A! g         Line Input #1, s1 ?# K2 D' Z0 h; y& W. @/ z
         n = n + 1: n- G" r3 p6 I# \  j
    Loop
" m; Y/ X4 w# j    Close #1
- [/ T* |, F& }" P& f    Open folder & f For Input As #1
$ N7 B+ B2 f1 h! F    Set SketchMgr = Part.SketchManager$ F" z$ A- U' \
    SketchMgr.Insert3DSketch True
; ~! o' Y" z$ O" U+ r) u' K; X    ReDim points(1 To n * 3) As Double5 O6 O3 Z+ D8 U7 ^2 m4 r
    n = 0
% N' N) P, y1 s, I8 n    Do While Not EOF(1)1 ?* W* g7 m; C9 e2 a
         Input #1, x) a. a# m% u  f
         points(n + 1) = x / 1000
% |4 C  y, v2 F         If EOF(1) Then
( b- ~! O; y- B         Exit Sub% Z' |7 @: q+ k' f9 ]9 |
         End If
; K3 a- @) T: n9 @- C& G         Input #1, y0 [6 l4 T# e# C( D5 _
         points(n + 2) = y / 1000( o$ R! Q) H5 Z8 u$ s
         If EOF(1) Then. |& ^. j( X: P7 ~$ w
         Exit Sub
: \# F! H' Y  \' a3 y# _8 M" C9 e         End If
" H) _, g4 Y9 E- Y: @' o$ K" M         Input #1, z
7 g1 p' M' `- o. ~: b+ R0 w         points(n + 3) = z / 1000
4 X  _8 v( G4 S% G, U# V& `# g4 [         n = n + 33 h7 Z# C5 j  U
    Loop
$ S1 _7 Q$ [1 a' T) R    Close #1: t" Q0 b) n+ X1 Z7 Z. g3 K4 z3 o
    f = Dir  w' r; o1 [7 N1 Z& h8 [
    Wend
; T' R$ r3 W6 z% ^7 O+ ^; d- ~4 L    pointArray = points+ d8 I, e) f' }+ O
    Set skSegment = Part.SketchManager.CreateSpline((pointArray))
9 c3 |, {; d3 Q/ N8 T. q$ X    boolstatus = Part.EditRebuild3()
0 M% [' s; ~0 r, KNext- X7 f. t" n, Z' e; H1 x
End Sub
& g3 ^  T1 t) y6 d' n# q+ i6 ?" }% S, j& Y
macro_txt.zip (17.57 KB, 下载次数: 33)

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3 3

查看全部评分

 楼主| 发表于 2014-3-11 09:57:07 | 显示全部楼层 来自: 中国吉林长春
非常感谢!! 如果txt文件太多,比如1000个,会不会造成死机?而且每个文件大小不同,在输入大文件时,所需的时间会久一点,所以,在每次循环之间需要延时函数不?
发表于 2014-3-11 10:02:05 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 10:06 编辑
# V7 i. d7 T& w" S6 G2 W3 G+ t6 F! D7 N2 Y. j/ V
沒試不知道
6 G! ~, M8 L# R* {9 t5 g試看再說了,有問題再讨论./ r! i9 N( v. {+ w
若有跳號要繼續執行就在  $ n+ I2 V5 m0 p5 H3 N3 ~3 l- j. U" `& X
While f > "" 之上,插入 If f = "" Then GoTo aa
  k1 q$ e2 @" y1 o6 }6 }4 ^% Dboolstatus = Part.EditRebuild3() 之上,插入 aa:' m) k  C  a( N

; `3 Y1 A8 e6 D' `4 @" b8 G% C) U( U, t

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

 楼主| 发表于 2014-3-11 10:35:03 | 显示全部楼层 来自: 中国吉林长春
http://C:\\Users\\Alex Wang\\Desktop\\014 C* S. L) w# t* g, x7 [
程序执行之后,显示的有草图,有3D草图,检查数据也没问题。
 楼主| 发表于 2014-3-11 10:36:34 | 显示全部楼层 来自: 中国吉林长春
贴图失败
发表于 2014-3-11 10:43:23 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 10:47 编辑 : r5 N: {1 G2 g2 V9 ]  z7 W" r
bj-alex 发表于 2014-3-11 10:35 static/image/common/back.gif
+ E5 Y$ \. C! b+ P# h程序执行之后,显示的有草图,有3D草图,检查数据也没问题。
9 k) R. t9 Y8 s+ I
显示的有草图,是前3d草圖作完沒跳出3d草圖的編輯狀態,就繼續作第2個文件.
* S, b+ @3 U  D: \4 K, f正常是作完3d草圖用  boolstatus = Part.EditRebuild3() 重新計算 跳出3d草圖的編輯狀態.
. j( a2 H" O" u# c是用3#附檔文件測試的嗎% b" B: c  P+ ]& d: t/ k
. w2 c. [; ~  j6 i7 G6 K

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

 楼主| 发表于 2014-3-11 10:50:50 | 显示全部楼层 来自: 中国吉林长春
是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或者,加个延时。
发表于 2014-3-11 10:59:31 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 11:00 编辑   ]  m* M1 [5 \. R0 O9 D
bj-alex 发表于 2014-3-11 10:50 static/image/common/back.gif: {+ K! ~4 Q% H1 s+ O) r$ I7 h
是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或 ...
3#附件,我測試是正常
* s/ m0 f! O, ?% m9 b) q在 boolstatus = Part.EditRebuild3()  之下, 補上如下作緩沖看看
2 m6 p" B. s  {* T" S9 gDim myModelView As Object9 f4 `4 z  w# b
Set myModelView = Part.ActiveView, Q3 m" O% f- [& c
myModelView.RotateAboutCenter 0, 0
- P* g/ y; m4 H$ z# i! q

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

 楼主| 发表于 2014-3-11 11:07:53 | 显示全部楼层 来自: 中国吉林长春
还是不行,我用附件中的数据测试的。您试试?我一次之选了10个文件。

01.rar

302.39 KB, 下载次数: 15

 楼主| 发表于 2014-3-11 11:40:09 | 显示全部楼层 来自: 中国吉林长春
感觉是循环语句的问题。f=Dir之后,i值并没有变化啊。
发表于 2014-3-11 11:44:04 | 显示全部楼层 来自: 中国浙江嘉兴
bj-alex 发表于 2014-3-11 11:07 static/image/common/back.gif
" g0 i) y/ K, @  d$ s0 C还是不行,我用附件中的数据测试的。您试试?我一次之选了10个文件。
: s# D1 s. U4 C% ~8 \( h3 Y
如下有誤
0 s& D. {7 {* c- i9 J$ xf = Dir(folder & i & "*.txt")
# K! [/ q/ |5 |, a7 l1 `把  *.txt  改為  .txt (拿掉  * )# v8 G9 q3 }- u& \6 O" w# O, t
另來檔沒 5.txt, a, j! V! e$ w1 {/ C) s2 R, o7 Z* P
0 a! `1 D+ j7 }4 a" l" ?
測試正常
" _) U0 r- Z( _2 |" R: I capture_03112014_113746.jpg
 楼主| 发表于 2014-3-11 11:50:23 | 显示全部楼层 来自: 中国吉林长春
我故意把5拿掉的,是想测试下i值不连续的情况。
发表于 2014-3-11 11:56:49 | 显示全部楼层 来自: 中国浙江嘉兴
bj-alex 发表于 2014-3-11 11:50 static/image/common/back.gif
8 K# ^- S3 ~8 a6 k9 `8 P- s" D* H我故意把5拿掉的,是想测试下i值不连续的情况。

6 b5 U( `  }  m有跳號處理就參考5#的解決方法
 楼主| 发表于 2014-3-11 12:02:48 | 显示全部楼层 来自: 中国吉林长春
程序运行正常!非常感谢ryouss的无私帮助!* \/ r7 e$ O/ Q8 w# o1 C  \2 _0 o
我在想,如果写个宏,一次只输入一条曲线。然后再用另一宏循环调用它,这样也许可以解决文件数太多时,容易死机的情况。下午有空试试。
  H! V" _. g+ s6 _另外,再试试使用InsertCurveFile函数。7 v# Z) k. A# i/ A4 B1 Y
再次感谢ryouss!!
发表于 2014-3-11 14:30:38 | 显示全部楼层 来自: 中国浙江嘉兴
1~500 約跑12分鐘
1 M" P! F1 B! u; m5 L6 C4 L. ^0 i% x
capture_03112014_142755.jpg
 楼主| 发表于 2014-3-15 10:20:56 | 显示全部楼层 来自: 中国吉林长春
本帖最后由 bj-alex 于 2014-3-15 17:32 编辑
+ N  V. I# K' T+ k5 m) s- F
ryouss 发表于 2014-3-11 14:30 static/image/common/back.gif; h& Y/ O6 ], ]+ K3 V% @) \0 T
1~500 約跑12分鐘

6 F& R1 I! P+ G: T" C我现在已经将数据都导入了,形成了曲线,非常感谢您的指导。
2 l, Q' Z5 n* W: ]% G' `: w5 I另一个问题来了,这只是一层的数据,我还有很多层同样的数据。现在需要在对应位置的曲线,在垂直方向上连接成曲面,就是形成一个垂直的圆柱面。我用放样曲面,再选中两层的两个曲线,形成不了曲面啊。
qumian1.jpg
 楼主| 发表于 2014-3-15 10:26:56 | 显示全部楼层 来自: 中国吉林长春
现附上第二层,和第三层的数据。我做了好几天了,还是形不成曲面。还望指点。

02.rar

50.88 KB, 下载次数: 2

03.rar

38.77 KB, 下载次数: 1

 楼主| 发表于 2014-3-15 17:17:34 | 显示全部楼层 来自: 中国吉林长春
在原来程序之上修改,用insertcurvefile函数导入800个txt文档,只需要3分钟。但是,无法编辑曲线。; e- s9 o* {3 G( M5 d# P
用3D草图导入txt文档,虽然耗时,但是可以编辑曲线。& U4 P1 c( |% U: R/ Y: z8 W
另:3D草图导入的曲线,无法使用放样曲面。) Q" j$ ]$ P* ~8 c
txt.jpg
发表于 2014-3-15 20:40:45 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-15 20:42 编辑
5 u) x- a4 X* ]2 R! D
bj-alex 发表于 2014-3-15 17:17 static/image/common/back.gif( I6 d. |* g3 Q7 Z
在原来程序之上修改,用insertcurvefile函数导入800个txt文档,只需要3分钟。但是,无法编辑曲线。
" ~7 {) L% h3 d! A# {& K用3D草 ...
( K$ y  r; z* j+ w
生成的草圖是能夠做放樣曲面,
! T0 Z- V8 Q: \$ t# o6 W$ D應該是第一層和第二層的點沒對應吧5 e3 t* C# F5 K" p' ~8 G* x

# O! ?8 o/ D! q7 Y  h/ m Clipboard01.jpg ! B) @+ {) k* N
3 d! H$ V( I1 S2 G4 D
3D草圖5是你提供的第6檔,3D草圖10是依據第6檔做對應點的放樣曲線,因點有對應就可以做出放樣拉伸曲面.% A# m/ [: Q' Q9 e
capture-1.gif
 楼主| 发表于 2014-3-18 14:44:45 | 显示全部楼层 来自: 中国吉林长春
ryouss 发表于 2014-3-15 20:40 static/image/common/back.gif
; G. N+ ]7 V  t生成的草圖是能夠做放樣曲面,
' e0 k  u, ~, V, ~+ i應該是第一層和第二層的點沒對應吧

  W  w5 I: h& y8 \  Q3 [6 q如果是两个同心圆呢?只是一个大,一个小,却没有一个对应点,这样也做不了放样曲面?
. E% B/ `* W; }除了这种办法,还有没有其他方法,生成曲面?
发表于 2019-10-20 19:21:57 | 显示全部楼层 来自: 中国福建福州
两位好强,解决了我遇到的问题
发表于 2020-7-8 22:47:10 | 显示全部楼层 来自: 中国四川成都
两位高手非常强,我非常佩服,在你们宏文件的指导下,我依葫芦画瓢做了“宏”,批量做出了31条沿齿高方向的齿面曲线(31条曲线曲面放样是面齿轮的齿面,齿高方向就是沿坐标的Z轴方向。31条曲线的坐标点是在Excel里用VBA"宏"算的)。见下面几张图7 X9 H9 Y8 _/ l! W* M0 x
; J  y- S  \  x( c7 F  G

8 C& c' ^1 @" S, x& k0 S, u9 Q7 B

& N9 e% L8 H# l( `( P: Z9 x面齿轮全貌
) z; f4 o, ~3 a  A' S0 I
8 `' s9 x" q4 b5 b1 [5 [) R  w( ]3 Z8 |# l* A# [% \' G1 A1 j
面齿轮与直齿啮合* L( p( X. X. }1 ^- j" ~% s
" ~, p2 v" O" Q" ]4 W: T- v
3 \4 Z0 h- Y  c% p& x+ T& ^; t
现在,制造方采用数控机床按曲面加工面齿轮的齿面,要求有沿齿向的曲线坐标点,见下图
) _: R- A' V# E  u6 E+ B# ]# _7 @  g4 d8 i5 ^, Y/ g7 X, }

; X& D/ k% I# q6 o1 x# _' V% B& j5 B2 }1 f3 M" ~  L1 E% c
2 b# P6 N3 y! j! z
! b( h: m% ]1 @0 b  H
发表于 2020-7-8 22:49:30 | 显示全部楼层 来自: 中国四川成都
怎么图片都没传上来?重新再传
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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