mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0027349: XtControl_Reader is not thread-safe
Support of profiles for norms is removed Getting rid of thread-unsafe static variables. Sequence is not thread-safe. Replacing it with Vector. Updating samples due to previous changes. Resolving conflict with system environment.
This commit is contained in:
@@ -44,33 +44,6 @@
|
||||
#include <XSControl_TransferReader.hxx>
|
||||
#include <XSControl_WorkSession.hxx>
|
||||
|
||||
//=======================================================================
|
||||
//function : IGESCAFControl_Reader
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
IGESCAFControl_Reader::IGESCAFControl_Reader () :
|
||||
myColorMode( Standard_True ),
|
||||
myNameMode ( Standard_True ),
|
||||
myLayerMode( Standard_True )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : IGESCAFControl_Reader
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
IGESCAFControl_Reader::IGESCAFControl_Reader (const Handle(XSControl_WorkSession)& WS,
|
||||
const Standard_Boolean scratch)
|
||||
{
|
||||
SetWS (WS,scratch);
|
||||
myColorMode = Standard_True;
|
||||
myNameMode = Standard_True;
|
||||
myLayerMode = Standard_True;
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : Transfer
|
||||
//purpose : basic working method
|
||||
@@ -198,10 +171,9 @@ Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
|
||||
}
|
||||
|
||||
// added by skl 13.10.2003
|
||||
Handle(Interface_InterfaceModel) Model = WS()->Model();
|
||||
//WS()->TransferReader()->SetTransientProcess(TransientProcess());
|
||||
Handle(XSControl_TransferReader) TR = WS()->TransferReader();
|
||||
Handle(Transfer_TransientProcess) TP = TR->TransientProcess();
|
||||
const Handle(Interface_InterfaceModel) &Model = WS()->Model();
|
||||
const Handle(XSControl_TransferReader) &TR = WS()->TransferReader();
|
||||
const Handle(Transfer_TransientProcess) &TP = TR->TransientProcess();
|
||||
Standard_Boolean IsCTool = Standard_True;
|
||||
Handle(XCAFDoc_ColorTool) CTool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
|
||||
if(CTool.IsNull()) IsCTool = Standard_False;
|
||||
@@ -347,19 +319,6 @@ Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
|
||||
|
||||
// end added by skl 13.10.2003
|
||||
|
||||
// read colors
|
||||
// if ( GetColorMode() )
|
||||
// ReadColors ( doc );
|
||||
|
||||
// read names
|
||||
// if ( GetNameMode() )
|
||||
// ReadNames ( doc );
|
||||
|
||||
// read layers
|
||||
// if ( GetLayerMode() )
|
||||
// ReadLayers ( doc );
|
||||
|
||||
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
@@ -375,290 +334,3 @@ Standard_Boolean IGESCAFControl_Reader::Perform (const Standard_CString filename
|
||||
if ( ReadFile ( filename ) != IFSelect_RetDone ) return Standard_False;
|
||||
return Transfer ( doc );
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : Perform
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::Perform (const TCollection_AsciiString &filename,
|
||||
Handle(TDocStd_Document) &doc)
|
||||
{
|
||||
if ( ReadFile ( filename.ToCString() ) != IFSelect_RetDone ) return Standard_False;
|
||||
return Transfer ( doc );
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : ReadColors
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::ReadColors (Handle(TDocStd_Document)& Doc) const
|
||||
{
|
||||
|
||||
Handle(Interface_InterfaceModel) Model = WS()->Model();
|
||||
|
||||
//WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
|
||||
|
||||
Handle(XSControl_TransferReader) TR = WS()->TransferReader();
|
||||
Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
|
||||
Handle(XCAFDoc_ColorTool) CTool = XCAFDoc_DocumentTool::ColorTool( Doc->Main() );
|
||||
/*
|
||||
Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
|
||||
if ( STool.IsNull() ) return Standard_False;
|
||||
Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
|
||||
SMTool->ComputeMaps();
|
||||
|
||||
Standard_Integer nb = Model->NbEntities();
|
||||
for (Standard_Integer i = 1; i <= nb; i ++) {
|
||||
Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
|
||||
if ( ent.IsNull() ) continue;
|
||||
if ( ent->DefColor() != IGESData_DefValue &&
|
||||
ent->DefColor() != IGESData_DefReference ) continue; // no color assigned
|
||||
|
||||
// find tartet shape
|
||||
Handle(Transfer_Binder) binder = TP->Find ( ent );
|
||||
if ( binder.IsNull() ) continue;
|
||||
TopoDS_Shape S = TransferBRep::ShapeResult (binder);
|
||||
if ( S.IsNull() ) continue;
|
||||
|
||||
// decode color and set to document
|
||||
Quantity_Color col;
|
||||
if ( ent->DefColor() == IGESData_DefValue ) {
|
||||
col = IGESCAFControl::DecodeColor ( ent->RankColor() );
|
||||
}
|
||||
else {
|
||||
Handle(IGESGraph_Color) color = Handle(IGESGraph_Color)::DownCast ( ent->Color() );
|
||||
if ( color.IsNull() ) {
|
||||
cout << "Error: Unrecognized type of color definition" << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
Standard_Real r, g, b;
|
||||
color->RGBIntensity ( r, g, b );
|
||||
col.SetValues ( 0.01*r, 0.01*g, 0.01*b, Quantity_TOC_RGB );
|
||||
}
|
||||
|
||||
TDF_Label L;
|
||||
cout<<"i="<<i<<endl;
|
||||
if(SMTool->Search(S,L)) {
|
||||
cout<<" find Instance"<<endl;
|
||||
CTool->SetColor(L, col, XCAFDoc_ColorGen);
|
||||
}
|
||||
if(L.IsNull()) {
|
||||
cout<<"L1 is Null"<<endl;
|
||||
if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
|
||||
cout<<" add new label1 :"<<L<<endl;
|
||||
CTool->SetColor(L, col, XCAFDoc_ColorGen);
|
||||
}
|
||||
}
|
||||
if(L.IsNull()) {
|
||||
//else {
|
||||
cout<<" try to find splitting"<<endl;
|
||||
// may be S is compound of shapes resulting from splitting
|
||||
for (TopoDS_Iterator it(S); it.More(); it.Next()) {
|
||||
//TDF_Label L1;
|
||||
if(!SMTool->Search(it.Value(),L)) continue; //break-?
|
||||
cout<<" find splitting"<<endl;
|
||||
CTool->SetColor(L, col, XCAFDoc_ColorGen);
|
||||
}
|
||||
if(L.IsNull()) {
|
||||
for (TopoDS_Iterator it(S); it.More(); it.Next()) {
|
||||
if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
|
||||
cout<<" add new label2 :"<<L<<endl;
|
||||
CTool->SetColor(L, col, XCAFDoc_ColorGen);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// cout<<"L.Dump():"<<L<<endl;
|
||||
// if(L.IsNull()) {
|
||||
// cout<<"L2 is Null"<<endl;
|
||||
// if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
|
||||
// cout<<" add new label2 :"<<L<<endl;
|
||||
// CTool->SetColor(L, col, XCAFDoc_ColorGen);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
*/
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : ReadNames
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::ReadNames (Handle(TDocStd_Document)& /*Doc*/) const
|
||||
{
|
||||
Handle(Interface_InterfaceModel) Model = WS()->Model();
|
||||
|
||||
//WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
|
||||
|
||||
Handle(XSControl_TransferReader) TR = WS()->TransferReader();
|
||||
Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
|
||||
/*
|
||||
Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
|
||||
if ( STool.IsNull() ) return Standard_False;
|
||||
Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
|
||||
SMTool->ComputeMaps();
|
||||
|
||||
Standard_Integer nb = Model->NbEntities();
|
||||
for (Standard_Integer i = 1; i <= nb; i ++) {
|
||||
Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
|
||||
if ( ent.IsNull() || ! ent->HasName() ) continue; //not only Entity Label (f.18) but Name Property also
|
||||
|
||||
// find target shape
|
||||
Handle(Transfer_Binder) binder = TP->Find ( ent );
|
||||
if ( binder.IsNull() ) continue;
|
||||
TopoDS_Shape S = TransferBRep::ShapeResult (binder);
|
||||
if ( S.IsNull() ) continue;
|
||||
|
||||
TDF_Label L;
|
||||
//if ( ! STool->Search ( S, L, Standard_True, Standard_True, Standard_False ) ) continue;
|
||||
if ( ! SMTool->Search ( S, L, Standard_True, Standard_True) ) continue;
|
||||
|
||||
// set a name to the document
|
||||
TCollection_AsciiString string = ent->NameValue()->String();
|
||||
string.LeftAdjust();
|
||||
string.RightAdjust();
|
||||
TCollection_ExtendedString str ( string );
|
||||
TDataStd_Name::Set ( L, str );
|
||||
}
|
||||
*/
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : ReadLayers
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::ReadLayers (Handle(TDocStd_Document)& /*Doc*/) const
|
||||
{
|
||||
Handle(Interface_InterfaceModel) Model = WS()->Model();
|
||||
|
||||
//WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
|
||||
|
||||
Handle(XSControl_TransferReader) TR = WS()->TransferReader();
|
||||
Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
|
||||
/*
|
||||
Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
|
||||
if ( STool.IsNull() ) return Standard_False;
|
||||
Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
|
||||
SMTool->ComputeMaps();
|
||||
|
||||
Handle(XCAFDoc_LayerTool) LTool = XCAFDoc_DocumentTool::LayerTool( Doc->Main() );
|
||||
if ( LTool.IsNull() ) return Standard_False;
|
||||
|
||||
Standard_Integer nb = Model->NbEntities();
|
||||
for (Standard_Integer i = 1; i <= nb; i ++) {
|
||||
Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
|
||||
|
||||
if ( ent.IsNull() ) continue;
|
||||
|
||||
// find target shape
|
||||
Handle(Transfer_Binder) binder = TP->Find ( ent );
|
||||
if ( binder.IsNull() ) continue;
|
||||
TopoDS_Shape S = TransferBRep::ShapeResult (binder);
|
||||
if ( S.IsNull() ) continue;
|
||||
|
||||
TDF_Label L;
|
||||
//if ( ! STool->Search ( S, L, Standard_True, Standard_True, Standard_False ) ) continue;
|
||||
if( !SMTool->Search(S, L, Standard_True, Standard_True) ) continue;
|
||||
|
||||
// set a layers to the document
|
||||
IGESData_DefList aDeflist = ent->DefLevel();
|
||||
|
||||
switch (aDeflist) {
|
||||
case IGESData_DefOne : {
|
||||
TCollection_ExtendedString aLayerName ( ent->Level() );
|
||||
LTool->SetLayer( L, aLayerName );
|
||||
#ifdef OCCT_DEBUG
|
||||
// cout << "Added layer " << aLayerName << endl;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case IGESData_DefSeveral : {
|
||||
Handle(IGESData_LevelListEntity) aLevelList = ent->LevelList();
|
||||
Standard_Integer layerNb = aLevelList->NbLevelNumbers();
|
||||
for ( Standard_Integer ilev = 1; ilev <= layerNb; ilev++ ) {
|
||||
TCollection_ExtendedString aLayerName ( aLevelList->LevelNumber(ilev) );
|
||||
LTool->SetLayer( L, aLayerName );
|
||||
#ifdef OCCT_DEBUG
|
||||
// cout << "Added layer " << aLayerName << endl;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
default : break;
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : SetColorMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void IGESCAFControl_Reader::SetColorMode (const Standard_Boolean colormode)
|
||||
{
|
||||
myColorMode = colormode;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetColorMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::GetColorMode () const
|
||||
{
|
||||
return myColorMode;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetNameMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void IGESCAFControl_Reader::SetNameMode (const Standard_Boolean namemode)
|
||||
{
|
||||
myNameMode = namemode;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetNameMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::GetNameMode () const
|
||||
{
|
||||
return myNameMode;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetLayerMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void IGESCAFControl_Reader::SetLayerMode (const Standard_Boolean layermode)
|
||||
{
|
||||
myLayerMode = layermode;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetLayerMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean IGESCAFControl_Reader::GetLayerMode () const
|
||||
{
|
||||
return myLayerMode;
|
||||
}
|
||||
|
||||
|
@@ -20,12 +20,10 @@
|
||||
#include <Standard_DefineAlloc.hxx>
|
||||
#include <Standard_Handle.hxx>
|
||||
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <IGESControl_Reader.hxx>
|
||||
#include <Standard_CString.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
class XSControl_WorkSession;
|
||||
class TDocStd_Document;
|
||||
class TCollection_AsciiString;
|
||||
|
||||
|
||||
//! Provides a tool to read IGES file and put it into
|
||||
@@ -48,80 +46,63 @@ class TCollection_AsciiString;
|
||||
//! Standard_Boolean namemode = reader.GetNameMode();
|
||||
class IGESCAFControl_Reader : public IGESControl_Reader
|
||||
{
|
||||
public:
|
||||
public:
|
||||
|
||||
DEFINE_STANDARD_ALLOC
|
||||
|
||||
|
||||
//! Creates a reader with an empty
|
||||
//! IGES model and sets ColorMode, LayerMode and NameMode to Standard_True.
|
||||
Standard_EXPORT IGESCAFControl_Reader();
|
||||
IGESCAFControl_Reader()
|
||||
: myColorMode( Standard_True ),
|
||||
myNameMode ( Standard_True ),
|
||||
myLayerMode( Standard_True )
|
||||
{}
|
||||
|
||||
//! Creates a reader tool and attaches it to an already existing Session
|
||||
//! Clears the session if it was not yet set for IGES
|
||||
Standard_EXPORT IGESCAFControl_Reader(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
|
||||
IGESCAFControl_Reader(const Handle(XSControl_WorkSession)& theWS, const Standard_Boolean FromScratch = Standard_True)
|
||||
: myColorMode( Standard_True ),
|
||||
myNameMode ( Standard_True ),
|
||||
myLayerMode( Standard_True )
|
||||
{ SetWS (theWS,FromScratch); }
|
||||
|
||||
//! Translates currently loaded IGES file into the document
|
||||
//! Returns True if succeeded, and False in case of fail
|
||||
Standard_EXPORT Standard_Boolean Transfer (Handle(TDocStd_Document)& doc);
|
||||
Standard_EXPORT Standard_Boolean Transfer (Handle(TDocStd_Document)& theDoc);
|
||||
|
||||
Standard_EXPORT Standard_Boolean Perform (const TCollection_AsciiString& filename, Handle(TDocStd_Document)& doc);
|
||||
Standard_EXPORT Standard_Boolean Perform (const TCollection_AsciiString& theFileName, Handle(TDocStd_Document)& theDoc)
|
||||
{ return Perform (theFileName.ToCString(), theDoc); }
|
||||
|
||||
//! Translate IGES file given by filename into the document
|
||||
//! Return True if succeeded, and False in case of fail
|
||||
Standard_EXPORT Standard_Boolean Perform (const Standard_CString filename, Handle(TDocStd_Document)& doc);
|
||||
Standard_EXPORT Standard_Boolean Perform (const Standard_CString theFileName, Handle(TDocStd_Document)& theDoc);
|
||||
|
||||
//! Set ColorMode for indicate read Colors or not.
|
||||
Standard_EXPORT void SetColorMode (const Standard_Boolean colormode);
|
||||
|
||||
Standard_EXPORT Standard_Boolean GetColorMode() const;
|
||||
void SetColorMode (const Standard_Boolean theMode)
|
||||
{ myColorMode = theMode; }
|
||||
|
||||
Standard_Boolean GetColorMode() const
|
||||
{ return myColorMode; }
|
||||
|
||||
//! Set NameMode for indicate read Name or not.
|
||||
Standard_EXPORT void SetNameMode (const Standard_Boolean namemode);
|
||||
|
||||
Standard_EXPORT Standard_Boolean GetNameMode() const;
|
||||
void SetNameMode (const Standard_Boolean theMode)
|
||||
{ myNameMode = theMode; }
|
||||
|
||||
Standard_Boolean GetNameMode() const
|
||||
{ return myNameMode; }
|
||||
|
||||
//! Set LayerMode for indicate read Layers or not.
|
||||
Standard_EXPORT void SetLayerMode (const Standard_Boolean layermode);
|
||||
|
||||
Standard_EXPORT Standard_Boolean GetLayerMode() const;
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
//! Reads colors of IGES entities and sets
|
||||
//! corresponding color assignments in the DECAF document
|
||||
Standard_EXPORT Standard_Boolean ReadColors (Handle(TDocStd_Document)& doc) const;
|
||||
|
||||
//! Reads Names of IGES entities and sets
|
||||
//! corresponding name to label with shape in the DECAF document
|
||||
Standard_EXPORT Standard_Boolean ReadNames (Handle(TDocStd_Document)& doc) const;
|
||||
|
||||
//! Reads layers of parts defined in the IGES model and
|
||||
//! set reference between shape and layers in the DECAF document
|
||||
Standard_EXPORT Standard_Boolean ReadLayers (Handle(TDocStd_Document)& doc) const;
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
void SetLayerMode (const Standard_Boolean theMode)
|
||||
{ myLayerMode = theMode; }
|
||||
|
||||
Standard_Boolean GetLayerMode() const
|
||||
{ return myLayerMode; }
|
||||
|
||||
private:
|
||||
|
||||
Standard_Boolean myColorMode;
|
||||
Standard_Boolean myNameMode;
|
||||
Standard_Boolean myLayerMode;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _IGESCAFControl_Reader_HeaderFile
|
||||
|
Reference in New Issue
Block a user