通过参数名查找所属草图及特征,在浏览树亮显

442780782
Advocate
Advocate

通过参数名查找所属草图及特征,在浏览树亮显

442780782
Advocate
Advocate

如下示例代码,还需增加检索参数所属草图和检索抑制特征的参数。

'['........................获取参数列表展示.....................
' 定义一个ArrayList对象用于存储参数名
Dim oCSB As New ArrayList 

' 获取模型参数集合
Dim modelParam As ModelParameters
modelParam = ThisApplication.ActiveDocument.ComponentDefinition.Parameters.ModelParameters

' 遍历模型参数集合,并将参数名称添加到数组中
oCSB.Add("[模型参数区段]") ' 添加模型参数区段的标识
For Each Item In modelParam
    oCSB.Add(Item.Name) ' 将模型参数名称添加至数组,不包含参数值
Next

' 获取参考参数集合
Dim ReferenceParam As ReferenceParameters
ReferenceParam = ThisApplication.ActiveDocument.ComponentDefinition.Parameters.ReferenceParameters

' 遍历参考参数集合,并将参数名称添加到数组中
oCSB.Add("[参考参数区段]") ' 添加参考参数区段的标识
For Each Item In ReferenceParam
    oCSB.Add(Item.Name) ' 将参考参数名称添加至数组,不包含参数值
Next

' 获取用户参数集合
Dim UserParam As UserParameters
UserParam = ThisApplication.ActiveDocument.ComponentDefinition.Parameters.UserParameters

' 遍历用户参数集合,并将参数名称添加到数组中
oCSB.Add("[用户参数区段]") ' 添加用户参数区段的标识
For Each Item In UserParam
    oCSB.Add(Item.Name) ' 将用户参数名称添加至数组,不包含参数值
Next



' 显示一个输入列表框,让用户从参数列表中选择一个参数
XX = InputListBox("Fx参数", oCSB, oCSB, Title:="非官方 Inventor", ListName:="从列表中选择Fx参数")

' 检查用户是否选择了有效参数,而不是区段标识
If XX = "" Or (XX = "[用户参数区段]" Or XX = "[模型参数区段]" Or XX = "[参考参数区段]") Then
    MessageBox.Show("请选择一个实际参数,而不是区段标题。", "提示")
	
    Exit Sub
End If
']

'.......................................................................................................................................
'['...............................查找参数所属草图或特征....................................
oDoc = ThisApplication.ActiveEditDocument
oCompDef = oDoc.ComponentDefinition
'声明参数集
Dim oparams As Parameters = oCompDef.Parameters
Try
   
	oparam = oparams.Item(XX)
Catch ex As Exception
    MessageBox.Show("未能找到参数 '" & userInput & "'。请确保输入的参数名正确且存在于当前组件定义中。","温馨提示")

    Exit Sub
End Try

' 声明标志位,记录是否找到匹配特征
Dim matchingFeatureFound As Boolean = False

' 遍历特征
For Each feat As PartFeature In oCompDef.Features

    ' 遍历特征参数
    For Each opar As Parameter In feat.Parameters
        ' 对比特征参数和目标参数
        If opar.Name = oparam.Name Then
            ' 选中特征
            ThisApplication.ActiveDocument.SelectSet.Select(feat)

            matchingFeatureFound = True ' 找到匹配特征时,设置标志位为 True
            Exit For ' 找到匹配特征后,无需继续遍历当前特征的其他参数
        End If
    Next

    If matchingFeatureFound Then
        Exit For ' 找到匹配特征后,无需继续遍历其他特征
    End If
Next feat

If Not matchingFeatureFound Then ' 如果未找到匹配特征,则触发错误处理
    Err.Raise(-1, "FindMatchingFeature", "未找到与参数 '" & oparam.Name & "' 对应的特征")
End If
']

@王承之pmhker 王老师。有空帮忙分析下是否可行。感谢!

0 个赞
回复
已接受的解答 (1)
943 次查看
7 条回复
回复 (7)

王承之pmhker
Advisor
Advisor

我找时间看下


If my post answers your question, please click the "Accept as Solution" button. This helps everyone find answers more quickly!
如果我的回帖解决了您的问题,请点击 "接受为解决方案" 按钮. 这可以帮助其他人更快的找到解决方案!


王 承之
Autodesk AGN [Inventor 俱乐部] Leader
Inventor Club | Bilibili


AGN L    EESignature

0 个赞

442780782
Advocate
Advocate
谢谢!
0 个赞

王承之pmhker
Advisor
Advisor

x先问下,你这个规则,根据参数亮显特征和草图的目的是什么?

 


If my post answers your question, please click the "Accept as Solution" button. This helps everyone find answers more quickly!
如果我的回帖解决了您的问题,请点击 "接受为解决方案" 按钮. 这可以帮助其他人更快的找到解决方案!


王 承之
Autodesk AGN [Inventor 俱乐部] Leader
Inventor Club | Bilibili


AGN L    EESignature

0 个赞

lucas_zhang_82
Advocate
Advocate
已接受的解答
' 遍历特征
For Each feat As PartFeature In oCompDef.Features
    ' 遍历特征参数
    For Each opar As Parameter In feat.Parameters
        ' 对比特征参数和目标参数
        If opar.Name = oparam.Name Then
            ' 选中特征
            ThisApplication.ActiveDocument.SelectSet.Select(feat)			
	    Dim oSketch As Sketch = feat.Definition.profile.Parent
            ThisApplication.ActiveDocument.SelectSet.Select(oSketch)	
			
            matchingFeatureFound = True ' 找到匹配特征时,设置标志位为 True
            Exit For ' 找到匹配特征后,无需继续遍历当前特征的其他参数
        End If
    Next
Next feat

增加加粗段代码即可

442780782
Advocate
Advocate
感谢!张老师的助力。
0 个赞

442780782
Advocate
Advocate
在参数化相似零件间需要检查是否有相同草图,同时零件特征繁多,手动查找繁琐。使用代码可快速查找,提高效率。
0 个赞

442780782
Advocate
Advocate
感谢!两位老师的相助。
0 个赞