1
0
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:
anv
2016-04-22 13:51:24 +03:00
committed by bugmaster
parent 299e0ab98f
commit 7f56eba8cd
49 changed files with 1352 additions and 4214 deletions

View File

@@ -25,8 +25,6 @@
#include <Interface_InterfaceModel.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <MoniTool_Option.hxx>
#include <MoniTool_Profile.hxx>
#include <RWHeaderSection.hxx>
#include <RWStepAP214.hxx>
#include <Standard_Type.hxx>
@@ -56,10 +54,9 @@
IMPLEMENT_STANDARD_RTTIEXT(STEPControl_Controller,XSControl_Controller)
//#include <StepAP214.hxx>
// Pour NewModel et Write : definition de produit (temporaire ...)
STEPControl_Controller::STEPControl_Controller ()
: XSControl_Controller ("STEP", "step")
: XSControl_Controller ("STEP", "step")
{
static Standard_Boolean init = Standard_False;
if (!init) {
@@ -199,14 +196,13 @@ STEPControl_Controller::STEPControl_Controller ()
Handle(STEPControl_ActorWrite) ActWrite = new STEPControl_ActorWrite;
ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
theAdaptorWrite = ActWrite;
myAdaptorWrite = ActWrite;
Handle(StepSelect_WorkLibrary) swl = new StepSelect_WorkLibrary;
swl->SetDumpLabel(1);
theAdaptorLibrary = swl;
theAdaptorProtocol = STEPEdit::Protocol();
// theAdaptorProtocol = StepAP214::Protocol();
theAdaptorRead = new STEPControl_ActorRead; // par ex pour Recognize
myAdaptorLibrary = swl;
myAdaptorProtocol = STEPEdit::Protocol();
myAdaptorRead = new STEPControl_ActorRead; // par ex pour Recognize
SetModeWrite (0,4);
SetModeWriteHelp (0,"As Is");
@@ -216,21 +212,20 @@ STEPControl_Controller::STEPControl_Controller ()
SetModeWriteHelp (4,"Wireframe");
TraceStatic ("read.surfacecurve.mode",5);
// --- SELECTIONS, SIGNATURES, COMPTEURS, EDITEURS
// --- SELECTIONS, SIGNATURES, COMPTEURS, EDITEURS
DeclareAndCast(IFSelect_Selection,xmr,SessionItem("xst-model-roots"));
if (!xmr.IsNull()) {
Handle(IFSelect_Signature) sty = STEPEdit::SignType();
AddSessionItem (sty,"step-type");
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter
(sty,Standard_False,Standard_True);
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter(sty,Standard_False,Standard_True);
AddSessionItem (tys,"step-types");
theSignType = sty;
//szv:mySignType = sty;
//pdn S4133 18.02.99
Handle(IFSelect_SignAncestor)sta = new IFSelect_SignAncestor();
AddSessionItem (sta,"xst-derived");
AddSessionItem (new IFSelect_SignAncestor(),"xst-derived");
Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
stdvar->SetProtocol(STEPEdit::Protocol());
AddSessionItem (stdvar,"step-derived");
@@ -238,12 +233,10 @@ STEPControl_Controller::STEPControl_Controller ()
Handle(IFSelect_SelectSignature) selsdr = STEPEdit::NewSelectSDR();
selsdr->SetInput (xmr);
AddSessionItem (selsdr,"step-shape-def-repr");
Handle(IFSelect_SelectSignature) selrrs = STEPEdit::NewSelectPlacedItem();
// selrrs->SetInput (xmr); deja prete avec ModelAll
AddSessionItem (selrrs,"step-placed-items");
Handle(IFSelect_SelectSignature) selsr = STEPEdit::NewSelectShapeRepr();
// input deja pret avec ModelAll
AddSessionItem (selsr,"step-shape-repr");
AddSessionItem (STEPEdit::NewSelectPlacedItem(),"step-placed-items");
// input deja pret avec ModelAll
AddSessionItem (STEPEdit::NewSelectShapeRepr(),"step-shape-repr");
}
//pdn
@@ -277,33 +270,6 @@ STEPControl_Controller::STEPControl_Controller ()
Handle(IFSelect_EditForm) edsdrf = new IFSelect_EditForm (edsdr,Standard_False,Standard_True,"STEP Product Data (SDR)");
AddSessionItem (edsdr,"step-SDR-edit");
AddSessionItem (edsdrf,"step-SDR-data");
// #### PROFILE ####
// ActorRead : on ajoute le cas Shape possible, a part du default
// ainsi, on l a tjrs sous la main
Handle(MoniTool_Option) optacrd = Profile()->Option("tr-read");
optacrd->Add ("shape",theAdaptorRead);
// ActorWrite : on ajoute les cas possibles (NB : shape == default)
// On garde a part les cas shape compound (= shape traitee globale ou en
// assembly), peuvent etre utiles. Tandis que les autres cas sont
// susceptibles d etre remplaces si on fait du Model-Editor
Handle(MoniTool_Option) optacwr = Profile()->Option("tr-write");
Handle(STEPControl_ActorWrite) ActWSh = new STEPControl_ActorWrite;
ActWSh->SetGroupMode(0);
optacwr->Add ("shape",ActWSh);
Handle(STEPControl_ActorWrite) ActWA1 = new STEPControl_ActorWrite;
ActWA1->SetGroupMode(1);
optacwr->Add ("compound",ActWA1);
optacwr->Add ("assembly",ActWA1);
optacwr->Add ("SRWT",ActWA1);
Profile()->AddConf ("Shape");
Profile()->AddSwitch ("Shape","tr-write","shape");
Profile()->AddConf ("Assembly");
Profile()->AddSwitch ("Assembly","tr-write","SRWT");
}
Handle(Interface_InterfaceModel) STEPControl_Controller::NewModel () const
@@ -311,12 +277,6 @@ Handle(Interface_InterfaceModel) STEPControl_Controller::NewModel () const
return STEPEdit::NewModel();
}
Handle(Transfer_ActorOfTransientProcess) STEPControl_Controller::ActorRead
(const Handle(Interface_InterfaceModel)& ) const
{
return theAdaptorRead;
} // new Cc1ToTopoDSAct_Actor ??
// #### PROVISOIRE ??? ####
IFSelect_ReturnStatus STEPControl_Controller::TransferWriteShape
@@ -327,7 +287,7 @@ IFSelect_ReturnStatus STEPControl_Controller::TransferWriteShape
{
if (modeshape < 0 || modeshape > 4) return IFSelect_RetError;
Handle(STEPControl_ActorWrite) ActWrite =
Handle(STEPControl_ActorWrite)::DownCast(theAdaptorWrite);
Handle(STEPControl_ActorWrite)::DownCast(myAdaptorWrite);
// A PRESENT ON PASSE PAR LE PROFILE
if (!ActWrite.IsNull())
ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
@@ -351,9 +311,10 @@ Standard_Boolean STEPControl_Controller::Init ()
//purpose :
//=======================================================================
void STEPControl_Controller::Customise(Handle(XSControl_WorkSession)& WS)
void STEPControl_Controller::Customise(Handle(XSControl_WorkSession)& WS)
{
XSControl_Controller::Customise(WS);
Handle(IFSelect_SelectModelRoots) slr;
Handle(Standard_Transient) slr1 = WS->NamedItem("xst-model-roots");
if(!slr1.IsNull())
@@ -362,27 +323,23 @@ Standard_Boolean STEPControl_Controller::Init ()
slr = new IFSelect_SelectModelRoots;
WS->AddNamedItem ("xst-model-roots",slr);
}
Handle(STEPSelections_SelectForTransfer) st1= new STEPSelections_SelectForTransfer;
st1->SetReader (WS->TransferReader());
WS->AddNamedItem ("xst-transferrable-roots",st1);
//DeclareAndCast(IFSelect_Selection,xmr,SessionItem("xst-model-roots"));
if (!slr.IsNull()) {
Handle(IFSelect_Signature) sty = STEPEdit::SignType();
WS->AddNamedItem ("step-type",sty);
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter
(sty,Standard_False,Standard_True);
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter(sty,Standard_False,Standard_True);
WS->AddNamedItem ("step-types",tys);
theSignType = sty;
//szv:mySignType = sty;
WS->SetSignType( sty );
//pdn S4133 18.02.99
Handle(IFSelect_SignAncestor)sta = new IFSelect_SignAncestor();
WS->AddNamedItem ("xst-derived",sta);
WS->AddNamedItem ("xst-derived",new IFSelect_SignAncestor());
Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
stdvar->SetProtocol(STEPEdit::Protocol());
WS->AddNamedItem ("step-derived",stdvar);
@@ -391,10 +348,9 @@ Standard_Boolean STEPControl_Controller::Init ()
selsdr->SetInput (slr);
WS->AddNamedItem ("step-shape-def-repr",selsdr);
Handle(IFSelect_SelectSignature) selrrs = STEPEdit::NewSelectPlacedItem();
// selrrs->SetInput (slr); deja prete avec ModelAll
WS->AddNamedItem ("step-placed-items",selrrs);
Handle(IFSelect_SelectSignature) selsr = STEPEdit::NewSelectShapeRepr();
// input deja pret avec ModelAll
// input deja pret avec ModelAll
WS->AddNamedItem ("step-shape-repr",selsr);
}

View File

@@ -49,10 +49,6 @@ public:
//! It is taken from STEP Template Model
Standard_EXPORT Handle(Interface_InterfaceModel) NewModel() const Standard_OVERRIDE;
//! Returns a new Actor for Read attached to the pair (norm,appli)
//! It is a PmsToTopoDSAct_Actor
Standard_EXPORT Handle(Transfer_ActorOfTransientProcess) ActorRead (const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
Standard_EXPORT virtual void Customise (Handle(XSControl_WorkSession)& WS) Standard_OVERRIDE;
//! Takes one Shape and transfers it to the InterfaceModel

View File

@@ -38,7 +38,6 @@
#include <StepBasic_SolidAngleMeasureWithUnit.hxx>
#include <StepBasic_SolidAngleUnit.hxx>
#include <STEPConstruct_UnitContext.hxx>
#include <STEPControl_ActorRead.hxx>
#include <STEPControl_Controller.hxx>
#include <STEPControl_Reader.hxx>
#include <StepData_StepModel.hxx>
@@ -198,7 +197,7 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
//}
if (IsRoot) {
theroots.Append(ent);
WS()->MapReader()->RootsForTransfer()->Append(ent);
WS()->TransferReader()->TransientProcess()->RootsForTransfer()->Append(ent);
}
}
TCollection_AsciiString aProdMode = Interface_Static::CVal("read.step.product.mode");
@@ -232,7 +231,7 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
}
if(IsRoot) {
theroots.Append(ent);
WS()->MapReader()->RootsForTransfer()->Append(ent);
WS()->TransferReader()->TransientProcess()->RootsForTransfer()->Append(ent);
}
}
if(ent->IsKind(STANDARD_TYPE(StepShape_ShapeRepresentation))) {
@@ -285,7 +284,7 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
}
if(IsRoot) {
theroots.Append(ent);
WS()->MapReader()->RootsForTransfer()->Append(ent);
WS()->TransferReader()->TransientProcess()->RootsForTransfer()->Append(ent);
}
}
}
@@ -390,7 +389,7 @@ void STEPControl_Reader::FileUnits( TColStd_SequenceOfAsciiString& theUnitLength
//for case when units was not found through PDF or SDR
if(theUnitLengthNames.IsEmpty())
{
Handle(Interface_InterfaceModel) aModel = WS()->Model();
const Handle(Interface_InterfaceModel) &aModel = WS()->Model();
if(aModel.IsNull())
return;
Standard_Integer nb = aModel->NbEntities();

View File

@@ -134,11 +134,10 @@ IFSelect_ReturnStatus STEPControl_Writer::Transfer
default : break;
}
if (mws < 0) return IFSelect_RetError; // cas non reconnu
thesession->SetModeWriteShape (mws);
thesession->TransferWriter()->SetTransferMode (mws);
// for progress indicator.
Handle(Message_ProgressIndicator) progress =
WS()->TransferWriter()->FinderProcess()->GetProgress();
Handle(Message_ProgressIndicator) progress = WS()->TransferWriter()->FinderProcess()->GetProgress();
if ( ! progress.IsNull() ) {
Standard_Integer nbfaces=0;
for( TopExp_Explorer exp(sh, TopAbs_FACE); exp.More(); exp.Next()) nbfaces++;