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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 2875|回复: 7
打印 上一主题 下一主题

【求解答】关于多配置装配体零件仰制状态的疑问!

  [复制链接]

39

主题

372

帖子

3084

金币

传奇

Rank: 8Rank: 8

积分
7776

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

跳转到指定楼层
楼主
 楼主| 发表于 2023-12-15 15:15:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
首先看图和代码:

Sub main()


    Dim swApp           As SldWorks.SldWorks
    Dim swDoc           As SldWorks.ModelDoc2
    Dim myFeature       As Feature
   
    Set swApp = Application.SldWorks
    Set swDoc = swApp.ActiveDoc
    swDoc.ResolveAllLightWeightComponents (True)     '将所有轻化还原
    Set myFeature = swDoc.FirstFeature
    Do While Not myFeature Is Nothing
        If (myFeature.GetTypeName2 = "Reference" Or myFeature.GetTypeName2 = "ReferencePattern") Then TraFeature swDoc, myFeature.Name  '遍历子装配体函数
        Set myFeature = myFeature.GetNextFeature
    Loop


End Sub


Private Sub TraFeature(ParModeldoc As SldWorks.ModelDoc2, ParName As String)  '遍历子装配体函数


    Dim myFeatureT      As Feature
    Dim curmodeldoc     As SldWorks.ModelDoc2
    Dim curcomponent    As Component2
    Set curcomponent = ParModeldoc.GetComponentByName(ParName)
    If curcomponent Is Nothing Then Exit Sub
    If curcomponent.IsSuppressed <> False Then Exit Sub          '如被仰制则退出
    Set curmodeldoc = curcomponent.GetModelDoc2
   
    Debug.Print curmodeldoc.GetPathName()                   '获取完整路径
   
    If curmodeldoc.GetType = 2 Then                           '如果是装配体则遍历装配内部一层
        Set myFeatureT = curmodeldoc.FirstFeature
        Do While Not myFeatureT Is Nothing
            If (myFeatureT.GetTypeName2 = "Reference" Or myFeatureT.GetTypeName2 = "ReferencePattern") Then TraFeature curmodeldoc, myFeatureT.Name '遍历子装配体函数
            Set myFeatureT = myFeatureT.GetNextFeature
        Loop
    End If


End Sub



图1可见,装配体中有子装配体1(配置1),子装配体1(配置2),子装配体中有零件1-6。
用以上代码获取路径,所得到的结果是:装配体1、零件1、零件3、零件5、装配体1、零件1、零件3、零件5。
但按顶级装配上面所显示的应该为:装配体1、零件2、零件4、零件6、装配体1、零件1、零件3、零件5。

---------这是发现问题所在------------
然后结合代码和多配置相关发现,问题在于是否被仰制这一句
If curcomponent.IsSuppressed <> False Then Exit Sub          '如被仰制则退出
当装配体1激活在配置1状态(切换窗口或关闭装配体1)回到顶级装配中,用此代码只能获取到装配体1的配置1的状态,不管顶级装配体中的,装配体1配置是一种配置都是一样的结果。
所以,要如何修改或变通才能获取到,和顶级装配所显示的那样的结果?


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

使用道具 举报

1

主题

207

帖子

2059

金币

传奇

Rank: 8Rank: 8

积分
6389

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

沙发
发表于 2023-12-15 19:56:38 | 只看该作者
如果用递归,那么入口应该是最顶层的节点。你的代码写得是不伦不类。
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

39

主题

372

帖子

3084

金币

传奇

Rank: 8Rank: 8

积分
7776

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

板凳
 楼主| 发表于 2023-12-15 21:27:10 | 只看该作者
xiaocake 发表于 2023-12-15 19:56
如果用递归,那么入口应该是最顶层的节点。你的代码写得是不伦不类。

额,代码是有点乱,不是专业写码的,见谅!
另外贴子求解的是:那个多配置与仰制的问题,就是把入口改到最顶层的节点,那个如何判断是否仰制问题也是一样的。
因为见到过这个问题,所以粘贴一段有此问题的代码用于举例。
代码的评判,受教了,请更多的关注问题的需求,谢谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

207

帖子

2059

金币

传奇

Rank: 8Rank: 8

积分
6389

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

地板
发表于 2023-12-15 23:20:46 | 只看该作者
tg000057 发表于 2023-12-15 21:27
额,代码是有点乱,不是专业写码的,见谅!
另外贴子求解的是:那个多配置与仰制的问题,就是把入口改到 ...

你要区分多配置,自然要指定配置,显然你没有写获取配置和指定配置的代码。。。
不指定,那么SW默认都是取最后激活的配置,你读取的结果来自于同一个配置也就是最后激活的配置。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

611

帖子

834

金币

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
5299

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

5#
发表于 2023-12-16 08:17:03 | 只看该作者

   经典案例图书
顶一下,坐等高手!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

39

主题

372

帖子

3084

金币

传奇

Rank: 8Rank: 8

积分
7776

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

6#
 楼主| 发表于 2023-12-17 11:12:27 | 只看该作者
xiaocake 发表于 2023-12-15 23:20
你要区分多配置,自然要指定配置,显然你没有写获取配置和指定配置的代码。。。
不指定,那么SW默认都是 ...

我当初想的是两个方向,一个是获取子件时,先获取其配置,激活其配置,再获取它,就是不知道如何激活,没查到相关的api。
一个如你所说的,获取子件时指定配置的获取,但是查到的api有GetComponents,和GetComponentbyID、GetComponentbyName,参数都没有指定配置的。

在两个方向不知哪个对的时候,你说“你要区分多配置,自然要指定配置”,于是我再放大查询范围,找与“配置”相关的api,然后找到了GetRootComponent3和GetChildren,再然后把未仰制的按Feature里的顺序放到数组里,最后把过程写成一个函数。
或许比起你说的指定配置获取复杂、不稳定等,也可能存在一些未发现的bug,但应该也算一个方法,至少解决了我目前的问题!
感谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

46

帖子

47

金币

天使

Rank: 2Rank: 2

积分
152
QQ
7#
发表于 2023-12-18 09:43:56 | 只看该作者

   经典案例图书
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

1129

帖子

242

金币

传奇

Rank: 8Rank: 8

积分
3808

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

8#
发表于 2024-2-11 12:07:45 | 只看该作者
好好学习,天天向上!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-5 04:08 , Processed in 0.148538 second(s), 37 queries .

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

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

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