To find the name(s) of the sketch(es) that a known parameter is being used. Parameter name is known.

To find the name(s) of the sketch(es) that a known parameter is being used. Parameter name is known.

RoyWickrama_RWEI
Advisor Advisor
145 Views
1 Reply
Message 1 of 2

To find the name(s) of the sketch(es) that a known parameter is being used. Parameter name is known.

RoyWickrama_RWEI
Advisor
Advisor

Parameter name known.

I got a situation where I need to know the name of the sketch (or the sketches) where a partcular parameter is being used.

I appreciate help.

 

Thanks.

 

 

0 Likes
146 Views
1 Reply
Reply (1)
Message 2 of 2

Michael.Navara
Advisor
Advisor

I'm not sure there is some direct way, but you can iterate over sketches and get their names.

You can choose if you want to get sketches which directly use this parameter or select sketches which depends on this parameter. See and comment or un-comment lines 14, 15.

Test part is in attachment. 

Sub Main()

    Dim paramName As String = "Length"
    Dim part As PartDocument = ThisDoc.Document

    Dim parameterNames As New List(Of String)
    
    'Direct parameter usage
    parameterNames.Add(paramName)

    'Parameter dependencies
    '- Select one which best matches your needs
    Dim param As Parameter = part.ComponentDefinition.Parameters.Item(paramName)
    GetDirectDependencies(param, parameterNames)
    GetAllNestedDependencies(param, parameterNames)

    'Get sketch names
    Dim sketchNames As String() = GetSketchNames(part, parameterNames)

    'Print results
    For Each sketchName As String In sketchNames
        Logger.Debug(sketchName)
    Next


End Sub

Private Sub GetDirectDependencies(param As Parameter, parameterDependencies As List(Of String))
    For Each p As Parameter In param.Dependents.OfType(Of Parameter)
        parameterDependencies.Add(p.Name)
    Next
End Sub

Private Sub GetAllNestedDependencies(param As Parameter, parameterDependencies As List(Of String))
    For Each p As Parameter In param.Dependents.OfType(Of Parameter)
        parameterDependencies.Add(p.Name)
        GetAllNestedDependencies(p, parameterDependencies)
    Next
End Sub

Private Function GetSketchNames(part As PartDocument, parameterDependencies As List(Of String)) As String()
    Dim sketchNames As New List(Of String)
    For Each sketch As Sketch In part.ComponentDefinition.Sketches
        For Each dimensionConstraint As DimensionConstraint In Sketch.DimensionConstraints
            Dim parameterName As String = DimensionConstraint.Parameter.Name
            If parameterDependencies.Contains(parameterName) Then
                sketchNames.Add(Sketch.Name)
                Exit For
            End If
        Next
    Next
    Return sketchNames.ToArray()
End Function

 

 

0 Likes