【问题标题】:CATIA VBA Measure a user selected line(s)/splineCATIA VBA 测量用户选择的线/样条
【发布时间】:2017-07-03 14:54:33
【问题描述】:

我正在尝试获取用户选择的线/样条线的长度

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

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)

Linestomeasure 是一个 public 变量,在 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) 在调试器中突出显示,并显示错误消息“需要对象”。

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

【问题讨论】:

    标签: vba catia


    【解决方案1】:

    编辑答案以反映下面的评论

    您似乎为 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 类型过滤器可能会导致用户选择不需要的对象。您应该使用更具体的过滤器。

    【讨论】:

    • TrimLines变量在使用前是否设置正确?您发布的代码没有显示它。
    • 抱歉,TrimLinesLinestomeasure 我在发帖时将变量更改为一个,而不是另一个。如果我将TrimLines 设置为Public Trimlines 并使用TrimLines = USelLB.SelectElement3(InputObject, "Select objects to list names", True, CATMultiSelTriggWhenUserValidatesSelection, False),那么我会得到原始错误如果我使用Public TrimLines as Selection 并使用Set TrimLines = USelLB.SelectElement3(InputObject, "Select objects to list names", True, CATMultiSelTriggWhenUserValidatesSelection, False),那么我会在SelectElement3 行上得到“需要对象”错误
    • 我刚刚更新了我的答案。请检查一下。
    • 成功了,谢谢!并感谢您解释 SelectElement 的工作原理,这使负载现在更有意义。是否有解释 VBA 函数和命令如何工作的资源?就像在过去几天的所有谷歌搜索中一样,我找不到任何真正有用的东西来解释 selectelement 的工作原理。
    • 您的 CATIA 安装文件夹中有一个 CATIA API 文档。它可能类似于 (\code\bin\V5Automation.chm)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多