QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4559|回复: 27
收起左侧

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

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

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

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

x
本帖最后由 bj-alex 于 2014-3-10 22:12 编辑 9 ]3 I7 E: O2 e1 f5 t

+ h- s9 H) F$ r2 Y, R! a5 k我有大量的曲线坐标以文本方式保存,每条曲线一个文本文件,现需要将曲线导入。参考坛子里各位大神的方法,写了个自动输入的宏。调试也没发现错误,但是就是曲线显示不了?还望各位高手指点。
0 u- m" S* Z8 X$ g& C% eSub main()
7 F" }, |$ m3 ?  i+ j Dim swApp As Object- H) C% E' ]1 L- {0 \1 \
Dim Part As Object  t& A+ ?8 Q5 |3 Q) Y$ p
Dim boolstatus As Boolean
0 b  q. C/ T( P  U0 G8 u Dim longstatus As Long, longwarnings As Long
% R7 A) l: f+ r* p# {' J1 N( j
$ o  O% x4 |% t* `6 Z8 Y% U/ X
7 |) K* n' G& l* ~ Set swApp =  Application.SldWorks
2 }" T4 x/ N- _. H, t1 ~
2 S; M0 X) q  X0 c/ |- R Set Part = swApp.ActiveDoc0 X* P) z  c' {
% r' K1 x- Z5 P6 \# {3 r" o" Q2 y+ X  g
Dim f As String, folder As String8 g' {7 f" j" {! y' ^- j
folder = "E:\F\CU\Feb2014\5mm\01\"% r8 m0 H+ u6 |) I5 r! D1 T
f = Dir(folder & "*.txt")
  M8 I( i, X" a3 y$ |6 r$ [ While f > ""& B& n0 x) Q' w8 _
Dim x, y, z As Double . E+ R# P- B6 W# L' k
Dim n As Integer   
5 Y7 t+ d/ |7 U' w1 A9 d Part.InsertCurveFileBegin! r' S; M& L% q4 y
Open folder & f For Input As #1) \6 j% s; Q: `8 y4 k
     n = 0
. T& w! G( `3 L# z- E( f     Do While Not EOF(1)
0 v# L. P' z. o+ O          Input #1, x/ _4 t+ @7 R$ r5 {) P: l" V
          If EOF(1) Then7 M( d5 h4 \0 {/ u# A, H: Z
          Exit Sub5 D( F+ Y8 ^! g! q
          End If
+ w# ^7 u; c- \/ d8 t# E          Input #1, y7 n. n  P" M: y7 V% H: z7 F! ~
          If EOF(1) Then4 c6 }1 T4 a  O  w
          Exit Sub  f: Z9 [9 Z' c9 g. a
          End If$ z0 Z" v% S- v8 F
          Input #1, z
, K% n' m$ x8 A- i/ e% F          n = n + 1: t1 O1 X! g& N
        Part.InsertCurveFilePoint x, y, z3 s! l( r* j) H/ r$ C- B
     Loop8 Y, A' B$ h0 i/ G/ |
    Part.InsertCurveFileEnd- Q; ?* ?  B% f1 F
Close #1   
$ O$ o. o7 q# V/ ], r    f = Dir
) }7 U+ c( U8 u Wend' z( r$ b' S% d* w1 J
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
8 N# k# H+ H( l8 l- h( i* |! ]6 e还请高手指点啊,这个问题困扰我好久了

5 N4 |5 q2 [& F9 ]* `0 j1. TXT檔用連續不跳號之數字取名稱如 1.txt,2.txt ....,就可以配合  For Next 之 i 值,抓取全部的 TXT 檔.' l6 u1 E" i- ~( B4 G4 g9 P/ W. r
2. 把 全部的 TXT 檔 置放在須要的文件路徑下." D! P" Q4 c" [4 i9 S0 T
3. 先開SW的零件檔,執行如下宏,會在零件檔新插入3D草圖作出全部的 TXT 放樣曲線圖.
) u# p# X/ T% @  P7 V4. 附檔是兩個測試檔 1.txt,2.txt 可以試看.
$ q( x8 t) ?; p% I9 B% l
  v! e5 w7 w$ L. ^測試圖
3 N- S5 i! D! V capture-29.gif + S7 i1 x5 A7 j, }6 [7 `/ \, o8 a) b
Sub main()* F, |, K: m- [! O5 g3 B
Dim swApp As Object
# h( Y% ?" r7 g# R# {9 [; kDim Part As Object
; L: B; A: ]8 l- g% ZDim boolstatus As Boolean
3 `3 H7 J; U4 d9 QDim longstatus As Long, longwarnings As Long
% c3 Q/ b0 ?/ q& wDim SketchMgr                 As Object
4 H# c, \7 o- X. }Dim pointArray As Variant
! A, u! J# Y! ^3 JDim points() As Double( W! H$ t: U) }; w3 y/ I
On Error Resume Next
( n" o4 g( ?1 RSet swApp = Application.SldWorks
7 z* E) k8 u, m3 ?& F( \  r4 |Set Part = swApp.ActiveDoc2 N, j- E9 I$ ]3 ]; C
For i = 1 To 26 C( p( P7 T$ H  h( \0 Q
    Dim f As String, folder As String
1 X) j( ?8 l' q! T    folder = "E:\F\CU\Feb2014\5mm\01\"
, Y" I9 N+ b  Q, v+ x) p; B    f = Dir(folder & i & "*.txt")
; M# q3 c& y- S' p, \! i4 ]    While f > ""4 {( s7 E: v$ d$ u
    Dim x, y, z As Double* D6 J5 |' }5 D* f+ Q
    Dim s
) f6 N1 \: F  }2 ]. p7 ~    Dim n As Integer) g( B8 Z, G! z
    Open folder & f For Input As #1
5 K  {- z! V' W5 r5 Y9 {$ i    n = 0
6 p: s# \( d4 G; R+ M4 H/ r+ p    Do While Not EOF(1)
7 e# n, J7 P/ G         Line Input #1, s
3 r* c0 i1 H0 a, V$ P, X         n = n + 1: B. J* h1 O/ [, n! i5 W
    Loop
" D. [  f" [! o5 O    Close #1$ M$ P. e3 {+ @, F4 J% ~
    Open folder & f For Input As #1
5 m5 j/ T4 r  b4 O' Y# k- _9 |    Set SketchMgr = Part.SketchManager
4 V3 g/ P9 t0 N6 t8 f% v9 b5 u    SketchMgr.Insert3DSketch True
# J5 ]2 E- d( Q) z8 ^3 L1 U' |    ReDim points(1 To n * 3) As Double
( G6 ~4 D. Y3 I% j/ e2 B" Z  d    n = 0
9 }% z" L! q, g" W& P' f( i    Do While Not EOF(1)4 {1 X. N1 j( G% ]/ E
         Input #1, x+ }: B% ~, J; Q6 @+ r
         points(n + 1) = x / 1000
( b/ R( Z$ J  T6 N         If EOF(1) Then! X9 ^# n( I; J# E, a8 P9 \+ U$ K$ f
         Exit Sub! ~" F# f+ ?+ S+ D
         End If' @. z2 T6 h1 }. U% k7 O- |7 _
         Input #1, y# _3 F% c$ f% P* g5 m/ Z  c
         points(n + 2) = y / 1000
/ g5 Y, v, N5 ]+ }         If EOF(1) Then
5 T/ F$ s, `( L7 P         Exit Sub
" d, z6 K! f7 K5 f         End If2 ]4 A# q  m- S
         Input #1, z" o2 o% B! B: K1 Y8 O3 {
         points(n + 3) = z / 1000
  w7 W7 X* F+ H( a2 J2 r7 u8 U         n = n + 3: E0 N& @9 [/ H8 r$ U6 |* v; Z
    Loop; E3 I# q( E/ o1 J0 q
    Close #1
4 {2 |/ ~  g4 b    f = Dir+ F* P! i, I' \7 R& h  ?
    Wend
/ t+ K8 ^+ \, h( {1 d4 W, W9 q' _    pointArray = points
" S* {% s1 c2 c2 r: w: b    Set skSegment = Part.SketchManager.CreateSpline((pointArray))
8 n9 `9 {( ~$ {    boolstatus = Part.EditRebuild3()" K! g0 y% f5 B' c* e4 o
Next
4 I' i$ N' T: F8 d. v6 ^End Sub
# y  g, ?9 ?! D! }3 b* n+ f" g6 }4 T  I5 ?$ P& w
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 编辑 * w! c, |" ]( L7 `/ ~* y
% ]+ i, u/ A& C9 _: J8 W
沒試不知道
- X, k) S& t1 a) B試看再說了,有問題再讨论.
3 h7 N( D4 V# U4 V若有跳號要繼續執行就在  ' a) x: V( x! Z- Q! {
While f > "" 之上,插入 If f = "" Then GoTo aa
. a) Q2 Y. M- W6 ^" Q! I. Z& X! Yboolstatus = Part.EditRebuild3() 之上,插入 aa:
/ P; m. r- y3 e2 ^) f+ |% f+ m4 C/ _* ~) N6 Y- d. t  h4 @% w3 q; E( O' h
% p# P! _" q& Y5 o( |8 y

评分

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

查看全部评分

 楼主| 发表于 2014-3-11 10:35:03 | 显示全部楼层 来自: 中国吉林长春
http://C:\\Users\\Alex Wang\\Desktop\\01, q% n% m7 P1 ^' v2 n! [3 x! q" b
程序执行之后,显示的有草图,有3D草图,检查数据也没问题。
 楼主| 发表于 2014-3-11 10:36:34 | 显示全部楼层 来自: 中国吉林长春
贴图失败
发表于 2014-3-11 10:43:23 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 10:47 编辑 & ~* t) G% {1 t8 |$ {, }, z' \" S* i
bj-alex 发表于 2014-3-11 10:35 static/image/common/back.gif
* l7 H. \: q3 k% \4 U* J程序执行之后,显示的有草图,有3D草图,检查数据也没问题。
; x1 q8 v% J  _4 n0 f; b
显示的有草图,是前3d草圖作完沒跳出3d草圖的編輯狀態,就繼續作第2個文件.; N) r* }( u" [
正常是作完3d草圖用  boolstatus = Part.EditRebuild3() 重新計算 跳出3d草圖的編輯狀態.' i  V0 e2 q/ g5 N1 Z
是用3#附檔文件測試的嗎2 c3 p9 A5 ]- v$ g/ _& f

6 M! y5 R- u+ E8 s8 [) `4 \

评分

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

查看全部评分

 楼主| 发表于 2014-3-11 10:50:50 | 显示全部楼层 来自: 中国吉林长春
是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或者,加个延时。
发表于 2014-3-11 10:59:31 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 11:00 编辑 " q6 `3 i  Q$ V' [# W, w% e
bj-alex 发表于 2014-3-11 10:50 static/image/common/back.gif! p: m. w( s/ v5 S' r4 s
是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或 ...
3#附件,我測試是正常. s" w4 D) I, P: Y" @5 o! B, g
在 boolstatus = Part.EditRebuild3()  之下, 補上如下作緩沖看看$ S6 d8 z0 H4 Z7 B1 D
Dim myModelView As Object
" f" [4 T& D; A: i) xSet myModelView = Part.ActiveView
3 ?; D1 [0 n' d" R) P+ ZmyModelView.RotateAboutCenter 0, 0
$ L1 H7 n( 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
8 e% m( b; n; f还是不行,我用附件中的数据测试的。您试试?我一次之选了10个文件。

7 k! D8 ]) X' |4 b- W如下有誤# U9 ]0 \, U1 R1 |1 Y5 h! x0 w2 o
f = Dir(folder & i & "*.txt")% W5 j4 s7 |3 e5 H7 A3 a
把  *.txt  改為  .txt (拿掉  * )) }: N2 }4 _8 M3 y
另來檔沒 5.txt
4 H, r1 b. w- J) G+ O
- U4 @8 j, ]0 O* m+ R: C) f, l測試正常
( D4 [/ q& Y% s4 g: T 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) H% c5 Y* l2 l. u/ \( H
我故意把5拿掉的,是想测试下i值不连续的情况。
1 z/ _; x/ L( g5 f; y% [
有跳號處理就參考5#的解決方法
 楼主| 发表于 2014-3-11 12:02:48 | 显示全部楼层 来自: 中国吉林长春
程序运行正常!非常感谢ryouss的无私帮助!1 l( K1 [) l8 a1 c
我在想,如果写个宏,一次只输入一条曲线。然后再用另一宏循环调用它,这样也许可以解决文件数太多时,容易死机的情况。下午有空试试。
* u. i/ J" ]' j另外,再试试使用InsertCurveFile函数。
' X' N  i. g! k7 ?) c+ B再次感谢ryouss!!
发表于 2014-3-11 14:30:38 | 显示全部楼层 来自: 中国浙江嘉兴
1~500 約跑12分鐘
% u# F# R* F4 c( h" g! j; D) g9 ~. }
capture_03112014_142755.jpg
 楼主| 发表于 2014-3-15 10:20:56 | 显示全部楼层 来自: 中国吉林长春
本帖最后由 bj-alex 于 2014-3-15 17:32 编辑 3 W/ G+ h" Z5 U/ I9 ?
ryouss 发表于 2014-3-11 14:30 static/image/common/back.gif
/ _( w- ^; H" h/ Q3 \1~500 約跑12分鐘

) l* m" s+ \$ J6 o" Z我现在已经将数据都导入了,形成了曲线,非常感谢您的指导。
  T+ t9 k' D) v  F另一个问题来了,这只是一层的数据,我还有很多层同样的数据。现在需要在对应位置的曲线,在垂直方向上连接成曲面,就是形成一个垂直的圆柱面。我用放样曲面,再选中两层的两个曲线,形成不了曲面啊。
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分钟。但是,无法编辑曲线。/ k- T9 z1 k. ?- q$ ?) ~
用3D草图导入txt文档,虽然耗时,但是可以编辑曲线。
- m- E" l; x+ Q) d8 u( J$ z) P1 P另:3D草图导入的曲线,无法使用放样曲面。% N# I* l# F0 f# B5 x/ z" z
txt.jpg
发表于 2014-3-15 20:40:45 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-15 20:42 编辑 * J5 A3 B& b) m2 D
bj-alex 发表于 2014-3-15 17:17 static/image/common/back.gif8 v: x$ x3 s& W$ r# \: f, s9 y, ?
在原来程序之上修改,用insertcurvefile函数导入800个txt文档,只需要3分钟。但是,无法编辑曲线。9 N* o- J6 r  w) V, t
用3D草 ...
: k) r( ]2 m+ W3 w  Q
生成的草圖是能夠做放樣曲面,( ]& N9 V. h1 e
應該是第一層和第二層的點沒對應吧2 P2 N) V2 r( r/ _$ U# Q$ A/ L
9 R& o9 T/ S$ n, n. o6 L6 e& E6 _
Clipboard01.jpg
& @& F' Q2 ~4 K- w
3 ^5 m/ s2 e$ j7 n% Z3D草圖5是你提供的第6檔,3D草圖10是依據第6檔做對應點的放樣曲線,因點有對應就可以做出放樣拉伸曲面.
& u" N: k8 [3 `6 u0 w capture-1.gif
 楼主| 发表于 2014-3-18 14:44:45 | 显示全部楼层 来自: 中国吉林长春
ryouss 发表于 2014-3-15 20:40 static/image/common/back.gif
& \) i% Y+ `1 j. ^. j生成的草圖是能夠做放樣曲面,( z* J) C3 i( H% c9 c% J. N
應該是第一層和第二層的點沒對應吧

& [1 b! I! q4 f- Z- g+ B如果是两个同心圆呢?只是一个大,一个小,却没有一个对应点,这样也做不了放样曲面?
: ^# _# I- h! w: n1 @: P' W除了这种办法,还有没有其他方法,生成曲面?
发表于 2019-10-20 19:21:57 | 显示全部楼层 来自: 中国福建福州
两位好强,解决了我遇到的问题
发表于 2020-7-8 22:47:10 | 显示全部楼层 来自: 中国四川成都
两位高手非常强,我非常佩服,在你们宏文件的指导下,我依葫芦画瓢做了“宏”,批量做出了31条沿齿高方向的齿面曲线(31条曲线曲面放样是面齿轮的齿面,齿高方向就是沿坐标的Z轴方向。31条曲线的坐标点是在Excel里用VBA"宏"算的)。见下面几张图. O8 \3 Z1 s2 b6 @% e6 X

8 d( {( b9 S* j  o4 G0 ?: i% v- H" d# d# R0 R1 q

; U& M- }# [% z& K7 V
0 h6 f$ }! ]% U% Q面齿轮全貌
; h& ~- u, c. X7 o& P; i! ?( D1 B- l% E8 z8 M8 {8 n  \. z
6 g0 @* Q: b* P' O
面齿轮与直齿啮合
7 K% V& Q9 A. ^8 O
' S6 n7 ^5 m0 F% `% d, O3 i, P# W: N/ M- |
现在,制造方采用数控机床按曲面加工面齿轮的齿面,要求有沿齿向的曲线坐标点,见下图, D0 M% w% Q) V
/ w  |+ V9 R" K' X
2 U' r, x2 H) o
: g7 r1 O% I* [6 F

3 m8 x: S& p! D; e3 v' q" d/ t; E7 \
" D$ g5 U7 E6 j( v, g  ~0 h
发表于 2020-7-8 22:49:30 | 显示全部楼层 来自: 中国四川成都
怎么图片都没传上来?重新再传
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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