2017-07-03 16 views
2

Je suis en train d'obtenir la longueur des lignes sélectionnées par l'utilisateur/splinesCATIA VBA Mesure utilisateur ligne sélectionnée (s)/spline

Voici le code que je utilise pour avoir les utilisateurs sélectionnent leurs lignes:

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 est une variable public, dans le mainsub j'ai essayé de mesurer Linestomeasure en utilisant le code suivant:

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) 

Mais quand je lance le code a = trimLines.Item(1) est mis en surbrillance dans le débogueur avec le message d'erreur "Objet requis".

Est-ce que quelqu'un a une idée sur la façon dont je peux changer mon code afin que je puisse obtenir la longueur de la ligne comme variable avec laquelle je peux travailler? Ou juste une façon différente de faire ce que j'essaie de faire?

Répondre

0

Modifié réponse à refléter un commentaire ci-dessous

On dirait que vous assignez le mauvais type de variable à la USelLB.SelectElement3 et aussi missunderstanding comment cela fonctionne réellement. Le Selection.SelectElement3 renvoie String qui indique si la sélection a été réussie ou non.

Le Object récupéré du Selection est à l'intérieur du Selection.Item(Index)

Votre code devrait être quelque chose comme ceci:

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 

Gardez à l'esprit que l'utilisation du filtre de type AnyObject peut provoquer l'utilisateur de sélectionner les objets indésirables . Vous devriez utiliser un filtre plus spécifique.

+0

Je reçois toujours la même erreur "Object Required" –

+0

Avez-vous réglé la variable 'TrimLines' correctement avant de l'utiliser? Le code que vous avez posté ne le montre pas. – AugustoQ

+0

Désolé, 'TrimLines' est' Linestomeasure' J'ai changé la variable dans un quand j'ai fait le poste et pas l'autre. Si je mets '' TrimLines' comme Trimlines' public et l'utilisation 'Trimlines = USelLB.SelectElement3 (InputObject, "Sélectionner les objets à la liste des noms", True, CATMultiSelTriggWhenUserValidatesSelection, Faux)' puis-je obtenir l'erreur d'origine Si je 'Public TrimLines as Selection' et utiliser' Set TrimLines = USelLB.SelectElement3 (InputObject, "Sélectionner les objets pour les noms de liste", True, CATMultiSelTriggWhenUserValidatesSelection, False) 'alors j'obtiens l'erreur" Object Required "sur la ligne SelectElement3 –