1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

...

1 Commits

5 changed files with 53 additions and 2 deletions

View File

@@ -97,9 +97,25 @@ namespace
return aPoly; 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: private:
NCollection_Vector<gp_XYZ> myNodes; NCollection_Vector<gp_XYZ> myNodes;
NCollection_Vector<Poly_Triangle> myTriangles; NCollection_Vector<Poly_Triangle> myTriangles;
NCollection_Sequence<Handle(Poly_Triangulation)> myTriangulationList;
}; };
} }
@@ -118,6 +134,17 @@ Handle(Poly_Triangulation) RWStl::ReadFile (const Standard_CString theFile,
return aReader.GetTriangulation(); 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 //function : ReadFile
//purpose : //purpose :

View File

@@ -50,6 +50,8 @@ public:
Standard_EXPORT static Handle(Poly_Triangulation) ReadFile (const Standard_CString theFile, Standard_EXPORT static Handle(Poly_Triangulation) ReadFile (const Standard_CString theFile,
const Handle(Message_ProgressIndicator)& aProgInd = Handle(Message_ProgressIndicator)()); 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 //! Read triangulation from a binary STL file
//! In case of error, returns Null handle. //! In case of error, returns Null handle.
Standard_EXPORT static Handle(Poly_Triangulation) ReadBinary (const OSD_Path& thePath, Standard_EXPORT static Handle(Poly_Triangulation) ReadBinary (const OSD_Path& thePath,

View File

@@ -126,7 +126,8 @@ namespace
//============================================================================== //==============================================================================
Standard_Boolean RWStl_Reader::Read (const char* theFile, Standard_Boolean RWStl_Reader::Read (const char* theFile,
const Handle(Message_ProgressIndicator)& theProgress) const Handle(Message_ProgressIndicator)& theProgress,
bool IsMultiSolid)
{ {
std::filebuf aBuf; std::filebuf aBuf;
OSD_OpenStream (aBuf, theFile, std::ios::in | std::ios::binary); OSD_OpenStream (aBuf, theFile, std::ios::in | std::ios::binary);
@@ -165,6 +166,8 @@ Standard_Boolean RWStl_Reader::Read (const char* theFile,
} }
} }
aStream >> std::ws; // skip any white spaces aStream >> std::ws; // skip any white spaces
if (IsMultiSolid)
AddSolid();
} }
return ! aStream.fail(); return ! aStream.fail();
} }

View File

@@ -39,7 +39,8 @@ public:
//! Format is recognized automatically by analysis of the file header. //! Format is recognized automatically by analysis of the file header.
//! Returns true if success, false on error or user break. //! Returns true if success, false on error or user break.
Standard_EXPORT Standard_Boolean Read (const char* theFile, 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). //! 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(). //! The function attempts to put back the read symbols to the stream which thus must support ungetc().
@@ -74,6 +75,8 @@ public:
//! Should create new triangle built on specified nodes in the target model. //! 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 AddTriangle (Standard_Integer theN1, Standard_Integer theN2, Standard_Integer theN3) = 0;
virtual void AddSolid() = 0;
}; };
#endif #endif

View File

@@ -411,6 +411,22 @@ static Standard_Integer ReadObj (Draw_Interpretor& theDI,
{ {
aFilePath = theArgVec[anArgIter]; aFilePath = theArgVec[anArgIter];
} }
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 else
{ {
std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n"; std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";