// I believe 'Sh' is the shape that I later reference as a TopDS_Shape // which I then make a copy of as AIS_TexturedShape for (i = 0; i < FaceCount; i++) { TopoDS_Shell Sh; B.MakeShell(Sh); j = FaceIndex[oIndex][i][0]; n = FaceIndex[oIndex][i][1]; fIndex = FaceIndex[oIndex][i][2]; if (j == 0) continue; TopoDS_Vertex *povertex = new TopoDS_Vertex[j]; for (k = 0; k < j; k++) { m = 3*k; povertex[k] = BRepBuilderAPI_MakeVertex(gp_Pnt(FPoints[oIndex][i][m],FPoints[oIndex][i][m+1],FPoints[oIndex][i][m+2])); } for (k = 0; k < n; k++) { o = 4*k + 3; v1 = FaceIndex[oIndex][i][o+1]; v2 = FaceIndex[oIndex][i][o+2]; v3 = FaceIndex[oIndex][i][o+3]; try { TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(povertex[v1], povertex[v2]); TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(povertex[v2], povertex[v3]); TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(povertex[v3], povertex[v1]); TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E1,E2,E3); TopoDS_Face F1 = BRepBuilderAPI_MakeFace(W1); if (!F1.IsNull()) B.Add(Sh,F1); } catch (Standard_Failure) { } } //myFaceLoop.Bind(gFaceIndex++, facemap); B.Add(FaceComp,Sh); myFaceLoop.Bind(fIndex, Sh); delete povertex; } // The copy is something like this: BRepBuilderAPI_Copy A; A.Perform(topShape); TopoDS_Shape ShapeCopy; ShapeCopy = A.Shape(); // I then move it out a little bit ShapeCopy.Move(l2); // finally I make a textured shape from the moved copy Handle(AIS_TexturedShape) aTShape = new AIS_TexturedShape(ShapeCopy);