QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4084|回复: 7
收起左侧

[分享] 按设计树顺序遍历装配体

[复制链接]
发表于 2020-4-10 21:33:49 | 显示全部楼层 |阅读模式 来自: 中国江苏苏州
安装
主题分类用于问题归类:

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

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

x
本帖最后由 秋韵舞-江枫 于 2020-4-11 23:31 编辑 + }  t6 {. I3 G

2 D! u3 T$ u4 p9 o: j     完整按设计树顺序遍历装配体代码,此代码为VB.NET编写。可以在此代码中添加功能代码后可实现特定功能。0 g$ r) i, s" |
( G4 V! w" h3 d/ `4 v9 Z
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2 @/ x% }$ v* W3 R0 I6 z9 `
  2.         Dim swApp As SldWorks
    ! }5 m3 T) Q: X$ r( |1 K( F( p
  3.         Dim swModel As ModelDoc2
    8 y' h+ W: f2 t7 L+ v
  4.         Dim swPrOPMgrs As CustomPropertyManager
    0 Y! p) m0 A5 ~. o3 j
  5.         Dim swConMgrs As ConfigurationManager5 _4 l) a+ V: j& C; I
  6.         Dim swConfigs As Configuration7 B. B5 w5 {3 Z$ y6 {
  7.         Dim swGetType As String
    , ~1 D3 x- p. o& B- Z5 t% j+ i  x; C( Q$ n
  8.         Dim swFeat As Feature/ L6 G" l. x' f! y2 V
  9.         Dim swChild As String% G$ d% U, a# R; s4 ?' r
  10.         RichTextBox1.Text = ""% x7 M+ h5 m' [: F
  11.         swApp = GetObject(, "SldWorks.Application")
    / T4 d) S  s( u7 d$ i% A: q
  12.         If swApp Is Nothing Then
    7 x% v8 Q: A. D# c" T) e% b; A
  13.             MsgBox("请您在运行本程序前先运行SOLIDWORKS!")
    7 J% L+ V: R; r  `2 s; K9 U
  14.             Exit Sub
    " t" o: L" J6 f
  15.         End If6 n" B  u, @  A2 j4 q, |
  16.         swModel = swApp.ActiveDoc* `6 P/ Q" O6 s, F! \. O( _6 ]
  17.         If swModel Is Nothing Then
    , K4 }/ @5 }- N$ ?( ?$ F$ u
  18.             MsgBox("请您打开模型后再运行!"): H* x9 R" B, `) m+ z7 b/ r
  19.             Exit Sub
    / ^, k( K1 U/ U6 E- G
  20.         End If( f- H# E& r$ Z2 M9 U$ `; _/ O
  21.         If swModel.GetType <> 2 Then
    2 n! e- p* [: K7 A5 b! h  P. ?, M9 i, p8 j
  22.             MsgBox("请您打开装配模型后再运行!")
    & b: d7 ]' d2 n, u7 E
  23.             Exit Sub6 p% j% n( ~/ I( l9 X
  24.         End If; o8 D7 g" f" q9 N/ V2 U9 T6 y
  25.         swConMgrs = swModel.ConfigurationManager '获取配置管理器
    7 ^4 K7 i& A; W  n
  26.         swConfigs = swConMgrs.ActiveConfiguration '获取活动配置/ B- J9 R/ q2 K, u0 |* [( m
  27.         swChild = swConfigs.Name '获取活动配置名, Y9 j4 q. h, f, `; T- _
  28.         swPropMgrs = swModel.Extension.CustomPropertyManager("") '获得自定义属性6 P( n( o) \8 ?: u! G
  29.         'swPropMgrs = swModel.Extension.CustomPropertyManager(swChild) '获得配置特定属性( x/ W& Z& [6 M
  30.         swGetType = swModel.GetPathName '获取此文档的完整路径名,包括文件名9 C9 I( r! C+ X
  31.         RichTextBox1.Text &= swGetType & vbNewLine' \9 U1 c: c2 b5 Q1 F5 F4 D% A' j
  32.         swFeat = swModel.FirstFeature
    - M/ j' j1 l( J- \
  33.         While IsNothing(swFeat) = False
    8 N' m" q9 p1 v6 L, J
  34.             Select Case swFeat.GetTypeName2
    ( D; N' u& ~* C$ d% C. }9 H
  35.                 Case "Reference", "ReferencePattern" '排除镜像及阵列模型( r% R( S/ S: E& o  [
  36.                     Throughs(swModel, swFeat.Name)1 T1 X; V& k; M( Q
  37.             End Select* h& i) @5 D9 y- r( f* R
  38.             swFeat = swFeat.GetNextFeature' W2 X2 G  u+ J( d* v
  39.         End While
    4 W/ D, ~8 {% j1 ?* o& U4 D1 C
  40.     End Sub
    : K( F- i9 w" T+ V/ r
  41.     Private Sub Throughs(ByVal swModels As ModelDoc2, ByVal swPartName As String)* n7 \5 M# ^  Y% A& p9 S+ D
  42.         Dim swComponent As Component2$ L1 l: C3 d9 g0 u: r+ K
  43.         Dim swildMode As ModelDoc2
    $ |7 l5 H1 o. |0 @/ f( t2 U8 v
  44.         Dim swPropMgr As CustomPropertyManager
    5 B9 G  l% r6 ?$ L8 _/ o, Y# R# `
  45.         Dim swGetTypes As String
      C/ d8 P' x" g6 ^% `
  46.         Dim swFeature As Feature
    : F# Q9 x4 `+ K8 h9 B9 I
  47.         Dim swChild As String6 {8 Y. F7 L" I. s, I6 J
  48.         swComponent = swModels.GetComponentByName(swPartName) '获取指定的顶级程序集组件
    $ ]" [. H4 D/ l% h* E, @, x
  49.         swChild = swComponent.ReferencedConfiguration
    1 }6 N6 w3 V8 ]# v- S' J) t& |
  50.         If swComponent.IsSuppressed = False AndAlso swComponent.ExcludeFromBOM = False AndAlso swComponent.IsEnvelope = False Then '排除是否被压缩、不包括在材料明细表中或封套的模型' Q, m/ `2 N+ t( z" p# B9 e" b
  51.             swildMode = swComponent.GetModelDoc2 '获取此组件的模型文档
    : D/ A# v( L. [1 ~
  52.             swGetTypes = swildMode.GetPathName '获取此文档的完整路径名,包括文件名" \" f% w' L3 j% `% r
  53.             RichTextBox1.Text &= swGetTypes & vbNewLine
    * P& R) {. `. e
  54.             swPropMgr = swildMode.Extension.CustomPropertyManager("") '获得自定义属性% [# K5 \- x" `  c/ G
  55.             'swPropMgr = swildMode.Extension.CustomPropertyManager(swChild) '获得配置特定属性! e* e. g( ^2 c3 h* p# u; ]- V
  56. 5 b4 \# ?! n, q0 X, d
  57.             '..............
    6 w+ Q# v- n# p& B
  58.             '..............5 Q! V# g+ z' o- w) F
  59.             '..............8 u  ~8 R6 V/ y4 x+ z
  60.             '..............添加你要处理的代码
    0 P% ?+ Z. |+ H  J) F

  61. % ^" v7 R& o  r( c

  62. 3 ~& F+ d- g: t4 y2 q
  63.             If swildMode.GetType = 2 Then '获取文档类型,是否是装配文件
    , J4 M4 o- ~$ U% B  j! P
  64.                 swFeature = swildMode.FirstFeature '获取此组件中的第一个模型
    # G$ G2 n/ B: `# h
  65.                 Do While Not swFeature Is Nothing '如果模型存在, 模型循环此模型
    4 F9 `0 t9 f" v6 J# g
  66.                     Select Case swFeature.GetTypeName2
    ( i/ w) [- V# B, \; q$ t4 p3 [: d
  67.                         Case "Reference", "ReferencePattern"9 f2 X% w$ @' U
  68.                             Throughs(swildMode, swFeature.Name)
    * {' k! u/ n* D/ ^
  69.                     End Select( m4 u, W: m6 k1 l2 g% o
  70.                     swFeature = swFeature.GetNextFeature* c- u: o# ~+ z) [) r
  71.                 Loop
    4 d: k3 z+ e( @& `) A: X
  72.             End If2 v2 x6 `6 i4 e  N* s: {
  73.         End If0 L2 Q* O+ m) Z. y/ ^1 B, P
  74.     End Sub
复制代码
5 o2 ]: `# l' t* }& s5 q0 b, v/ a. X( _

评分

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

查看全部评分

发表于 2020-4-11 07:50:30 | 显示全部楼层 来自: 中国山东威海
本帖最后由 che-zp 于 2020-4-11 07:53 编辑
, i5 C9 |$ D/ v$ Y, a; v4 u" M: r( [' `: O7 i6 e
遍历设计树 解压错误
 楼主| 发表于 2020-4-11 08:21:36 | 显示全部楼层 来自: 中国江苏苏州
应该是论坛的问题,我上传的时候提示如下图,后来我自己也下载解压一下,确实有问题。
# D$ _" _) E% w5 J0 g; j! {7 T3 p QQ截图20200411081657.png 1 J7 v0 i# F9 G% Q2 \( l

  q: o9 K% v+ t% j, j5 F* h
; T% M% `6 o$ {9 ?9 P# L! |4 B! l2 m5 p- u

4 Q; s2 K) s) q. r
6 S- L  D3 H& |4 n
QQ截图20200411081657.png
发表于 2020-4-11 08:28:30 | 显示全部楼层 来自: 中国山东济南
学习一下,感谢楼主的分享。
发表于 2020-4-11 22:17:07 | 显示全部楼层 来自: 中国广东揭阳
感谢楼主的分享,学习一下。
发表于 2020-4-22 12:00:20 | 显示全部楼层 来自: 中国重庆
本帖最后由 努力到无能为力 于 2020-4-22 12:01 编辑
+ X+ ^& l  c7 X, L* B
* Z: e" x/ X0 @! ?: w! N没有明白啥是”遍历装配体“的意思,怎么用的。但感觉好高大上!
' p! a. i! p, i
发表于 2020-4-26 17:38:34 | 显示全部楼层 来自: 中国广西桂林
谢谢楼主!膜拜
发表于 2020-7-25 18:40:02 | 显示全部楼层 来自: 中国江苏常州
谢谢楼主分享
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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