read part names in assembly return COMPOUND

I try to use STEPCAFControl_Reader to read names of an assembly produced by CATIA,the model is like:

CATIA assembly structure
/////////////////////////////////
XDTTest
|
|--compo1(compo1.1)
| |
| |--part1(part1.1)
|
|--part2(part2.1)
////////////////////////////////

MY question
??????????????????????????????????
There are 7 names in above assembly,I found that I CAN'T get name of "part1" and "part2"
BUT ONLY "XDTTest","compo1",,"compo1.1","part1.1","part2.1"

when comes to part1 and part2,I get the same string "COMPOUND"

??????????????????????????????????

MY reading code
**********************************
STEPCAFControl_Reader* reader = new STEPCAFControl_Reader();
reader->SetNameMode (TRUE);
reader->SetColorMode(TRUE);
reader->SetLayerMode(TRUE);
reader->SetPropsMode(TRUE);

IFSelect_ReturnStatus status = reader->ReadFile( (Standard_CString) aFileName);
Handle(TDocStd_Document) doc = new TDocStd_Document("MDTV-XCAF");

if ( reader->Transfer( doc))
{
Handle(XCAFDoc_ShapeTool) myAssembly = XCAFDoc_DocumentTool::ShapeTool( doc->Main());
Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(doc->Main ());

TDF_LabelSequence labels;
myAssembly->GetFreeShapes( labels); // shapes
TDF_Label label = labels.Value(1);

Handle(TDataStd_Name) N;
TCollection_ExtendedString name;
TCollection_ExtendedString ID;

//top_level
if ( label.FindAttribute(TDataStd_Name::GetID(),N))// can get "XDTTest"
{
TCollection_ExtendedString ID = N->Get();
CString str = TCollection_AsciiString(ID).ToCString();
}

if(XCAFDoc_ShapeTool::IsAssembly( label))
{
//sub_level
TDF_ChildIDIterator childIDIterator( label, XCAFDoc::ShapeRefGUID());
for (; childIDIterator.More(); childIDIterator.Next())
{
Handle(TDataStd_TreeNode) node = Handle(TDataStd_TreeNode)::DownCast(childIDIterator.Value());

TDF_Label compoIDLabel = node->Father()->Label();
TDF_Label compoNameLabel = node->Label();

if ( compoIDLabel.FindAttribute(TDataStd_Name::GetID(),N))
{
TCollection_ExtendedString ID = N->Get();
CString str = TCollection_AsciiString(ID).ToCString();// can get "compo1",when comes to part2,str returns "COMPOUND" BUT NOT "part2"
}

if ( compoNameLabel.FindAttribute(TDataStd_Name::GetID(),N))
{
TCollection_ExtendedString name = N->Get();
CString str = TCollection_AsciiString(name).ToCString();// can get "compo1.1","part2.1"
}

if ( compoIDLabel.HasChild()) //always has child and enter?(part2 return TRUE too)
{
//third_level
TDF_ChildIDIterator nodeIterator( compoIDLabel, XCAFDoc::ShapeRefGUID());
for (; nodeIterator.More(); nodeIterator.Next())
{
Handle(TDataStd_TreeNode) node = Handle(TDataStd_TreeNode)::DownCast(nodeIterator.Value());

TDF_Label partIDLabel = node->Father()->Label();
TDF_Label partNameLabel = node->Label();

if ( partIDLabel.FindAttribute(TDataStd_Name::GetID(),N))
{
TCollection_ExtendedString ID = N->Get();
CString str = TCollection_AsciiString(ID).ToCString();// when comes to "part1",,str returns "COMPOUND"
}

if ( partNameLabel.FindAttribute(TDataStd_Name::GetID(),N))
{
TCollection_ExtendedString name = N->Get();
CString str = TCollection_AsciiString(name).ToCString();// can get "part1.1"
}

}
}
else //never enter?
{

}
}
}
}
return status;

Super Dan's picture

I use OCCT6.5.5!