I checked similar questions in the forum, but they all give the same answer (see e.g.
, , ):- traverse the tree by using IModelDoc2.GetFirstFeature/IComponent2.GetFirstFeature and IFeature.GetNextFeature,
- find the components either by using IFeature.GetTypeName2 or by IEntity.GetType,
- retrieve the components by using IFeature.GetSpecificFeature2.
But: It does not work. In the attached assembly, this approach does NOT give the order as it is given in the feature tree.
(See API Help, IModelDoc2.FirstFeature: "This method returns features in the model definition order, which is not the same as the order displayed in the user interface. See ITreeControlItem for details.")
To see that, just open the attached "getChildComponents.SLDASM", edit the macro "getComponentsOrdered.swp" (EDIT because the output will be in the console which is not seen if you directly run it), select the root component and run the macro. The output will be:
Name: B^getChildComponents-2
Name: C3-1
Name: E3-1
Name: B^getChildComponents-3
Name: B^getChildComponents-4
Name: E3-2
Name: E2^getChildComponents-1
But as you can see in the feature tree the correct order is this:
Any hints on how to actually get the correct order are appreciated!
SolidworksApi/macros