机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 592|回复: 3

SW关于输出曲面点阵到txt文档的宏代码

[复制链接]
发表于 2023-11-4 18:14:37 | 显示全部楼层 |阅读模式
本帖最后由 oy87188 于 2023-11-4 18:45 编辑
0 k; ~! S6 `- \" l8 \# Q* y9 w5 H" A' b
尊敬的各位大佬,本人是SW使用的小白,最近在调试SW的宏代码时,想通过宏代码将曲面上的点阵输出到txt中,从而方便后续处理。但是遇到了如下的问题:显示对应变量未定义,还望各位大佬多多指点一二?
- E0 m! ~% z9 o& i3 i! g附上对应的代码如下:(压缩包内为swp文件)
2 v2 ~8 U3 V( T' H% i7 j
) }5 [) u# [) A9 L4 ^! v( B" C* `, r& p' T; s# P1 X1 n

, |1 {: o4 N2 K7 o/ a- A' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ e: x* M. a; N7 G0 _9 b  p' 输出曲面上某些点到Txt文件中/ q5 T0 W2 J  q8 `
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# J  k0 b5 g. i. aSub main()
- p9 w. ^. Z' j! ]% }    Dim swApp As SldWorks.SldWorks
3 J2 E( }9 y9 r  I    Dim myModel As SldWorks.ModelDoc2
5 ~! i8 g& Y- \3 |$ h7 T# \! }  T2 e    Dim mathUtils As SldWorks.MathUtility5 A) W$ \" n; i5 [* J/ ~
    Dim nStart As Single
0 M% Q: ]% b1 s2 Y; D& F( U5 C0 O        nStart = Timer
9 A3 v& v( Z& z* E! G. B    Set swApp = Application.SldWorks; Z* P- P+ B$ Y, i
    Set myModel = swApp.ActiveDoc
( z( x3 W7 g! `) ^6 B    Set mathUtils = swApp.GetMathUtility()
# \  c7 u) Z7 \1 S7 T1 U    ' 以下遍历22x22个投影点6 v# l- M! ^" Q: o' f2 F
    Dim i As Integer. j, e6 B7 [) h& J# C
    Dim j As Integer8 o* V7 R5 K+ m$ y
    For i = 0 To 21
0 |% I; W$ ~& o4 _" x7 ~7 r- d% M    For j = 0 To 21
# U, B6 i; B- D4 O9 G: E    ' 预先指定一个被投影面' d. h3 T1 y4 o" ~
    Dim mySelMgr As SldWorks.SelectionMgr) h& v" Q- J9 ?7 S* h+ N2 ]
    Dim selObj As Object
3 R2 Y# s! P4 A0 \; P7 b% i" |    Dim faceToUse As SldWorks.Face2
2 Z& o6 o4 T% [; `    Dim surfaceToUse As SldWorks.Surface
' i# W- h8 t7 Q2 Z2 k. H    Dim selCount As Long
8 b; X+ {* o( F1 {6 ^4 v9 O    Dim selType As Long
2 o! F0 r: ^/ G/ N5 b1 i    Set mySelMgr = myModel.SelectionManager7 ~$ B0 z6 E5 M: f, w9 F' p
        selCount = mySelMgr.GetSelectedObjectCount2(0)) l4 \4 U4 c8 h9 H7 W* u
        If (selCount > 0) Then2 L+ \9 k& Z0 }" B
        selType = mySelMgr.GetSelectedObjectType3(1, 0)
  k  d! L, H# n( G$ i1 b    Set selObj = mySelMgr.GetSelectedObject6(1, 0)
) t  o; ^" e" }& P4 ~        If (selType = SwConst.swSelFACES) Then; I( }5 i. U3 [: O
        Set faceToUse = selObj/ C# N; s# p! g" D" v0 g
        End If. N! G. ^/ r0 v( q8 f% q9 j
    End If
3 y5 O  T) [% u' X0 J    ' 定义投影向量
, T( A) T% `- h, P; ~  y    Dim basePoint(0 To 2) As Double, rayDir(0 To 2) As Double: f5 i* [/ z1 h0 P9 N3 b* l
    Dim vBasePoint As Variant, vVector As Variant
: i& y1 y8 ?" y' [3 X    Dim rayPoint As SldWorks.MathPoint, rayVector As SldWorks.MathVector6 R% D- W# |% W2 L# J
    Dim intersectPt As SldWorks.MathPoint# o6 E$ I4 f3 w1 I- }8 k
    Dim vPoint As Variant, vPoint2 As Variant. ?3 Q* e4 ~' ~
    Dim xPt As Double, yPt As Double, zPt As Double
1 S4 h0 f1 U: ]/ O/ Q    ' 先对曲面的情况进行投影; First try the face
; n7 C& h. _) h  q" p" |        If Not faceToUse Is Nothing Then1 t: K2 C7 y. \/ r( ?' \/ @$ ~0 o, l
        basePoint(0) = i * 0.125 '
3 l0 ?9 _) r6 n) {, o        basePoint(1) = j * 0.125 '# [, n; E* b( l/ ]
        basePoint(2) = 1#
' I) H, q; k- F( W        vBasePoint = basePoint% Q. {  O# s5 G
    Set rayPoint = mathUtils.CreatePoint(vBasePoint); T5 F# H0 }2 S9 G
        rayDir(0) = 0#
1 l& B7 i3 v2 O7 \        rayDir(1) = 0#
. n% o* a* Y" j: a; J        rayDir(2) = -1#
4 Z  U/ s* V) [6 L: D  u$ V        vVector = rayDir3 ?) S% I  S5 E- q
    Set rayVector = mathUtils.CreateVector(vVector)
- B  Q0 W- w4 @7 t% H8 Q    Set intersectPt = faceToUse.GetProjectedPointOn(rayPoint, rayVector)* v; O, f" R; j' B' ~
    If Not intersectPt Is Nothing Then& G  w: t" h/ e, C. e
        vPoint = intersectPt.ArrayData" }( e6 t2 f/ t7 k8 k6 q6 }) M+ H! B
        xPt = vPoint(0)
7 Y5 l- r1 b( O" C; i- z0 P: W        yPt = vPoint(1)
& C$ N) ]3 n6 y$ e; g        zPt = vPoint(2)* m$ q1 p6 g' O) t" n
        清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(xPt * 1000, "##0.0#####") & " ,", E' O" k) F6 b6 @- F3 C

8 x6 n$ Z( Q( m8 j- s        清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(yPt * 1000, "##0.0#####") & " ,"
) y- u7 ]# x) m& ^; j% E# Q3 u0 q. W
        清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(zPt * 1000, "##0.0#####") & " " & vbCrLf
9 n1 W1 b8 L* z* [6 w' W- M    Else
/ A7 f  V7 b# n- \. c# x; f& E        清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(zPt * 1000, "##0.0#####") & " " & vbCrLf    '(j * 125, "##0.0#####") & " , 0" & "   " & vbCrLf '控制是否输出未投影到曲面上的点位 " No face hit point."
( G$ G5 h$ O: [2 B. P7 `      End If4 h0 T8 R8 d: G% |; @& k& T
    End If1 g9 G8 Q4 _. B
    Next j4 }0 |# C0 v# U! R% S. I3 l
    Next i. ?# C0 \! O6 O/ o5 r
. g" u) E. g4 t
    清单输出窗口.计算耗用时间.Text = Round(Timer) - Round(nStart) & "秒"
( s1 a* O9 ~- `: c& Q  ?    清单输出窗口.Show
/ V  _& |% g* F1 V0 `$ gEnd Sub
( k  l0 z+ t# r2 z" V
( ~/ l) l! p, y5 L: nPublic Sub Delayms(lngTime As Long) '延时程序调用-测试时用
, X- V% i" b1 zDim StartTime As Single
: @& @$ D  ^5 I( U/ Q+ eDim CostTime As Single
% L  B, ~# Y4 r2 r3 C5 YStartTime = Timer/ k) a8 e6 X  s$ |& i
Do While (Timer - StartTime) * 1000 < lngTime
, |* X, Y# y  UDoEvents
# g2 j4 @$ g/ nLoop6 o  H4 K  [" e8 ^* |
Set swApp = Application.SldWorks$ l9 C- j7 u4 T: h+ t$ ~
End Sub
3 J3 ^% c7 p1 j0 l
1 S  s% k" x4 H2 y- s: R& j5 }* h
0 c& Q3 o/ [8 d# L! n$ G' k" E! K% G* ]* T

+ j; z1 K, t  S/ ?2 Z1 I* n$ M

本帖子中包含更多资源

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

x

评分

参与人数 1威望 +1 收起 理由
喂我袋盐 + 1 支持技术贴

查看全部评分

回复

使用道具 举报

发表于 2023-11-4 20:05:51 | 显示全部楼层
支持
回复

使用道具 举报

发表于 2023-11-5 08:20:35 | 显示全部楼层
盲区
回复

使用道具 举报

发表于 2023-11-5 16:57:57 | 显示全部楼层
牛逼,这是什么东西?你们这时solidwork直接对接生产吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-4-29 10:17 , Processed in 0.056048 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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