QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 bj-alex 于 2014-3-10 22:12 编辑
* F" U6 f+ u1 \6 E7 `4 a1 U& g# i  M
我有大量的曲线坐标以文本方式保存,每条曲线一个文本文件,现需要将曲线导入。参考坛子里各位大神的方法,写了个自动输入的宏。调试也没发现错误,但是就是曲线显示不了?还望各位高手指点。
! L, J# v7 E  Y# {# p6 @Sub main()  X2 {" k5 @) x1 w$ M
Dim swApp As Object7 y0 D+ R# z* q1 F' Y
Dim Part As Object( C3 k' C* n9 y
Dim boolstatus As Boolean
- U! b6 h. k: y, C5 s Dim longstatus As Long, longwarnings As Long
7 N4 \% c5 y9 i* h, M' ]2 i& H! s- I- K/ I) ^9 g0 Q4 ^
, o1 m. w' t7 r; e! S8 p4 ?: X
Set swApp =  Application.SldWorks
4 D9 Q  r$ {# K; V4 j7 T, B7 O6 x4 O: X
Set Part = swApp.ActiveDoc
& i' z$ Q5 K1 n9 I9 E( c/ ~
/ k' ~$ D  {8 o* D( |+ ~ Dim f As String, folder As String) {- G7 ?: g. S6 b4 z# K
folder = "E:\F\CU\Feb2014\5mm\01\"
) {. \7 Y( W3 W' q2 D f = Dir(folder & "*.txt")
1 F: T. x6 F, i While f > """ \( t* u4 V" d# s
Dim x, y, z As Double # d0 w' Z, Z0 h* g6 S8 y3 ^- y1 Y# s
Dim n As Integer   * A& Z* l/ ~+ X4 z: k) w
Part.InsertCurveFileBegin: c5 {) z1 p! @+ P( t
Open folder & f For Input As #1: J8 e5 ]" H0 W* y% ?' }; F
     n = 08 i4 W+ T8 F( v& x/ U4 t3 S( N+ o
     Do While Not EOF(1)
0 o0 S" c3 y  v& ?0 B1 H' L          Input #1, x0 n0 \! S6 I0 _) N) [
          If EOF(1) Then
( v' i3 U4 |+ D5 B- Y3 X  ]8 B! H          Exit Sub
' b3 a: ^7 O( F3 `2 p          End If
% P8 e2 @+ F/ R% L: C7 y3 }          Input #1, y
& L! a4 i; X& V* R# M" |          If EOF(1) Then) W* J4 f9 \9 v% E! n6 Y
          Exit Sub
4 I0 x- m6 B4 X3 a1 ?2 s          End If
; E4 I" s9 K: y7 B% c0 \0 {; h          Input #1, z
3 e# p3 G, a7 Z          n = n + 1) k# a+ x$ |/ R
        Part.InsertCurveFilePoint x, y, z
) |- q" Z4 M7 r* E% f     Loop
6 t. e+ G) k) R4 p2 u# z2 J9 g    Part.InsertCurveFileEnd
3 V/ O9 }; g  T9 r* b: D1 _! J Close #1   
/ }) e: f( x" _% O- }1 l$ Q2 u    f = Dir
2 Y1 B2 m5 X$ A! d Wend
% M$ F7 T$ ^; w. _. `- ~' [8 REnd 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
/ \0 G0 ^1 ?# l1 U# F还请高手指点啊,这个问题困扰我好久了
2 m/ W, M* ~) g5 m
1. TXT檔用連續不跳號之數字取名稱如 1.txt,2.txt ....,就可以配合  For Next 之 i 值,抓取全部的 TXT 檔./ _! p' j9 w$ B" C1 k6 ~
2. 把 全部的 TXT 檔 置放在須要的文件路徑下.
9 V3 a/ \0 Y2 `2 V3. 先開SW的零件檔,執行如下宏,會在零件檔新插入3D草圖作出全部的 TXT 放樣曲線圖./ _/ w: @: R6 K& W8 V
4. 附檔是兩個測試檔 1.txt,2.txt 可以試看.8 w; M- V7 h: \+ H8 i% [
# O0 }& L$ ^: L: C: |4 H" Z. e- V
測試圖9 y$ z4 m9 z3 l- Y
capture-29.gif ' r9 N6 A7 [* h1 D9 D9 k1 T
Sub main()5 A9 ?/ s# {9 M) t, J( B
Dim swApp As Object, _2 ^( K' l1 F( Q" D
Dim Part As Object& j2 V, C% C. m; h" J5 M
Dim boolstatus As Boolean
9 V( ~9 A) e; _4 lDim longstatus As Long, longwarnings As Long
. D, ^8 Y+ d: }Dim SketchMgr                 As Object7 d$ c% Q7 r: M8 x
Dim pointArray As Variant3 R0 N8 c' ~, t+ V0 h
Dim points() As Double  H9 C3 e* r0 {, F3 d3 e
On Error Resume Next5 ^7 o) I& v5 P) S* G
Set swApp = Application.SldWorks3 F, L' P1 c3 b  j- y8 l6 c# z
Set Part = swApp.ActiveDoc+ n' H' R% J1 x) P4 {: S
For i = 1 To 2: K+ `! q2 A' T$ [' C: ?4 b
    Dim f As String, folder As String9 H4 x3 G# H2 E1 X- I  C& n8 F; o
    folder = "E:\F\CU\Feb2014\5mm\01\"' m8 U: }2 ~5 j  ]! K' x
    f = Dir(folder & i & "*.txt")9 ~6 k$ W: C8 w8 S; B0 s: s
    While f > ""' o5 D. o$ P) Y& X
    Dim x, y, z As Double& ?7 I* B0 Z+ @- T# f
    Dim s6 f- a% S9 s* m5 B0 L' X* v* c
    Dim n As Integer$ v; x: g6 _0 T. }4 ^: F: s
    Open folder & f For Input As #1
9 Y* t1 P- g1 V* Q    n = 0
3 w; G8 C* c6 Y0 f* H+ \    Do While Not EOF(1). @1 B2 Q* |) w+ G
         Line Input #1, s5 ]: n5 C2 L! n' d  R6 W5 u8 G
         n = n + 1
$ o9 m0 ~9 t1 r" a; g; x    Loop/ r: p* F' t) r% B* U7 v
    Close #1- |1 s" q. C. h# f! {( F+ H6 N
    Open folder & f For Input As #1
. E% v$ x) h4 C( a    Set SketchMgr = Part.SketchManager3 W4 t& A' ^8 M6 Z5 b# a* @
    SketchMgr.Insert3DSketch True0 o! g( \% ^1 W; M# T: }
    ReDim points(1 To n * 3) As Double
0 u6 p! n" Q; z6 z: I    n = 03 I4 R* Z+ Y2 T7 m7 U
    Do While Not EOF(1)& v- B7 o9 i, ~1 v0 b
         Input #1, x. c/ c9 B$ m& o$ Q0 p/ }+ h
         points(n + 1) = x / 1000, ~4 t1 Z  c0 G( c- H
         If EOF(1) Then
5 w, {1 v& M! x: S0 @         Exit Sub
3 i( s/ Z& _; r. A7 p2 m$ r         End If) V! `9 }+ X) p5 z! j4 X
         Input #1, y
$ E8 }7 K! b9 y; z         points(n + 2) = y / 1000
! d' }6 B4 ~& Y- k         If EOF(1) Then* D8 W6 s. A: V5 @7 Y$ l& {
         Exit Sub' S1 [3 P& I3 R1 x/ c
         End If/ ]7 ?0 x& ^5 {
         Input #1, z9 n( S; I9 A9 K2 B
         points(n + 3) = z / 1000* B( i" h( b& V( S
         n = n + 3  H+ Z; m. \! @, ~, \& F
    Loop& ~& |7 w7 X# P+ W
    Close #1! x# v  ]# c* \
    f = Dir
8 l+ n- w5 W# b; e& u7 |3 W    Wend
( E; P. k3 j# X& _/ r    pointArray = points
# B0 r* T6 i5 V7 T! S    Set skSegment = Part.SketchManager.CreateSpline((pointArray))) z' s- ]; S% M( F) T3 s
    boolstatus = Part.EditRebuild3()( k" ?0 o/ w4 k
Next  e/ o7 d0 t2 R, v) n' |: |
End Sub
% g% ^9 h: ?* O) X+ l, l/ u
! Q( [) r4 j' L5 @3 J' w7 f 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 编辑 5 Q0 a1 I* w/ p, y$ R0 O
/ ]5 ]& [( D' ]7 z  ]5 ?
沒試不知道" o. ~0 L0 D' b& s2 S1 g! M7 E
試看再說了,有問題再讨论.
6 |7 u% m2 o# O# A若有跳號要繼續執行就在  3 g+ r; T2 b% P. O  _
While f > "" 之上,插入 If f = "" Then GoTo aa) b  Q8 a$ ]. i3 f& D4 @
boolstatus = Part.EditRebuild3() 之上,插入 aa:) E8 H3 a4 E/ b) J5 ?+ X
( a  o6 ]; r" m6 x7 C: c: ]( ]% {

' O; Q9 s& y7 W) k  e# |9 X

评分

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

查看全部评分

 楼主| 发表于 2014-3-11 10:35:03 | 显示全部楼层 来自: 中国吉林长春
http://C:\\Users\\Alex Wang\\Desktop\\01
2 E! \5 m% q$ L- ~: q5 x9 d程序执行之后,显示的有草图,有3D草图,检查数据也没问题。
 楼主| 发表于 2014-3-11 10:36:34 | 显示全部楼层 来自: 中国吉林长春
贴图失败
发表于 2014-3-11 10:43:23 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 10:47 编辑 ! W0 d8 J( r% U! l
bj-alex 发表于 2014-3-11 10:35 static/image/common/back.gif* G+ v# w2 P3 m4 K# O0 `: e
程序执行之后,显示的有草图,有3D草图,检查数据也没问题。

' F0 H# W5 Q. `/ s( x显示的有草图,是前3d草圖作完沒跳出3d草圖的編輯狀態,就繼續作第2個文件.1 M+ P8 w. d# e/ g& p' Y6 U
正常是作完3d草圖用  boolstatus = Part.EditRebuild3() 重新計算 跳出3d草圖的編輯狀態.
& I- d2 w! a- F' h是用3#附檔文件測試的嗎
3 A- f. m/ y! \$ U3 t
; k$ {- Y5 R" A6 n+ i( Z

评分

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

查看全部评分

 楼主| 发表于 2014-3-11 10:50:50 | 显示全部楼层 来自: 中国吉林长春
是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或者,加个延时。
发表于 2014-3-11 10:59:31 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-11 11:00 编辑
. _: n. t; }% C, C; ^+ o4 S
bj-alex 发表于 2014-3-11 10:50 static/image/common/back.gif
( d1 S9 @  R0 ?# `是用3#附件测试的。这么说,还是两次循环之间时间间隔太短。我可以把比一般文件大的多的挑出来,再试试。或 ...
3#附件,我測試是正常
# _$ \* @4 Q1 ^% D4 [  d在 boolstatus = Part.EditRebuild3()  之下, 補上如下作緩沖看看
& I' G, ]) Z4 E5 A* o  {; gDim myModelView As Object
! B3 N5 m8 c% @/ k9 u& h. p- WSet myModelView = Part.ActiveView: X) I4 [8 z! A$ ?
myModelView.RotateAboutCenter 0, 0" _& r5 t  [$ M

评分

参与人数 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  @! u5 }5 n$ q: K  x' F1 `
还是不行,我用附件中的数据测试的。您试试?我一次之选了10个文件。
9 @9 m2 T! d! c3 W9 \; g
如下有誤
& L( A/ g, L( X, G* F5 h' hf = Dir(folder & i & "*.txt")
3 _6 _, z; H$ x* J把  *.txt  改為  .txt (拿掉  * )2 v  [5 f% H- O( B
另來檔沒 5.txt
; |! q  e3 d' g6 ^) E! Q7 ^) U! k  a' [+ D/ V3 R
測試正常
& a2 c# q# M0 T( [0 ]9 u: Q 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; I9 p3 y: D  h  {
我故意把5拿掉的,是想测试下i值不连续的情况。

! C# I$ ?. a1 ]* W3 T有跳號處理就參考5#的解決方法
 楼主| 发表于 2014-3-11 12:02:48 | 显示全部楼层 来自: 中国吉林长春
程序运行正常!非常感谢ryouss的无私帮助!& c9 @) M. g4 {  x0 D* V" |
我在想,如果写个宏,一次只输入一条曲线。然后再用另一宏循环调用它,这样也许可以解决文件数太多时,容易死机的情况。下午有空试试。
- A" @; T$ `1 j: s* u6 [+ k4 u另外,再试试使用InsertCurveFile函数。! Y4 f+ l1 J+ G& s+ S  s. t' {6 Q
再次感谢ryouss!!
发表于 2014-3-11 14:30:38 | 显示全部楼层 来自: 中国浙江嘉兴
1~500 約跑12分鐘9 D: @3 M1 R; }# f" f  s5 W
6 w3 D6 I0 m& w$ C/ L/ _
capture_03112014_142755.jpg
 楼主| 发表于 2014-3-15 10:20:56 | 显示全部楼层 来自: 中国吉林长春
本帖最后由 bj-alex 于 2014-3-15 17:32 编辑 + x# L; u# X* r, f' H2 g& _8 p7 y! |; n- r
ryouss 发表于 2014-3-11 14:30 static/image/common/back.gif$ r  u4 w5 j$ R& f) a
1~500 約跑12分鐘

( O- ]. c, O( U我现在已经将数据都导入了,形成了曲线,非常感谢您的指导。, \; |; `7 {8 O5 k: ~# i3 r
另一个问题来了,这只是一层的数据,我还有很多层同样的数据。现在需要在对应位置的曲线,在垂直方向上连接成曲面,就是形成一个垂直的圆柱面。我用放样曲面,再选中两层的两个曲线,形成不了曲面啊。
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分钟。但是,无法编辑曲线。; s* t$ c# K" ^
用3D草图导入txt文档,虽然耗时,但是可以编辑曲线。* ?+ T, z/ T- G' ~7 p5 L
另:3D草图导入的曲线,无法使用放样曲面。) z9 F* L' ?: E1 k5 x8 Q
txt.jpg
发表于 2014-3-15 20:40:45 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-15 20:42 编辑 ' d* M/ g+ R% @3 I9 \( C
bj-alex 发表于 2014-3-15 17:17 static/image/common/back.gif
9 F/ V' b$ J& g# V* G6 K4 Z在原来程序之上修改,用insertcurvefile函数导入800个txt文档,只需要3分钟。但是,无法编辑曲线。
0 X! y& Z# a; g/ B' f  X1 x, b用3D草 ...

1 G  S6 C( i& p. F$ Y2 m) V2 D生成的草圖是能夠做放樣曲面,% L* R1 D, e8 V" @4 W- o+ O
應該是第一層和第二層的點沒對應吧
" `; k2 W& j9 n$ w& X3 `7 u8 o9 M2 _% z! f3 L
Clipboard01.jpg
9 _* b6 h. x; y. U% \3 f2 F" y: |% p5 }  h1 v+ H3 m  G
3D草圖5是你提供的第6檔,3D草圖10是依據第6檔做對應點的放樣曲線,因點有對應就可以做出放樣拉伸曲面.  F4 f& i0 T* H7 y8 q
capture-1.gif
 楼主| 发表于 2014-3-18 14:44:45 | 显示全部楼层 来自: 中国吉林长春
ryouss 发表于 2014-3-15 20:40 static/image/common/back.gif3 Q- Y$ X, e" \5 ?
生成的草圖是能夠做放樣曲面,3 t( s% x. L4 |, E9 n, _! f
應該是第一層和第二層的點沒對應吧
1 v5 a) E% E: v& D, ~2 K1 t7 R% s
如果是两个同心圆呢?只是一个大,一个小,却没有一个对应点,这样也做不了放样曲面?9 Y. j. A( s  d2 S* M; I
除了这种办法,还有没有其他方法,生成曲面?
发表于 2019-10-20 19:21:57 | 显示全部楼层 来自: 中国福建福州
两位好强,解决了我遇到的问题
发表于 2020-7-8 22:47:10 | 显示全部楼层 来自: 中国四川成都
两位高手非常强,我非常佩服,在你们宏文件的指导下,我依葫芦画瓢做了“宏”,批量做出了31条沿齿高方向的齿面曲线(31条曲线曲面放样是面齿轮的齿面,齿高方向就是沿坐标的Z轴方向。31条曲线的坐标点是在Excel里用VBA"宏"算的)。见下面几张图
. u& D5 Y0 y8 ]/ _- h5 [
( c& g/ }6 Q4 o4 z* `- S
& Z! x# r" n& {8 [! _6 m. a" V) x) m1 O  f/ Q: `. v

8 o6 k! e" z. u  w面齿轮全貌% h$ E' n4 b0 s% {* J( e" P' x

. c$ s! J+ `" i: ?4 w* D  W
! l" h( W8 @- u( R8 k7 s: ^  t, R面齿轮与直齿啮合3 d& `; e2 Q( c8 @5 S

0 F: S1 l4 ], ^. L# M$ y- v/ I0 a# c6 H! f  h; b
现在,制造方采用数控机床按曲面加工面齿轮的齿面,要求有沿齿向的曲线坐标点,见下图* d$ D6 M6 A4 r; |* F

* C4 x5 S# G0 Y& L# t- ~5 c+ {
: z  k8 E& _) [  {4 l& a. y  D
! a& f5 a4 v9 _0 N3 @+ Y3 G4 G7 Z  s

3 H) U. [5 u/ B3 ]4 i$ N
发表于 2020-7-8 22:49:30 | 显示全部楼层 来自: 中国四川成都
怎么图片都没传上来?重新再传
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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