return aPoly;
}
+ //! Add new solid
+ virtual void AddSolid() Standard_OVERRIDE
+ {
+ Handle(Poly_Triangulation) aCurrentTri = GetTriangulation();
+ myTriangulationList.Append(aCurrentTri);
+ myNodes.Clear();
+ myTriangles.Clear();
+ }
+
+ NCollection_Sequence<Handle(Poly_Triangulation)> GetTriangulationList()
+ {
+ return myTriangulationList;
+ }
+
+
private:
NCollection_Vector<gp_XYZ> myNodes;
NCollection_Vector<Poly_Triangle> myTriangles;
+ NCollection_Sequence<Handle(Poly_Triangulation)> myTriangulationList;
};
}
return aReader.GetTriangulation();
}
+//=============================================================================
+//function : ReadFile
+//purpose :
+//=============================================================================
+void RWStl::ReadFile(const Standard_CString theFile, NCollection_Sequence<Handle(Poly_Triangulation)>& theTriangList)
+{
+ Reader aReader;
+ aReader.Read(theFile, Handle(Message_ProgressIndicator)(), true);
+ theTriangList = aReader.GetTriangulationList();
+}
+
//=============================================================================
//function : ReadFile
//purpose :
Standard_EXPORT static Handle(Poly_Triangulation) ReadFile (const Standard_CString theFile,
const Handle(Message_ProgressIndicator)& aProgInd = Handle(Message_ProgressIndicator)());
+ Standard_EXPORT static void ReadFile(const Standard_CString theFile, NCollection_Sequence<Handle(Poly_Triangulation)>& theTriangList);
+
//! Read triangulation from a binary STL file
//! In case of error, returns Null handle.
Standard_EXPORT static Handle(Poly_Triangulation) ReadBinary (const OSD_Path& thePath,
//==============================================================================
Standard_Boolean RWStl_Reader::Read (const char* theFile,
- const Handle(Message_ProgressIndicator)& theProgress)
+ const Handle(Message_ProgressIndicator)& theProgress,
+ bool IsMultiSolid)
{
std::filebuf aBuf;
OSD_OpenStream (aBuf, theFile, std::ios::in | std::ios::binary);
}
}
aStream >> std::ws; // skip any white spaces
+ if (IsMultiSolid)
+ AddSolid();
}
return ! aStream.fail();
}
//! Format is recognized automatically by analysis of the file header.
//! Returns true if success, false on error or user break.
Standard_EXPORT Standard_Boolean Read (const char* theFile,
- const Handle(Message_ProgressIndicator)& theProgress);
+ const Handle(Message_ProgressIndicator)& theProgress,
+ bool IsMultiSolid = false);
//! Guess whether the stream is an Ascii STL file, by analysis of the first bytes (~200).
//! The function attempts to put back the read symbols to the stream which thus must support ungetc().
//! Should create new triangle built on specified nodes in the target model.
virtual void AddTriangle (Standard_Integer theN1, Standard_Integer theN2, Standard_Integer theN3) = 0;
+ virtual void AddSolid() = 0;
+
};
#endif
aB.UpdateFace(aFace, aTriangulation);
DBRep::Set(theArgv[1], aFace);
}
+ else if (theArgc == 4 && strcmp("multi", theArgv[3]) == 0)
+ {
+ NCollection_Sequence<Handle(Poly_Triangulation)> theTriangList;
+ RWStl::ReadFile(theArgv[2], theTriangList);
+ BRep_Builder aB;
+ TopoDS_Compound aCmp;
+ aB.MakeCompound(aCmp);
+ for (int i = 1; i <= theTriangList.Length(); i++)
+ {
+ TopoDS_Face aFace;
+ aB.MakeFace(aFace);
+ aB.UpdateFace(aFace, theTriangList(i));
+ aB.Add(aCmp, aFace);
+ }
+ DBRep::Set(theArgv[1], aCmp);
+ }
else
{
TopoDS_Shape aShape;