Skip to main content
16-Pearl
October 30, 2023
Solved

Using ListFeaturesByType in VBA

  • October 30, 2023
  • 2 replies
  • 1381 views

Hi, i've been trying to use ListFeaturesByType in VBA in Excel but didn't succeed. 

 

 

 

 

 

Sub FixParts()

On Error GoTo Error
 
 ' put your code here
 Dim model As IpfcModel
 
 Set model = session.CurrentModel
 
 'creating Fix Constraint
 Dim constraint As IpfcComponentConstraint
 Dim constructorOfConstraints As CCpfcComponentConstraint
 
 Set constructorOfConstraints = New CCpfcComponentConstraint
 Set constraint = constructorOfConstraints.Create(EpfcASM_CONSTRAINT_FIX)
 
 'component path
 Dim solid As IpfcSolid
 Dim features As IpfcFeatures

 solid = CType(model, IpfcSolid)
 features = solid.ListFeaturesByType(True, EpfcFeatureType.EpfcFEATTYPE_COMPONENT)

 'applying constraints
 
 
 
 ' end your code here

Done:
 Exit Sub
 
Error:
 Debug.Print Err.Description
 conn.Disconnect (5)
 Debug.Print "Disconnected"
 
End Sub

 

 

 

 

 

 First thing. All examples that i've found using CType() function which is a converter from IpfcModel to IpfcSolid. But VBA doesn't have CType() functionality that's why it never succeeded.

 

How can i get IpfcSolid from IpfcModel and use ListFeaturesByType() function?

 

(whole purpose of this script is learing about functionaity of VBA API for Creo it has to apply fix constraint to each part in assembly)

 

 

 

Best answer by Laetitia.M

Hello,

CType function is not supported in VBA. When you need to typecast to inherit methods you have  use the line

set x = y

in your example, replace the line with CType with :

 

set solid = model

 

 

On the subject of method inheritance, it's a bit out of subject, but something I discovered that I think may be useful to know :
Some child class methods of IpfcModelItem that use ModelItem objects as input need that object NOT DECLARED (like no Dim)
I had this with trying to add items to a layer, the model item required in IpfcLayer.AddItem (ModelItem) needs to be set without being declared.

I hope this helps you, good luck with vba, I'm in the middle of learning it too 🙂

Laetitia M

 

2 replies

RPN
18-Opal
October 30, 2023

I use Tcl, if your current model is an assembly this one code line will return all active Feature IDs if the feature is a Component :

 

set FIDS [ps_visit type COMPONENT]

 

 Do you really want to do your requests in Excel?

If you later need the component name in the current assembly (Top Level) provide the Feature ID:

 

set MDL_NAME [ps_assy component $FID ]

 

Have Fun with VBA

 

 

12-Amethyst
October 31, 2023

Hello,

CType function is not supported in VBA. When you need to typecast to inherit methods you have  use the line

set x = y

in your example, replace the line with CType with :

 

set solid = model

 

 

On the subject of method inheritance, it's a bit out of subject, but something I discovered that I think may be useful to know :
Some child class methods of IpfcModelItem that use ModelItem objects as input need that object NOT DECLARED (like no Dim)
I had this with trying to add items to a layer, the model item required in IpfcLayer.AddItem (ModelItem) needs to be set without being declared.

I hope this helps you, good luck with vba, I'm in the middle of learning it too 🙂

Laetitia M