mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
Compare commits
1 Commits
V7_6_2
...
CR0-Intera
Author | SHA1 | Date | |
---|---|---|---|
|
961713db52 |
@@ -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 :
|
||||||
|
@@ -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,
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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";
|
||||||
|
Reference in New Issue
Block a user