首页 文章

CATIA VBA测量用户选择的行/样条曲线

提问于
浏览
2

我试图获得用户选择的线/样条曲线的长度

这是我用来让用户选择他们的行的代码:

Dim USel As Selection
Dim USelLB
Dim InputObject(0)

InputObject(0) = "AnyObject"
Set USel = CATIA.ActiveDocument.Selection
Set USelLB = USel

USel.Clear
USelLB.Clear

Linestomeasure = USelLB.SelectElement3(InputObject, "Select objects to list names", True, CATMultiSelTriggWhenUserValidatesSelection, False)

Linestomeasurepublic 变量,在mainsub我一直试图使用以下代码测量 Linestomeasure

Dim pd1 As PartDocument
Dim a As Object
Dim c As Reference

a = TrimLines.Item(1)
c = pd1.Part.CreateReferenceFromObject(a)

Dim Mea1 As Measurable
Dim TheSPAWorkbench As SPAWorkbench
Set TheSPAWorkbench = pd1.GetWorkbench("SPAWorkbench")
Set Mea1 = TheSPAWorkbench.GetMeasurable(c)

但是当我运行代码 a = trimLines.Item(1) 在调试器中突出显示时出现错误消息"Object Required" .

有没有人知道如何更改我的代码,以便我可以将行的长度作为我可以使用的变量?或者只是以不同的方式去做我想做的事情?

1 回答

  • 0

    Edited answer to reflect comment bellow

    看起来你正在为 USelLB.SelectElement3 分配错误类型的变量,并且还误解了它实际上是如何工作的 .

    Selection.SelectElement3 返回 String ,反映选择是否成功 .

    Selection 检索到的 ObjectSelection.Item(Index)

    你的代码应该是这样的:

    Dim PD1 as PartDocument
    Dim Sel 'as Selection 'Sometimes it is needed to comment the selection to use the .SelectElement3 method
    Dim InputObjType(0)
    Dim SelectionResult as string    
    Dim LineToMeasure as AnyObject    
    Dim I as Integer    
    Dim SpaWorkbench as SPAWorkbench
    Dim Measurable as Measurable
    
    InputObjType(0) = "AnyObject"
    
    'set PD1 = Catia.ActiveDocument
    set Sel = PD1.Selection
    Set TheSPAWorkbench = pd1.GetWorkbench("SPAWorkbench")    
    
    Sel.Clear
    SelectionResult= Sel.SelectElement3(InputObject, "Select objects to list names", True, CATMultiSelTriggWhenUserValidatesSelection, False)
    
    If SelectionResult = "Ok" or SelectionResult = "Normal" then 'Check if user did not cancel the Selection
        For i = 1 to Selection.Count
            Set LineToMeasure = Sel.Item(i).Value
            set Measurable = SpaWorkbench.GetMeasurable(LineToMeasure)
    
            'Measure whatever you need here.
        Next
    End If
    

    请记住,使用 AnyObject 类型过滤器可能会导致用户选择不需要的对象 . 你应该使用更具体的过滤器 .

相关问题