SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2409|回复: 5
打印 上一主题 下一主题

关于遍历特征树问题!

  [复制链接]

5

主题

13

帖子

66

金币

天使

Rank: 2Rank: 2

积分
184

最佳新人

跳转到指定楼层
楼主
 楼主| 发表于 2019-2-27 15:27:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

   经典图书
Solidworks二次开发,遍历特征树,为何装配体中子装下面的零件无法遍历到?拿第一个子装看,只能遍历到Tolva Mezcladora,其下层零件Tolva Mezclado 和 Paletas都无法遍历到。我知道这段代码不是完全遍历结构树,但是应该可以遍历到第一个子装配下的零件才对。
               iModelDoc2->IFirstFeature(&swFeature);

                long sonID, fatherID;
                while (swFeature) {
                        fatherID = 0;
                        swFeature->get_Name(&strFeatureName);
                        swFeature->GetTypeName2(&strFeatureType);
                        swFeature->IGetFirstSubFeature(&swSubFeature);
                        swFeature->GetID(&fatherID);

                        while (swSubFeature) {
                                sonID = 0;
                                swSubFeature->get_Name(&strFeatureName);
                                swSubFeature->GetTypeName2(&strFeatureType);
                                swSubFeature->GetID(&sonID);

                                CComPtr<IFeature>  swNextSubFeature;
                                swSubFeature->IGetNextSubFeature(&swNextSubFeature);
                                swSubFeature = swNextSubFeature;
                        }
                        CComPtr<IFeature>  swNextFeature;
                        swFeature->IGetNextFeature(&swNextFeature);
                        swFeature = swNextFeature;
                }

微信图片_20190227152628.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

9

主题

145

帖子

858

金币

传奇

爱学习的版主

Rank: 8Rank: 8

积分
8026

最佳新人活跃会员热心会员宣传达人灌水之王

QQ
沙发
发表于 2019-2-28 08:07:51 | 只看该作者
不能帮到你,对C不熟悉!
终究还得自己做自己的主角,所以必须坚强走下去。
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

5

主题

13

帖子

66

金币

天使

Rank: 2Rank: 2

积分
184

最佳新人

板凳
 楼主| 发表于 2019-2-28 11:21:30 | 只看该作者

   经典图书
suzhanpeng 发表于 2019-2-28 08:07
不能帮到你,对C不熟悉!

多谢关注!后面可能会转战VBA、C#,以后可以多交流
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

87

帖子

229

金币

堂主

Rank: 4

积分
506
QQ
地板
发表于 2019-3-1 16:08:37 | 只看该作者
顶一下,坐等高手!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

111

帖子

3

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
366

最佳新人活跃会员热心会员宣传达人

5#
发表于 2019-3-29 20:21:43 | 只看该作者

   经典案例图书
不能帮到你,对C不熟悉!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

20

帖子

22

金币

天使

Rank: 2Rank: 2

积分
104

最佳新人

6#
发表于 2020-3-30 11:23:21 | 只看该作者
vba的代码供你参考

Sub OutputCompXform _

( _

    swComp As SldWorks.Component2, _

    nLevel As Long _

)

    Dim vChild                      As Variant

    Dim swChildComp                 As SldWorks.Component2

    Dim sPadStr                     As String

    Dim swCompXform                 As SldWorks.MathTransform

    Dim vXform                      As Variant

    Dim i                           As Long

   

   

    For i = 0 To nLevel

        sPadStr = sPadStr & "  "

    Next i

   

    ' Null for root component

    Set swCompXform = swComp.Transform2

    If Not swCompXform Is Nothing Then

        vXform = swCompXform.ArrayData

            

        ' Root component has no name

        Debug.Print sPadStr & "Component = " & swComp.Name2 & " (" & swComp.ReferencedConfiguration & ")"

        Debug.Print sPadStr & "  Suppr   = " & swComp.IsSuppressed

        Debug.Print sPadStr & "  Hidden  = " & swComp.IsHidden(False)

   

        Debug.Print sPadStr & "  Rot1  = (" + _

            Str(vXform(0)) + ", " + _

            Str(vXform(1)) + ", " + _

            Str(vXform(2)) + ")" _

   

        Debug.Print sPadStr & "  Rot2  = (" + _

            Str(vXform(3)) + ", " + _

            Str(vXform(4)) + ", " + _

            Str(vXform(5)) + ")" _

   

        Debug.Print sPadStr & "  Rot3  = (" + _

            Str(vXform(6)) + ", " + _

            Str(vXform(7)) + ", " + _

            Str(vXform(8)) + ")" _

        

        Debug.Print sPadStr & "  Trans = (" + _

            Str(vXform(9)) + ", " + _

            Str(vXform(10)) + ", " + _

            Str(vXform(11)) + ")" _

        

        Debug.Print sPadStr & "  Scale = " + Str(vXform(12))

   

        Debug.Print ""

    End If

   

    ' Recurse into subassembly

    vChild = swComp.GetChildren

    For i = 0 To UBound(vChild)

        Set swChildComp = vChild(i)

        

        OutputCompXform swChildComp, nLevel + 1

    Next i

End Sub

Sub main()

    Dim swApp                       As SldWorks.SldWorks

    Dim swModel                     As SldWorks.ModelDoc2

    Dim swConf                      As SldWorks.configuration

    Dim swRootComp                  As SldWorks.Component2

    Dim bRet                        As Boolean

   

    Set swApp = CreateObject("SldWorks.Application")

    Set swModel = swApp.ActiveDoc

    Set swConf = swModel.GetActiveConfiguration

    Set swRootComp = swConf.GetRootComponent

   

    Debug.Print "File = " & swModel.GetPathName

   

    OutputCompXform swRootComp, 0

End Sub

'---------------------------------------
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-5-31 03:32 , Processed in 0.655119 second(s), 24 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

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