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.