63                          const gp_GTrsf& transform )
 
   66    BRepBuilderAPI_GTransform brep( transform );
 
   69    Handle( XCAFDoc_ShapeTool ) s_assy = XCAFDoc_DocumentTool::ShapeTool( source->Main() );
 
   72    TDF_LabelSequence frshapes;
 
   73    s_assy->GetFreeShapes( frshapes );
 
   76    Handle( XCAFDoc_ShapeTool ) d_assy = XCAFDoc_DocumentTool::ShapeTool( dest->Main() );
 
   78    int nshapes = frshapes.Length();
 
   80    Handle( XCAFDoc_ColorTool ) scolor = XCAFDoc_DocumentTool::ColorTool( source->Main() );
 
   81    Handle( XCAFDoc_ColorTool ) dcolor = XCAFDoc_DocumentTool::ColorTool( dest->Main() );
 
   85    while( 
id <= nshapes )
 
   87        TopoDS_Shape shape = s_assy->GetShape( frshapes.Value( 
id ) );
 
   91            TopoDS_Shape transformed_shape( shape );
 
   93            if( transform.Trsf().ScaleFactor() != 1.0 )
 
   96                        ShapeCustom::ScaleShape( shape, transform.Trsf().ScaleFactor() );
 
  100                brep.Perform( shape, Standard_False );
 
  103                    transformed_shape = brep.Shape();
 
  106            TDF_Label niulab = d_assy->AddShape( transformed_shape, 
false, 
false );
 
  109            stop.Init( shape, TopAbs_FACE );
 
  110            dtop.Init( d_assy->GetShape( niulab ), TopAbs_FACE );
 
  112            while( stop.More() && dtop.More() )
 
  114                Quantity_Color face_color;
 
  119                if( s_assy->FindShape( stop.Current(), tl ) )
 
  121                    if( scolor->GetColor( tl, XCAFDoc_ColorSurf, face_color )
 
  122                        || scolor->GetColor( tl, XCAFDoc_ColorGen, face_color )
 
  123                        || scolor->GetColor( tl, XCAFDoc_ColorCurv, face_color ) )
 
  125                        dcolor->SetColor( dtop.Current(), face_color, XCAFDoc_ColorSurf );
 
  128                else if( scolor->GetColor( stop.Current(), XCAFDoc_ColorSurf, face_color )
 
  129                         || scolor->GetColor( stop.Current(), XCAFDoc_ColorGen, face_color )
 
  130                         || scolor->GetColor( stop.Current(), XCAFDoc_ColorCurv, face_color ) )
 
  132                    dcolor->SetColor( dtop.Current(), face_color, XCAFDoc_ColorSurf );
 
  140            stop.Init( shape, TopAbs_SOLID );
 
  141            dtop.Init( d_assy->GetShape( niulab ), TopAbs_SOLID, TopAbs_FACE );
 
  143            while( stop.More() && dtop.More() )
 
  145                Quantity_Color face_color;
 
  150                if( s_assy->FindShape( stop.Current(), tl ) )
 
  152                    if( scolor->GetColor( tl, XCAFDoc_ColorSurf, face_color )
 
  153                        || scolor->GetColor( tl, XCAFDoc_ColorGen, face_color )
 
  154                        || scolor->GetColor( tl, XCAFDoc_ColorCurv, face_color ) )
 
  156                        dcolor->SetColor( dtop.Current(), face_color, XCAFDoc_ColorGen );
 
  159                else if( scolor->GetColor( stop.Current(), XCAFDoc_ColorSurf, face_color )
 
  160                         || scolor->GetColor( stop.Current(), XCAFDoc_ColorGen, face_color )
 
  161                         || scolor->GetColor( stop.Current(), XCAFDoc_ColorCurv, face_color ) )
 
  163                    dcolor->SetColor( dtop.Current(), face_color, XCAFDoc_ColorSurf );
 
 
wxString result
Test unit parsing edge cases and error handling.