1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-09 18:50:54 +03:00

0029269: Improvement for thread safety of the STEP translator

Modification for loading a few STEP files in the model.
Protected by Mutex
1. Loading STEP file in the model with using yacc and lex.
2. Message management
3. Registration in static structure Interface_GeneralLib, Interface_ReaderLib, Interface_Writer_Lib for each StepData_Procotol.

Modifications:
STEPControl_Controller, STEPCAFControl_Controller were created as not static objects when STEPControl_Reader or STEP_Control_Writes were initialized.
Parameters used for translation from Interface::Static were made not static. Map to keep parameters was added in the Interface::InterfaceModel. For STEP translation parameters were initialized during initializing STEPData_STEPModel. model.
Static variables were removed.
Redundant classes were removed from STEP translator.
This commit is contained in:
gka 2017-08-02 11:36:05 +03:00 committed by ika
parent fd47711d68
commit 7daba72b4d
102 changed files with 2092 additions and 1613 deletions
src
APIHeaderSection
HeaderSection
IFSelect
Interface
Message
QABugs
RWHeaderSection
RWStepAP214
STEPCAFControl
STEPConstruct
STEPControl
STEPEdit
StepAP214
StepData
StepFile
StepSelect
StepToGeom
StepToTopoDS
TopoDSToStep
XDEDRAW
XSAlgo
XSControl
XSDRAWIGES

@ -162,8 +162,9 @@ void APIHeaderSection_MakeHeader::Apply
if (sch.IsNull()) {
Handle(StepData_Protocol) stepro = Handle(StepData_Protocol)::DownCast
(model->Protocol());
if (!stepro.IsNull()) sch = new TCollection_HAsciiString
(stepro->SchemaName());
Handle(Interface_Static) aParam = model->GetParam("write.step.schema");
if (!aParam.IsNull() && !stepro.IsNull())
sch = new TCollection_HAsciiString(stepro->SchemaName(aParam->IntegerValue()));
if (!sch.IsNull()) schid->SetValue(1, sch);
}
header.AddItem(fs);
@ -197,7 +198,9 @@ Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel
// ========
Standard_Boolean APIHeaderSection_MakeHeader::HasFn() const
{ return (!fn.IsNull()); }
{
return (!fn.IsNull());
}
Handle(HeaderSection_FileName) APIHeaderSection_MakeHeader::FnValue() const
{
@ -340,7 +343,9 @@ Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() co
// ===========
Standard_Boolean APIHeaderSection_MakeHeader::HasFs() const
{ return (!fs.IsNull()); }
{
return (!fs.IsNull());
}
Handle(HeaderSection_FileSchema) APIHeaderSection_MakeHeader::FsValue() const
{
@ -406,7 +411,9 @@ void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_H
// ================
Standard_Boolean APIHeaderSection_MakeHeader::HasFd() const
{ return (!fd.IsNull()); }
{
return (!fd.IsNull());
}
Handle(HeaderSection_FileDescription) APIHeaderSection_MakeHeader::FdValue() const
{

@ -16,12 +16,12 @@
#include <HeaderSection_Protocol.hxx>
#include <Interface_Statics.hxx>
StaticHandle(HeaderSection_Protocol, proto);
//StaticHandle(HeaderSection_Protocol, proto);
Handle(HeaderSection_Protocol) HeaderSection::Protocol()
{
InitHandleVoid(HeaderSection_Protocol, proto);
return proto;
//InitHandleVoid(HeaderSection_Protocol, proto);
return new HeaderSection_Protocol;
}

@ -21,7 +21,7 @@
IMPLEMENT_STANDARD_RTTIEXT(HeaderSection_Protocol,StepData_Protocol)
static Standard_CString schemaName = "header_section";
//static Standard_CString schemaName = "header_section";
HeaderSection_Protocol::HeaderSection_Protocol () { }
@ -35,5 +35,5 @@ Handle(Standard_Type)& atype) const
else return 0;
}
Standard_CString HeaderSection_Protocol::SchemaName() const
{ return schemaName; }
Standard_CString HeaderSection_Protocol::SchemaName(Standard_Integer /*theShematype*/)
{ return "header_section"; }

@ -42,7 +42,7 @@ public:
//! Returns a Case Number for each of the HeaderSection Entities
Standard_EXPORT virtual Standard_Integer TypeNumber (const Handle(Standard_Type)& atype) const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_CString SchemaName() const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_CString SchemaName(Standard_Integer theShematype) Standard_OVERRIDE;

@ -264,8 +264,8 @@ IFSelect_ModelCopier::IFSelect_ModelCopier () { }
{
Interface_CheckIterator checks;
checks.SetName ("X-STEP WorkSession : Send All");
Message::DefaultMessenger() <<
"** WorkSession : Sending all data"<<Message_EndLine;
//Message::DefaultMessenger() <<
// "** WorkSession : Sending all data"<<Message_EndLine;
Handle(Interface_InterfaceModel) model = G.Model();
if (model.IsNull() || protocol.IsNull() || WL.IsNull()) return checks;

@ -71,7 +71,6 @@
#include <Interface_ReportEntity.hxx>
#include <Interface_ShareFlags.hxx>
#include <Interface_ShareTool.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <OSD_Path.hxx>
@ -212,7 +211,7 @@ IFSelect_ReturnStatus IFSelect_WorkSession::ReadFile
{
if (thelibrary.IsNull()) return IFSelect_RetVoid;
if (theprotocol.IsNull()) return IFSelect_RetVoid;
Handle(Interface_InterfaceModel) model;
Handle(Interface_InterfaceModel) model =myModel;
IFSelect_ReturnStatus status = IFSelect_RetVoid;
try {
OCC_CATCH_SIGNALS
@ -1076,30 +1075,6 @@ Standard_Integer IFSelect_WorkSession::NextIdentForLabel
// #################################################################
// .... Parametres (Int et Text) ....
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(Standard_Transient) IFSelect_WorkSession::NewParamFromStatic
(const Standard_CString statname, const Standard_CString name)
{
Handle(Standard_Transient) param;
Handle(Interface_Static) stat = Interface_Static::Static(statname);
if (stat.IsNull()) return param;
if (stat->Type() == Interface_ParamInteger) {
Handle(IFSelect_IntParam) intpar = new IFSelect_IntParam;
intpar->SetStaticName (statname);
param = intpar;
} else {
param = stat->HStringValue();
}
if (param.IsNull()) return param;
if ( AddNamedItem (name, param) == 0 ) param.Nullify();
return param;
}
//=======================================================================
//function :
//purpose :
@ -1701,11 +1676,12 @@ Standard_Integer IFSelect_WorkSession::RunTransformer
{
Standard_Integer effect = 0;
if (transf.IsNull() || !IsLoaded()) return effect;
Handle(Interface_InterfaceModel) newmod; // Null au depart
Interface_CheckIterator checks;
checks.SetName("X-STEP WorkSession : RunTransformer");
Standard_Boolean res = transf->Perform
(thegraph->Graph(),theprotocol,checks,newmod);
(thegraph->Graph(),theprotocol,checks,myModel);
if (!checks.IsEmpty(Standard_False)) {
Handle(Message_Messenger) sout = Message::DefaultMessenger();

@ -407,13 +407,6 @@ public:
//! - other values are ignored
Standard_EXPORT Standard_Integer NextIdentForLabel (const Standard_CString label, const Standard_Integer id, const Standard_Integer mode = 0) const;
//! Creates a parameter as being bound to a Static
//! If the Static is Integer, this creates an IntParam bound to
//! it by its name. Else this creates a String which is the value
//! of the Static.
//! Returns a null handle if <statname> is unknown as a Static
Standard_EXPORT Handle(Standard_Transient) NewParamFromStatic (const Standard_CString statname, const Standard_CString name = "");
//! Returns an IntParam, given its Ident in the Session
//! Null result if <id> is not suitable for an IntParam
//! (undefined, or defined for another kind of variable)

@ -39,10 +39,8 @@
#endif
#include <stdio.h>
static int errh = 1;
static void raisecheck (Standard_Failure& theException,Handle(Interface_Check)& ach)
void Interface_CheckTool::raisecheck (Standard_Failure& theException,Handle(Interface_Check)& ach)
{
char mess[100];
sprintf (mess,"** Exception Raised during Check : %s **",
@ -75,6 +73,7 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
theshare (model,protocol)
{
thestat = 0;
errh = 1;
}
@ -88,6 +87,7 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
{
thestat = 0;
thegtool->Reservate(model->NbEntities());
errh = 1;
}
@ -99,6 +99,7 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
Interface_CheckTool::Interface_CheckTool(const Interface_Graph& graph)
: thegtool(graph.Model()->GTool()) , theshare (graph)
{
errh = 1;
}
@ -110,6 +111,7 @@ Interface_CheckTool::Interface_CheckTool(const Interface_Graph& graph)
Interface_CheckTool::Interface_CheckTool(const Handle(Interface_HGraph)& hgraph)
: thegtool(hgraph->Graph().Model()->GTool()) , theshare (hgraph)
{
errh = 1;
}
@ -126,10 +128,10 @@ void Interface_CheckTool::FillCheck(const Handle(Standard_Transient)& ent,
Standard_Integer CN;
if (thegtool->Select(ent,module,CN)) {
// Sans try/catch (fait par l appelant, evite try/catch en boucle)
if (!errh) {
module->CheckCase(CN,ent,sh,ach);
return;
}
//if (!errh) {
// module->CheckCase(CN,ent,sh,ach);
// return;
//}
// Avec try/catch
try {
OCC_CATCH_SIGNALS
@ -200,7 +202,7 @@ Handle(Interface_Check) Interface_CheckTool::Check(const Standard_Integer num)
Handle(Interface_InterfaceModel) model = theshare.Model();
Handle(Standard_Transient) ent = model->Value(num);
Handle(Interface_Check) ach = new Interface_Check(ent); // non filtre par "Warning" : tel quel
errh = 1;
//errh = 1;
FillCheck(ent,theshare,ach);
return ach;
}
@ -221,13 +223,13 @@ void Interface_CheckTool::CheckSuccess (const Standard_Boolean reset)
("Interface Model : Global Check");
Handle(Interface_InterfaceModel) model = theshare.Model();
if (model->GlobalCheck()->NbFails() > 0) throw Interface_CheckFailure("Interface Model : Global Check");
Handle(Interface_Check) modchk = new Interface_Check;
model->VerifyCheck(modchk);
if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),modchk);
if (modchk->HasFailed()) throw Interface_CheckFailure("Interface Model : Verify Check");
if (thestat == 3) return; // tout teste et ca passe
//Handle(Interface_Check) modchk = new Interface_Check;
//model->VerifyCheck(modchk);
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),modchk);
//if (modchk->HasFailed()) throw Interface_CheckFailure("Interface Model : Verify Check");
//if (thestat == 3) return; // tout teste et ca passe
errh = 0; // Pas de try/catch, car justement on raise
//errh = 0; // Pas de try/catch, car justement on raise
Standard_Integer nb = model->NbEntities();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (model->IsErrorEntity(i)) throw Interface_CheckFailure("Interface Model : an Entity is recorded as Erroneous");
@ -262,13 +264,13 @@ Interface_CheckIterator Interface_CheckTool::CompleteCheckList ()
Interface_CheckIterator res;
res.SetModel(model);
Handle(Interface_Check) globch = model->GlobalCheck(); // GlobalCheck Statique
if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
model->VerifyCheck(globch); // GlobalCheck Dynamique
if (globch->HasFailed() || globch->HasWarnings()) res.Add(globch,0);
if (globch->HasFailed()) thestat |= 12;
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
//model->VerifyCheck(globch); // GlobalCheck Dynamique
//if (globch->HasFailed() || globch->HasWarnings()) res.Add(globch,0);
//if (globch->HasFailed()) thestat |= 12;
Standard_Integer i=0,n0 = 1, nb = model->NbEntities();
errh = 0;
//errh = 0;
while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent;
@ -316,11 +318,11 @@ Interface_CheckIterator Interface_CheckTool::CheckList ()
res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
Handle(Interface_Check) globch = model->GlobalCheck();
if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
model->VerifyCheck(globch);
if (globch->HasFailed()) { thestat |= 12; res.Add(globch,0); }
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
//model->VerifyCheck(globch);
//if (globch->HasFailed()) { thestat |= 12; res.Add(globch,0); }
errh = 0;
//errh = 0;
while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent;
@ -368,7 +370,7 @@ Interface_CheckIterator Interface_CheckTool::AnalyseCheckList ()
res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
errh = 0;
//errh = 0;
while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check;
try {
@ -408,7 +410,7 @@ Interface_CheckIterator Interface_CheckTool::VerifyCheckList ()
res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
errh = 0;
//errh = 0;
while (n0 <= nb) {
Handle(Standard_Transient) ent;
Handle(Interface_Check) ach = new Interface_Check;
@ -452,7 +454,7 @@ Interface_CheckIterator Interface_CheckTool::WarningCheckList ()
res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
errh = 0;
//errh = 0;
while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent;

@ -131,10 +131,12 @@ protected:
private:
Standard_EXPORT void raisecheck(Standard_Failure& theException, Handle(Interface_Check)& ach);
Handle(Interface_GTool) thegtool;
Interface_ShareTool theshare;
Standard_Integer thestat;
Standard_Integer errh;
};

@ -1040,3 +1040,75 @@ Handle(TColStd_HSequenceOfHAsciiString) Interface_InterfaceModel::ListTemplates
}
return list;
}
//=======================================================================
//function : GetParam
//purpose :
//=======================================================================
Handle(Interface_Static) Interface_InterfaceModel::GetParam
(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam;
if (myParamMap.IsBound(theParamName))
{
Handle(Standard_Transient) result;
myParamMap.Find(theParamName, result);
if (!result.IsNull())
aParam = Handle(Interface_Static)::DownCast(result);
}
if (aParam.IsNull())
{
#ifdef OCCT_DEBUG
cout << "Warning: Incorrect parameter :" << name << endl;
#endif
}
return aParam;
}
//=======================================================================
//function : GetParam
//purpose :
//=======================================================================
void Interface_InterfaceModel::AddParam
(const Standard_CString theParamName, Handle(Interface_Static)& theParam)
{
myParamMap.Bind(theParamName, theParam);
}
//=======================================================================
//function : AllParameters
//purpose :
//=======================================================================
const NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>& Interface_InterfaceModel::AllParameters()
{
return myParamMap;
}
//=======================================================================
//function : IVal
//purpose :
//=======================================================================
Standard_Integer Interface_InterfaceModel::IVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? 0 : aParam->IntegerValue());
}
//=======================================================================
//function : RVal
//purpose :
//=======================================================================
Standard_Real Interface_InterfaceModel::RVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? 0.0 : aParam->RealValue());
}
//=======================================================================
//function : CVal
//purpose :
//=======================================================================
Standard_CString Interface_InterfaceModel::CVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? "" : aParam->CStringValue());
}

@ -27,6 +27,7 @@
#include <Standard_Type.hxx>
#include <Standard_CString.hxx>
#include <Interface_DataState.hxx>
#include <Interface_Static.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
class Interface_Check;
class TCollection_HAsciiString;
@ -398,17 +399,27 @@ public:
//! Returns the complete list of names attached to template models
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) ListTemplates();
//! Returns parameter for translation by its name
Standard_EXPORT Handle(Interface_Static) GetParam(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Integer IVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Real RVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_CString CVal(const Standard_CString theParamName) const;
//! Adds parameters in the mopdel
Standard_EXPORT void AddParam(const Standard_CString theParamName, Handle(Interface_Static)& theParam);
//! Returns all available parameters for translation
Standard_EXPORT const NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>& AllParameters();
DEFINE_STANDARD_RTTIEXT(Interface_InterfaceModel,Standard_Transient)
protected:
//! Defines empty InterfaceModel, ready to be filled
Standard_EXPORT Interface_InterfaceModel();
NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)> myParamMap;
private:

@ -19,6 +19,7 @@
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx>
#include <Standard_Mutex.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(Interface_Static,Interface_TypedValue)
@ -129,8 +130,6 @@ Standard_Boolean Interface_Static::UpdatedStatus () const
return theupdate;
}
// #######################################################################
// ######### DICTIONNAIRE DES STATICS (static sur Static) ##########
@ -153,7 +152,6 @@ Standard_Boolean Interface_Static::Init
return Standard_True;
}
Standard_Boolean Interface_Static::Init
(const Standard_CString family, const Standard_CString name,
const Standard_Character type, const Standard_CString init)
@ -170,30 +168,7 @@ Standard_Boolean Interface_Static::Init
case '&' : {
Handle(Interface_Static) unstat = Interface_Static::Static(name);
if (unstat.IsNull()) return Standard_False;
// Editions : init donne un petit texte d edition, en 2 termes "cmd var" :
// imin <ival> imax <ival> rmin <rval> rmax <rval> unit <def>
// enum <from> ematch <from> eval <cval>
Standard_Integer i,iblc = 0;
for (i = 0; init[i] != '\0'; i ++) if (init[i] == ' ') iblc = i+1;
// Reconnaissance du sous-cas et aiguillage
if (init[0] == 'i' && init[2] == 'i')
unstat->SetIntegerLimit (Standard_False,atoi(&init[iblc]));
else if (init[0] == 'i' && init[2] == 'a')
unstat->SetIntegerLimit (Standard_True ,atoi(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'i')
unstat->SetRealLimit (Standard_False,Atof(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'a')
unstat->SetRealLimit (Standard_True ,Atof(&init[iblc]));
else if (init[0] == 'u')
unstat->SetUnitDef (&init[iblc]);
else if (init[0] == 'e' && init[1] == 'm')
unstat->StartEnum (atoi(&init[iblc]),Standard_True);
else if (init[0] == 'e' && init[1] == 'n')
unstat->StartEnum (atoi(&init[iblc]),Standard_False);
else if (init[0] == 'e' && init[1] == 'v')
unstat->AddEnum (&init[iblc]);
else return Standard_False;
return Standard_True;
return Interface_Static::InitValues(unstat, init);
}
default : return Standard_False;
}
@ -205,14 +180,45 @@ Standard_Boolean Interface_Static::Init
return Standard_True;
}
Standard_Boolean Interface_Static::InitValues(Handle(Interface_Static)& theStatic, const Standard_CString init)
{
// Editions : init donne un petit texte d edition, en 2 termes "cmd var" :
// imin <ival> imax <ival> rmin <rval> rmax <rval> unit <def>
// enum <from> ematch <from> eval <cval>
Standard_Integer i, iblc = 0;
for (i = 0; init[i] != '\0'; i++) if (init[i] == ' ') iblc = i + 1;
// Reconnaissance du sous-cas et aiguillage
if (init[0] == 'i' && init[2] == 'i')
theStatic->SetIntegerLimit(Standard_False, atoi(&init[iblc]));
else if (init[0] == 'i' && init[2] == 'a')
theStatic->SetIntegerLimit(Standard_True, atoi(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'i')
theStatic->SetRealLimit(Standard_False, Atof(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'a')
theStatic->SetRealLimit(Standard_True, Atof(&init[iblc]));
else if (init[0] == 'u')
theStatic->SetUnitDef(&init[iblc]);
else if (init[0] == 'e' && init[1] == 'm')
theStatic->StartEnum(atoi(&init[iblc]), Standard_True);
else if (init[0] == 'e' && init[1] == 'n')
theStatic->StartEnum(atoi(&init[iblc]), Standard_False);
else if (init[0] == 'e' && init[1] == 'v')
theStatic->AddEnum(&init[iblc]);
else return Standard_False;
return Standard_True;
}
Handle(Interface_Static) Interface_Static::Static
(const Standard_CString name)
{
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
Handle(Standard_Transient) result;
MoniTool_TypedValue::Stats().Find(name, result);
return Handle(Interface_Static)::DownCast(result);
}
}
Standard_Boolean Interface_Static::IsPresent (const Standard_CString name)

@ -130,6 +130,9 @@ public:
//! Returns False if <type> does not match this list
Standard_EXPORT static Standard_Boolean Init (const Standard_CString family, const Standard_CString name, const Standard_Character type, const Standard_CString init = "");
//! Edit current <theStatic> with some parameter <init>
Standard_EXPORT static Standard_Boolean InitValues(Handle(Interface_Static)& theStatic, const Standard_CString init);
//! Returns a Static from its name. Null Handle if not present
Standard_EXPORT static Handle(Interface_Static) Static (const Standard_CString name);
@ -250,7 +253,8 @@ public:
//!
//! This allows for instance to set new values after having loaded
//! or reloaded a resource, then to update them as required
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) Items (const Standard_Integer mode = 0, const Standard_CString criter = "");
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) Items (const Standard_Integer mode = 0,
const Standard_CString criter = "");
//! Initializes all standard static parameters, which can be used
//! by every function. statics specific of a norm or a function

@ -18,6 +18,7 @@
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <TCollection_AsciiString.hxx>
#include <Standard_Mutex.hxx>
#include <stdio.h>
#include <string.h>
@ -27,6 +28,8 @@
//=======================================================================
const Handle(Message_Messenger)& Message::DefaultMessenger ()
{
static Standard_Mutex aMutex;
Standard_Mutex::Sentry aLock(aMutex);
static Handle(Message_Messenger) aMessenger = new Message_Messenger;
return aMessenger;
}

@ -17,6 +17,7 @@
#include <Message_Printer.hxx>
#include <Message_PrinterOStream.hxx>
#include <Standard_Mutex.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Message_Messenger,Standard_Transient)
@ -87,6 +88,8 @@ Standard_Boolean Message_Messenger::RemovePrinter (const Handle(Message_Printer)
Standard_Integer Message_Messenger::RemovePrinters (const Handle(Standard_Type)& theType)
{
static Standard_Mutex aMutex;
Standard_Mutex::Sentry aLock(aMutex);
// remove printers from the list
Standard_Integer nb = 0;
for (Message_SequenceOfPrinters::Iterator aPrinterIter (myPrinters); aPrinterIter.More();)

@ -17,6 +17,7 @@
#include <Message_MsgFile.hxx>
#include <TCollection_AsciiString.hxx>
#include <stdio.h>
#include <Standard_Mutex.hxx>
typedef enum
{
@ -26,6 +27,9 @@ typedef enum
Msg_IndefiniteType
} FormatType;
// mutex used to prevent concurrent access to message registry
static Standard_Mutex theMutex;
//=======================================================================
//function : Message_Msg()
//purpose : Constructor
@ -42,6 +46,7 @@ Message_Msg::Message_Msg ()
Message_Msg::Message_Msg (const Message_Msg& theMsg)
{
Standard_Mutex::Sentry aSentry(theMutex);
myMessageBody = theMsg.myMessageBody;
myOriginal = theMsg.myOriginal;
for ( Standard_Integer i = 1, n = theMsg.mySeqOfFormats.Length(); i <=n; i++ )
@ -55,6 +60,7 @@ Message_Msg::Message_Msg (const Message_Msg& theMsg)
Message_Msg::Message_Msg (const Standard_CString theMsgCode)
{
Standard_Mutex::Sentry aSentry(theMutex);
TCollection_AsciiString aKey((char*)theMsgCode);
Set ( Message_MsgFile::Msg(aKey) );
}
@ -66,6 +72,7 @@ Message_Msg::Message_Msg (const Standard_CString theMsgCode)
Message_Msg::Message_Msg (const TCollection_ExtendedString& theMsgCode)
{
Standard_Mutex::Sentry aSentry(theMutex);
Set ( Message_MsgFile::Msg(theMsgCode) );
}
@ -76,6 +83,7 @@ Message_Msg::Message_Msg (const TCollection_ExtendedString& theMsgCode)
void Message_Msg::Set (const Standard_CString theMsg)
{
Standard_Mutex::Sentry aSentry(theMutex);
TCollection_AsciiString aMsg((char*)theMsg);
Set ( aMsg );
}
@ -87,6 +95,7 @@ void Message_Msg::Set (const Standard_CString theMsg)
void Message_Msg::Set (const TCollection_ExtendedString& theMsg)
{
Standard_Mutex::Sentry aSentry(theMutex);
myMessageBody = theMsg;
const Standard_ExtString anExtString = myMessageBody.ToExtString();
@ -157,6 +166,7 @@ void Message_Msg::Set (const TCollection_ExtendedString& theMsg)
Message_Msg& Message_Msg::Arg (const Standard_CString theString)
{
Standard_Mutex::Sentry aSentry(theMutex);
// get location and format
TCollection_AsciiString aFormat;
Standard_Integer aFirst = getFormat ( Msg_StringType, aFormat );
@ -184,6 +194,7 @@ Message_Msg& Message_Msg::Arg (const Standard_CString theString)
Message_Msg& Message_Msg::Arg (const TCollection_ExtendedString& theString)
{
Standard_Mutex::Sentry aSentry(theMutex);
// get location and format
TCollection_AsciiString aFormat;
Standard_Integer aFirst = getFormat ( Msg_StringType, aFormat );
@ -203,6 +214,7 @@ Message_Msg& Message_Msg::Arg (const TCollection_ExtendedString& theString)
Message_Msg& Message_Msg::Arg (const Standard_Integer theValue)
{
Standard_Mutex::Sentry aSentry(theMutex);
// get location and format
TCollection_AsciiString aFormat;
Standard_Integer aFirst = getFormat ( Msg_IntegerType, aFormat );
@ -227,6 +239,7 @@ Message_Msg& Message_Msg::Arg (const Standard_Integer theValue)
Message_Msg& Message_Msg::Arg (const Standard_Real theValue)
{
Standard_Mutex::Sentry aSentry(theMutex);
// get location and format
TCollection_AsciiString aFormat;
Standard_Integer aFirst = getFormat ( Msg_RealType, aFormat );
@ -251,6 +264,7 @@ Message_Msg& Message_Msg::Arg (const Standard_Real theValue)
const TCollection_ExtendedString& Message_Msg::Get ()
{
Standard_Mutex::Sentry aSentry(theMutex);
// remove all non-initialised format specifications
Standard_Integer i, anIncrement = 0;
static const TCollection_ExtendedString anUnknown ("UNKNOWN");
@ -279,6 +293,7 @@ const TCollection_ExtendedString& Message_Msg::Get ()
Standard_Integer Message_Msg::getFormat (const Standard_Integer theType,
TCollection_AsciiString &theFormat)
{
Standard_Mutex::Sentry aSentry(theMutex);
for (Standard_Integer i = 1; i <= mySeqOfFormats.Length(); i += 3)
if (mySeqOfFormats(i) == theType)
{
@ -307,6 +322,7 @@ void Message_Msg::replaceText (const Standard_Integer theFirst,
const Standard_Integer theNb,
const TCollection_ExtendedString &theStr)
{
Standard_Mutex::Sentry aSentry(theMutex);
myMessageBody.Remove ( theFirst, theNb );
myMessageBody.Insert ( theFirst, theStr );

@ -215,6 +215,7 @@ static Standard_Integer GetFileSize (FILE *theFile)
Standard_Boolean Message_MsgFile::LoadFile (const Standard_CString theFileName)
{
Standard_Mutex::Sentry aSentry(theMutex);
if (theFileName == NULL || * theFileName == '\0') return Standard_False;
// Open the file
@ -279,6 +280,7 @@ Standard_Boolean Message_MsgFile::LoadFromEnv (const Standard_CString theEnvName
const Standard_CString theFileName,
const Standard_CString theLangExt)
{
Standard_Mutex::Sentry aSentry(theMutex);
TCollection_AsciiString aLangExt (theLangExt != NULL ? theLangExt : "");
if (aLangExt.IsEmpty())
{
@ -322,6 +324,7 @@ Standard_Boolean Message_MsgFile::LoadFromEnv (const Standard_CString theEnvName
Standard_Boolean Message_MsgFile::LoadFromString (const Standard_CString theContent,
const Standard_Integer theLength)
{
Standard_Mutex::Sentry aSentry(theMutex);
Standard_Integer aStringSize = theLength >= 0 ? theLength : (Standard_Integer )strlen (theContent);
NCollection_Buffer aBuffer (NCollection_BaseAllocator::CommonBaseAllocator());
if (aStringSize <= 0 || !aBuffer.Allocate (aStringSize + 2))
@ -345,10 +348,8 @@ Standard_Boolean Message_MsgFile::LoadFromString (const Standard_CString theCont
Standard_Boolean Message_MsgFile::AddMsg (const TCollection_AsciiString& theKeyword,
const TCollection_ExtendedString& theMessage)
{
Message_DataMapOfExtendedString& aDataMap = ::msgsDataMap();
Standard_Mutex::Sentry aSentry(theMutex);
aDataMap.Bind (theKeyword, theMessage);
Message_DataMapOfExtendedString& aDataMap = ::msgsDataMap(); aDataMap.Bind (theKeyword, theMessage);
return Standard_True;
}
@ -371,6 +372,7 @@ const TCollection_ExtendedString &Message_MsgFile::Msg (const Standard_CString t
Standard_Boolean Message_MsgFile::HasMsg (const TCollection_AsciiString& theKeyword)
{
Standard_Mutex::Sentry aSentry(theMutex);
return ::msgsDataMap().IsBound (theKeyword);
}
@ -381,9 +383,9 @@ Standard_Boolean Message_MsgFile::HasMsg (const TCollection_AsciiString& theKeyw
const TCollection_ExtendedString &Message_MsgFile::Msg (const TCollection_AsciiString& theKeyword)
{
Standard_Mutex::Sentry aSentry(theMutex);
// find message in the map
Message_DataMapOfExtendedString& aDataMap = ::msgsDataMap();
Standard_Mutex::Sentry aSentry (theMutex);
// if message is not found, generate error message and add it to the map to minimize overhead
// on consequent calls with the same key

@ -58,7 +58,6 @@
#include <OSD_ThreadPool.hxx>
#include <STEPCAFControl_Writer.hxx>
#include <STEPControl_StepModelType.hxx>
#include <Interface_Static.hxx>
#include <IFSelect_ReturnStatus.hxx>
#include <Standard_Failure.hxx>
#include <TColgp_HArray1OfPnt2d.hxx>
@ -91,6 +90,7 @@
#include <BRepFeat_SplitShape.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <TColStd_PackedMapOfInteger.hxx>
#include <StepData_StepModel.hxx>
#if ! defined(_WIN32)
extern ViewerTest_DoubleMapOfInteractiveAndName& GetMapOfAIS();
@ -2561,10 +2561,13 @@ static Standard_Integer OCC7141 (Draw_Interpretor& di, Standard_Integer argc, co
shapeTool = XCAFDoc_DocumentTool::ShapeTool(document->Main());
shapeTool->AddShape(AddTestStructure(nCount), Standard_True);
STEPControl_StepModelType mode = STEPControl_AsIs;
if (!Interface_Static::SetIVal("write.step.assembly",1)) { //assembly mode
Handle(StepData_StepModel) aModel =writer.ChangeWriter().Model();
Handle(Interface_Static) aParam = aModel->GetParam("write.step.assembly");
if (aParam.IsNull()) { //assembly mode
di << "Failed to set assembly mode for step data\n\n";
return 0;
}
aParam->SetIntegerValue(1);
try {
OCC_CATCH_SIGNALS
if( writer.Transfer(document, mode)) {

@ -22,12 +22,14 @@
/// #include <EuclidStandard.hxx>
static Handle(RWHeaderSection_ReadWriteModule) rwm;
static Handle(RWHeaderSection_GeneralModule) rwg;
static int THE_RWHeaderSection_init = 0;
void RWHeaderSection::Init()
{
/// EuclidStandard::Init();
Handle(HeaderSection_Protocol) proto = HeaderSection::Protocol();
Handle(HeaderSection_Protocol) proto = new HeaderSection_Protocol;
StepData::AddHeaderProtocol(proto);
if (rwm.IsNull()) rwm = new RWHeaderSection_ReadWriteModule;
if (rwg.IsNull()) rwg = new RWHeaderSection_GeneralModule;

@ -35,10 +35,10 @@
IMPLEMENT_STANDARD_RTTIEXT(RWHeaderSection_ReadWriteModule,StepData_ReadWriteModule)
// -- General Declarations (Recognize, StepType) ---
static TCollection_AsciiString PasReco(""); // neutralise StartEntity de SW
static TCollection_AsciiString Reco_FileName ("FILE_NAME");
static TCollection_AsciiString Reco_FileDescription ("FILE_DESCRIPTION");
static TCollection_AsciiString Reco_FileSchema ("FILE_SCHEMA");
TCollection_AsciiString PasReco(""); // neutralise StartEntity de SW
TCollection_AsciiString Reco_FileName ("FILE_NAME");
TCollection_AsciiString Reco_FileDescription ("FILE_DESCRIPTION");
TCollection_AsciiString Reco_FileSchema ("FILE_SCHEMA");
// -- Definition of the libraries --

@ -18,22 +18,24 @@
#include <RWStepAP214.hxx>
#include <RWStepAP214_GeneralModule.hxx>
#include <RWStepAP214_ReadWriteModule.hxx>
#include <StepAP214.hxx>
#include <StepAP214_Protocol.hxx>
#include <StepData_WriterLib.hxx>
#include <Standard_Mutex.hxx>
static int THE_RWStepAP214_init = 0;
void RWStepAP214::Init()
void RWStepAP214::Init(const Handle(StepAP214_Protocol)& theProto)
{
static Standard_Mutex aPars;
{
if (THE_RWStepAP214_init)
{
return;
}
THE_RWStepAP214_init = 1;
RWHeaderSection::Init();
Handle(StepAP214_Protocol) proto = StepAP214::Protocol();
Interface_GeneralLib::SetGlobal (new RWStepAP214_GeneralModule,proto);
Interface_ReaderLib::SetGlobal (new RWStepAP214_ReadWriteModule,proto);
StepData_WriterLib::SetGlobal (new RWStepAP214_ReadWriteModule,proto);
Interface_GeneralLib::SetGlobal(new RWStepAP214_GeneralModule, theProto);
Interface_ReaderLib::SetGlobal(new RWStepAP214_ReadWriteModule, theProto);
StepData_WriterLib::SetGlobal(new RWStepAP214_ReadWriteModule, theProto);
}
}

@ -20,6 +20,7 @@
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <StepAP214_Protocol.hxx>
class RWStepAP214_ReadWriteModule;
class RWStepAP214_GeneralModule;
@ -60,7 +61,7 @@ public:
//! enforced the initialisation of the libraries
Standard_EXPORT static void Init();
Standard_EXPORT static void Init(const Handle(StepAP214_Protocol)& theProto);

@ -2048,8 +2048,8 @@ static TCollection_AsciiString Reco_CameraModelD3MultiClippingIntersection("CAME
static TCollection_AsciiString Reco_CameraModelD3MultiClippingUnion("CAMERA_MODEL_D3_MULTI_CLIPPING_UNION");
// -- Definition of the libraries --
static NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typenums;
static NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typeshor;
//static NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typenums;
//static NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typeshor;
RWStepAP214_ReadWriteModule::RWStepAP214_ReadWriteModule ()
{

@ -24,7 +24,8 @@
#include <Standard_Integer.hxx>
#include <TColStd_SequenceOfAsciiString.hxx>
#include <Standard_Boolean.hxx>
class TCollection_AsciiString;
#include <NCollection_DataMap.hxx>
#include <TCollection_AsciiString.hxx>
class StepData_StepReaderData;
class Interface_Check;
class Standard_Transient;
@ -76,7 +77,8 @@ protected:
private:
NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typenums;
NCollection_DataMap<TCollection_AsciiString, Standard_Integer> typeshor;
};

@ -13,8 +13,6 @@
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Interface_Static.hxx>
#include <Standard_Type.hxx>
#include <STEPCAFControl_ActorWrite.hxx>
#include <STEPCAFControl_Controller.hxx>
@ -31,55 +29,3 @@ STEPCAFControl_Controller::STEPCAFControl_Controller ()
Handle(STEPCAFControl_ActorWrite) ActWrite = new STEPCAFControl_ActorWrite;
myAdaptorWrite = ActWrite;
}
//=======================================================================
//function : Init
//purpose :
//=======================================================================
Standard_Boolean STEPCAFControl_Controller::Init ()
{
static Standard_Boolean inic = Standard_False;
if (inic) return Standard_True;
inic = Standard_True;
// self-registering
Handle(STEPCAFControl_Controller) STEPCTL = new STEPCAFControl_Controller;
// do XSAlgo::Init, cause it does not called before.
XSAlgo::Init();
// do something to avoid warnings...
STEPCTL->AutoRecord();
//-----------------------------------------------------------
// Few variables for advanced control of translation process
//-----------------------------------------------------------
// Indicates whether to write sub-shape names to 'Name' attributes of
// STEP Representation Items
Interface_Static::Init ("stepcaf", "write.stepcaf.subshapes.name", 'e', "");
Interface_Static::Init ("stepcaf", "write.stepcaf.subshapes.name", '&', "enum 0");
Interface_Static::Init ("stepcaf", "write.stepcaf.subshapes.name", '&', "eval Off"); // 0
Interface_Static::Init ("stepcaf", "write.stepcaf.subshapes.name", '&', "eval On"); // 1
Interface_Static::SetIVal("write.stepcaf.subshapes.name", 0); // Disabled by default
// Indicates whether to read sub-shape names from 'Name' attributes of
// STEP Representation Items
Interface_Static::Init ("stepcaf", "read.stepcaf.subshapes.name", 'e', "");
Interface_Static::Init ("stepcaf", "read.stepcaf.subshapes.name", '&', "enum 0");
Interface_Static::Init ("stepcaf", "read.stepcaf.subshapes.name", '&', "eval Off"); // 0
Interface_Static::Init ("stepcaf", "read.stepcaf.subshapes.name", '&', "eval On"); // 1
Interface_Static::SetIVal("read.stepcaf.subshapes.name", 0); // Disabled by default
// STEP file encoding for names translation
// Note: the numbers should be consistent with Resource_FormatType enumeration
Interface_Static::Init ("step", "read.stepcaf.codepage", 'e', "");
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "enum 0");
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval SJIS"); // Resource_FormatType_SJIS
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval EUC"); // Resource_FormatType_EUC
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval ANSI"); // Resource_FormatType_ANSI
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval GB"); // Resource_FormatType_GB
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval UTF8"); // Resource_FormatType_UTF8
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval SystemLocale"); // Resource_FormatType_SystemLocale
Interface_Static::SetCVal ("read.stepcaf.codepage", "UTF8");
return Standard_True;
}

@ -39,13 +39,6 @@ public:
//! Initializes the use of STEP Norm (the first time)
Standard_EXPORT STEPCAFControl_Controller();
//! Standard Initialisation. It creates a Controller for STEP-XCAF
//! and records it to various names, available to select it later
//! Returns True when done, False if could not be done
Standard_EXPORT static Standard_Boolean Init();
DEFINE_STANDARD_RTTIEXT(STEPCAFControl_Controller,STEPControl_Controller)

@ -22,7 +22,6 @@
#include <Interface_InterfaceModel.hxx>
#include <StepData_StepModel.hxx>
#include <HeaderSection_FileSchema.hxx>
#include <Interface_Static.hxx>
#include <NCollection_DataMap.hxx>
#include <OSD_Path.hxx>
#include <Quantity_Color.hxx>
@ -329,7 +328,7 @@ STEPCAFControl_Reader::STEPCAFControl_Reader()
myMatMode(Standard_True),
myViewMode(Standard_True)
{
STEPCAFControl_Controller::Init();
Init(new XSControl_WorkSession, new STEPCAFControl_Controller);
mySourceCodePage = (Resource_FormatType )Interface_Static::IVal ("read.stepcaf.codepage");
}
@ -339,8 +338,8 @@ STEPCAFControl_Reader::STEPCAFControl_Reader()
//purpose :
//=======================================================================
STEPCAFControl_Reader::STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean scratch)
STEPCAFControl_Reader::STEPCAFControl_Reader (const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean theScratch)
: mySourceCodePage (Resource_FormatType_UTF8),
myColorMode(Standard_True),
myNameMode(Standard_True),
@ -351,9 +350,27 @@ STEPCAFControl_Reader::STEPCAFControl_Reader(const Handle(XSControl_WorkSession)
myMatMode(Standard_True),
myViewMode(Standard_True)
{
STEPCAFControl_Controller::Init();
mySourceCodePage = (Resource_FormatType )Interface_Static::IVal ("read.stepcaf.codepage");
Init(WS, scratch);
Init(theWS, new STEPCAFControl_Controller, theScratch);
}
//=======================================================================
//function : STEPCAFControl_Reader
//purpose :
//=======================================================================
STEPCAFControl_Reader::STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch) :
myColorMode(Standard_True),
myNameMode(Standard_True),
myLayerMode(Standard_True),
myPropsMode(Standard_True),
mySHUOMode(Standard_False),
myGDTMode(Standard_True),
myMatMode(Standard_True),
myViewMode(Standard_True)
{
Init(theWS, theController, theScratch);
}
@ -362,11 +379,14 @@ STEPCAFControl_Reader::STEPCAFControl_Reader(const Handle(XSControl_WorkSession)
//purpose :
//=======================================================================
void STEPCAFControl_Reader::Init(const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean scratch)
void STEPCAFControl_Reader::Init (const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch)
{
// necessary only in Writer, to set good actor: WS->SelectNorm ( "STEP" );
myReader.SetWS(WS, scratch);
myCAFController = Handle(STEPCAFControl_Controller)::DownCast(theController);
STEPControl_Reader aReader(theWS, theController, theScratch);
myReader = aReader;
myFiles.Clear();
}
@ -840,8 +860,7 @@ Handle(STEPCAFControl_ExternFile) STEPCAFControl_Reader::ReadExternFile(const St
// create new WorkSession and Reader
Handle(XSControl_WorkSession) newWS = new XSControl_WorkSession;
newWS->SelectNorm("STEP");
STEPControl_Reader sr(newWS, Standard_False);
STEPControl_Reader sr ( newWS, myCAFController, Standard_False );
// start to fill the resulting ExternFile structure
Handle(STEPCAFControl_ExternFile) EF = new STEPCAFControl_ExternFile;
@ -4478,7 +4497,7 @@ void STEPCAFControl_Reader::ExpandSubShapes(const Handle(XCAFDoc_ShapeTool)& Sha
TColStd_MapOfTransient aRepItems;
// Read translation control variables
Standard_Boolean doReadSNames = (Interface_Static::IVal("read.stepcaf.subshapes.name") > 0);
Standard_Boolean doReadSNames = (myReader.Model()->IVal("read.stepcaf.subshapes.name") > 0);
if (!doReadSNames)
return;

@ -21,6 +21,7 @@
#include <IFSelect_ReturnStatus.hxx>
#include <TDF_LabelSequence.hxx>
#include <TopTools_MapOfShape.hxx>
#include <STEPCAFControl_Controller.hxx>
#include <STEPCAFControl_DataMapOfShapePD.hxx>
#include <STEPCAFControl_DataMapOfPDExternFile.hxx>
#include <XCAFDoc_DataMapOfShapeLabel.hxx>
@ -69,11 +70,14 @@ public:
//! Creates a reader tool and attaches it to an already existing Session
//! Clears the session if it was not yet set for STEP
Standard_EXPORT STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
Standard_EXPORT STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean theScratch = Standard_True);
//! Clears the internal data structures and attaches to a new session
//! Creates a reader tool and attaches it to an already existing Session and controller
//! Clears the session if it was not yet set for STEP
Standard_EXPORT void Init (const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
Standard_EXPORT STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch = Standard_True);
//! Loads a file and returns the read status
//! Provided for use like single-file reader
@ -175,6 +179,11 @@ public:
protected:
//! Inits a reader with following session and controller
Standard_EXPORT void Init(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch = Standard_True);
//! Translates STEP file already loaded into the reader
//! into the document
//! If num==0, translates all roots, else only root number num
@ -293,6 +302,7 @@ private:
Standard_Boolean myMatMode;
Standard_Boolean myViewMode;
NCollection_DataMap<Handle(Standard_Transient), TDF_Label> myGDTMap;
Handle(STEPCAFControl_Controller) myCAFController;
};

@ -280,9 +280,7 @@ STEPCAFControl_Writer::STEPCAFControl_Writer () :
myGDTMode ( Standard_True ),
myMatMode ( Standard_True )
{
STEPCAFControl_Controller::Init();
Handle(XSControl_WorkSession) WS = new XSControl_WorkSession;
Init ( WS );
Init(new XSControl_WorkSession, new STEPCAFControl_Controller);
}
@ -291,8 +289,8 @@ STEPCAFControl_Writer::STEPCAFControl_Writer () :
//purpose :
//=======================================================================
STEPCAFControl_Writer::STEPCAFControl_Writer (const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean scratch) :
STEPCAFControl_Writer::STEPCAFControl_Writer(const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean theScratch) :
myColorMode(Standard_True),
myNameMode(Standard_True),
myLayerMode(Standard_True),
@ -301,21 +299,40 @@ STEPCAFControl_Writer::STEPCAFControl_Writer (const Handle(XSControl_WorkSession
myGDTMode(Standard_True),
myMatMode(Standard_True)
{
STEPCAFControl_Controller::Init();
Init ( WS, scratch );
Init(theWS, new STEPCAFControl_Controller, theScratch);
}
//=======================================================================
//function : STEPCAFControl_Reader
//purpose :
//=======================================================================
STEPCAFControl_Writer::STEPCAFControl_Writer(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch) :
myColorMode(Standard_True),
myNameMode(Standard_True),
myLayerMode(Standard_True),
myPropsMode(Standard_True),
mySHUOMode(Standard_True),
myGDTMode(Standard_True),
myMatMode(Standard_True)
{
Init(theWS, theController, theScratch);
}
//=======================================================================
//function : Init
//purpose :
//=======================================================================
void STEPCAFControl_Writer::Init (const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean scratch)
void STEPCAFControl_Writer::Init(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch)
{
WS->SelectNorm ( "STEP" );
myWriter.SetWS (WS,scratch);
myCAFController = Handle(STEPCAFControl_Controller)::DownCast(theController);
STEPControl_Writer aWriter(theWS, theController, theScratch);
myWriter = aWriter;
myFiles.Clear();
myLabEF.Clear();
myLabels.Clear();
@ -510,7 +527,15 @@ Standard_Boolean STEPCAFControl_Writer::Transfer (STEPControl_Writer &writer,
Handle(STEPCAFControl_ActorWrite)::DownCast ( writer.WS()->NormAdaptor()->ActorWrite() );
// translate free top-level shapes of the DECAF document
Standard_Integer ap = Interface_Static::IVal ("write.step.schema");
Handle(StepData_StepModel) aModel = writer.Model();
if (Actor.IsNull())
{
return Standard_False;
}
Standard_Integer ap = aModel->IVal("write.step.schema");
TDF_LabelSequence sublabels;
for ( Standard_Integer i=1; i <= labels.Length(); i++ ) {
TDF_Label L = labels.Value(i);
@ -585,7 +610,7 @@ Standard_Boolean STEPCAFControl_Writer::Transfer (STEPControl_Writer &writer,
// translate main assembly structure
/*
if ( ap == 3 ) { // if AP203, switch to AP214
Interface_Static::SetCVal ("write.step.schema", "AP214DIS");
myCAFController->GetParam("write.step.schema")->SetCStringValue("AP214DIS");
Handle(StepData_StepModel) model =
Handle(StepData_StepModel)::DownCast ( writer.WS()->Model() );
if ( model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileSchema)) ) {
@ -600,11 +625,22 @@ Standard_Boolean STEPCAFControl_Writer::Transfer (STEPControl_Writer &writer,
}
}
*/
Standard_Integer assemblymode = Interface_Static::IVal ("write.step.assembly");
Interface_Static::SetCVal ("write.step.assembly", "On");
Handle(Interface_Static) aParameter = aModel->GetParam("write.step.assembly");
Standard_Integer assemblymode = 0;
if (!aParameter.IsNull())
{
assemblymode = aParameter->IntegerValue();
aParameter->SetCStringValue("On");
}
writer.Transfer ( Sass, STEPControl_AsIs );
Interface_Static::SetIVal ("write.step.assembly", assemblymode);
Interface_Static::SetIVal ("write.step.schema", ap);
if (!aParameter.IsNull())
aParameter->SetIntegerValue(assemblymode);
Handle(Interface_Static) aParamWriteSch = aModel->GetParam("write.step.schema");
if (!aParamWriteSch.IsNull())
aParamWriteSch->SetIntegerValue(ap);
}
}
@ -656,12 +692,14 @@ Standard_Boolean STEPCAFControl_Writer::Transfer (STEPControl_Writer &writer,
// write validation props
// if ( multi && ap ==3 ) {
// Interface_Static::SetCVal ("write.step.schema", "AP214DIS");
// myCAFController->GetParam("write.step.schema")->SetCStringValue("AP214DIS");
// }
if ( GetPropsMode() )
WriteValProps ( writer.WS(), sublabels, multi );
Interface_Static::SetIVal ("write.step.schema", ap);
Handle(Interface_Static) aParam = aModel->GetParam("write.step.schema");
if (!aParam.IsNull())
aParam->SetIntegerValue(ap);
// refresh graph
writer.WS()->ComputeGraph ( Standard_True );
@ -670,7 +708,8 @@ Standard_Boolean STEPCAFControl_Writer::Transfer (STEPControl_Writer &writer,
* Write names for the sub-shapes
* ================================ */
if (Interface_Static::IVal("write.stepcaf.subshapes.name") != 0)
if (aModel->IVal("write.stepcaf.subshapes.name") != 0)
{
const Handle(XSControl_TransferWriter) &TW = this->ChangeWriter().WS()->TransferWriter();
const Handle(Transfer_FinderProcess) &FP = TW->FinderProcess();
@ -759,11 +798,17 @@ TopoDS_Shape STEPCAFControl_Writer::TransferExternFiles (const TDF_Label &L,
EF->SetWS ( newWS );
EF->SetName ( name );
EF->SetLabel ( L );
Standard_Integer assemblymode = Interface_Static::IVal ("write.step.assembly");
Interface_Static::SetCVal ("write.step.assembly", "Off");
Handle(Interface_Static) aParameter = sw.Model()->GetParam("write.step.assembly");
Standard_Integer assemblymode = 0;
if (!aParameter.IsNull())
{
assemblymode = aParameter->IntegerValue();
aParameter->SetCStringValue("Off");
}
const Standard_CString multi = 0;
EF->SetTransferStatus ( Transfer ( sw, Lseq, mode, multi, Standard_True ) );
Interface_Static::SetIVal ("write.step.assembly", assemblymode);
if (!aParameter.IsNull())
aParameter->SetIntegerValue(assemblymode);
myLabEF.Bind ( L, EF );
myFiles.Bind ( name->ToCString(), EF );
@ -812,7 +857,7 @@ Standard_Boolean STEPCAFControl_Writer::WriteExternRefs (const Handle(XSControl_
const Handle(XSControl_TransferWriter) &TW = WS->TransferWriter();
const Handle(Transfer_FinderProcess) &FP = TW->FinderProcess();
STEPConstruct_ExternRefs EFTool ( WS );
Standard_Integer schema = Interface_Static::IVal("write.step.schema");
Standard_Integer schema = WS->Model()->GetParam("write.step.schema")->IntegerValue();
for ( Standard_Integer k=1; k <= labels.Length(); k++ ) {
TDF_Label lab = labels(k);
if ( XCAFDoc_ShapeTool::IsAssembly ( lab ) ) continue; // skip assemblies
@ -1265,7 +1310,7 @@ Standard_Boolean STEPCAFControl_Writer::WriteColors (const Handle(XSControl_Work
std::cerr << "Error: Current Top-Level shape have MDGPR already " << std::endl;
#endif
}
Styles.CreateMDGPR ( Context, aMDGPR );
Styles.CreateMDGPR(Context, aMDGPR, WS->Model());
if (!aMDGPR.IsNull())
myMapCompMDGPR.Bind( aTopSh, aMDGPR );
}
@ -1285,7 +1330,8 @@ Standard_Boolean STEPCAFControl_Writer::WriteColors (const Handle(XSControl_Work
// search for MDGPR of the component top-level shape
if ( myMapCompMDGPR.IsBound( aTopSh )) {
aMDGPR = Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation)::DownCast( myMapCompMDGPR.Find( aTopSh ) );
} else {
}
else {
aMDGPR = new StepVisual_MechanicalDesignGeometricPresentationRepresentation;
Handle(TCollection_HAsciiString) ReprName = new TCollection_HAsciiString ( "" );
aMDGPR->SetName( ReprName );
@ -1911,7 +1957,7 @@ static Standard_Boolean createSHUOStyledItem (const XCAFPrs_Style& style,
std::cout << "Warning: " << __FILE__ << ": Create new MDGPR for SHUO instance" << std::endl;
#endif
Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation) aMDGPR;
Styles.CreateMDGPR ( Context, aMDGPR );
Styles.CreateMDGPR(Context, aMDGPR, WS->Model());
if (!aMDGPR.IsNull())
myMapCompMDGPR.Bind( aTopSh, aMDGPR );
}
@ -4296,3 +4342,13 @@ Standard_Boolean STEPCAFControl_Writer::GetMaterialMode() const
{
return myMatMode;
}
//=======================================================================
//function : GetParam
//purpose :
//=======================================================================
//Handle(Interface_Static) STEPCAFControl_Writer::GetParam
//(const Standard_CString theParamName)
//{
// return myWriter.Model()->GetParam(theParamName);
//}

@ -21,6 +21,7 @@
#include <Standard_Handle.hxx>
#include <STEPControl_Writer.hxx>
#include <STEPCAFControl_Controller.hxx>
#include <STEPCAFControl_DataMapOfLabelShape.hxx>
#include <STEPCAFControl_DataMapOfLabelExternFile.hxx>
#include <Standard_Boolean.hxx>
@ -64,14 +65,17 @@ public:
//! PropsMode to Standard_True.
Standard_EXPORT STEPCAFControl_Writer();
//! Creates a reader tool and attaches it to an already existing Session
//! Creates a writer tool and attaches it to an already existing Session
//! Clears the session if it was not yet set for STEP
//! Clears the internal data structures
Standard_EXPORT STEPCAFControl_Writer(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
Standard_EXPORT STEPCAFControl_Writer(const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean scratch = Standard_True);
//! Clears the internal data structures and attaches to a new session
//! Creates a writer tool and attaches it to an already existing Session and controller
//! Clears the session if it was not yet set for STEP
Standard_EXPORT void Init (const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
Standard_EXPORT STEPCAFControl_Writer(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch = Standard_True);
//! Writes all the produced models into file
//! In case of multimodel with extern references,
@ -150,17 +154,32 @@ public:
Standard_EXPORT Standard_Boolean GetMaterialMode() const;
//! Returns parameter for translation by its name
//Standard_EXPORT Handle(Interface_Static) GetParam(const Standard_CString theParamName);
protected:
//! Inits a reader with following session and controller
Standard_EXPORT void Init(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch = Standard_True);
//! Mehod to writing sequence of root assemblies or part of the file specified by use by one label
Standard_EXPORT Standard_Boolean Transfer (const TDF_LabelSequence& L, const STEPControl_StepModelType mode = STEPControl_AsIs, const Standard_CString multi = 0);
Standard_EXPORT Standard_Boolean Transfer (const TDF_LabelSequence& L,
const STEPControl_StepModelType mode = STEPControl_AsIs,
const Standard_CString multi = 0);
//! Transfers labels to a STEP model
//! Returns True if translation is OK
//! isExternFile setting from TransferExternFiles method
Standard_EXPORT Standard_Boolean Transfer (STEPControl_Writer& wr, const TDF_LabelSequence& labels, const STEPControl_StepModelType mode = STEPControl_AsIs, const Standard_CString multi = 0, const Standard_Boolean isExternFile = Standard_False) ;
Standard_EXPORT Standard_Boolean Transfer (STEPControl_Writer& wr,
const TDF_LabelSequence& labels,
const STEPControl_StepModelType mode = STEPControl_AsIs,
const Standard_CString multi = 0,
const Standard_Boolean isExternFile = Standard_False) ;
//! Parses assembly structure of label L, writes all the simple
//! shapes each to its own file named by name of its label plus
@ -168,7 +187,9 @@ protected:
//! Returns shape representing that assembly structure
//! in the form of nested empty compounds (and a sequence of
//! labels which are newly written nodes of this assembly)
Standard_EXPORT TopoDS_Shape TransferExternFiles (const TDF_Label& L, const STEPControl_StepModelType mode, TDF_LabelSequence& Lseq, const Standard_CString prefix = "");
Standard_EXPORT TopoDS_Shape TransferExternFiles (const TDF_Label& L,
const STEPControl_StepModelType mode,
TDF_LabelSequence& Lseq, const Standard_CString prefix = "");
//! Write external references to STEP
Standard_EXPORT Standard_Boolean WriteExternRefs (const Handle(XSControl_WorkSession)& WS, const TDF_LabelSequence& labels) const;
@ -237,6 +258,7 @@ private:
Handle(StepVisual_DraughtingModel) myGDTPresentationDM;
Handle(StepVisual_HArray1OfPresentationStyleAssignment) myGDTPrsCurveStyle;
Handle(StepRepr_ProductDefinitionShape) myGDTCommonPDS;
Handle(STEPCAFControl_Controller) myCAFController;
};

@ -19,7 +19,6 @@
#include <GeomToStep_MakeAxis2Placement3d.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <StepAP203_CcDesignApproval.hxx>
#include <StepAP203_CcDesignDateAndTimeAssignment.hxx>
#include <StepAP203_CcDesignPersonAndOrganizationAssignment.hxx>
@ -75,13 +74,14 @@ STEPConstruct_ContextTool::STEPConstruct_ContextTool (const Handle(StepData_Step
//purpose :
//=======================================================================
void STEPConstruct_ContextTool::SetModel (const Handle(StepData_StepModel)& aStepModel)
void STEPConstruct_ContextTool::SetModel (const Handle(Interface_InterfaceModel)& aStepModel)
{
myModel = aStepModel;
theAPD.Nullify(); //thePRPC.Nullify();
Standard_Integer i, nb = aStepModel->NbEntities();
Standard_Integer i, nb = myModel->NbEntities();
for(i = 1; i<=nb && theAPD.IsNull(); i ++) {
Handle(Standard_Transient) ent = aStepModel->Value(i);
Handle(Standard_Transient) ent = myModel->Value(i);
if (ent->IsKind(STANDARD_TYPE(StepBasic_ApplicationProtocolDefinition))) {
if (theAPD.IsNull()) theAPD = GetCasted(StepBasic_ApplicationProtocolDefinition, ent);
}
@ -111,7 +111,8 @@ void STEPConstruct_ContextTool::AddAPD (const Standard_Boolean enforce)
Standard_Boolean noapd = theAPD.IsNull();
if (noapd || enforce) theAPD = new StepBasic_ApplicationProtocolDefinition;
switch (Interface_Static::IVal("write.step.schema")) { //j4
Standard_Integer aShema = myModel->IVal("write.step.schema");
switch (aShema) { //j4
default:
case 1:
theAPD->SetApplicationProtocolYear (1997);
@ -147,7 +148,8 @@ void STEPConstruct_ContextTool::AddAPD (const Standard_Boolean enforce)
if (theAPD->Application().IsNull())
theAPD->SetApplication (new StepBasic_ApplicationContext);
Handle(TCollection_HAsciiString) appl;
switch (Interface_Static::IVal("write.step.schema")) { //j4
switch (aShema) { //j4
default:
case 1:
case 2: appl = new TCollection_HAsciiString ( "core data for automotive mechanical design processes" );
@ -356,7 +358,7 @@ void STEPConstruct_ContextTool::AddPRPC (const Standard_Boolean enforce)
Standard_Boolean noprpc = thePRPC.IsNull();
if (noprpc || enforce) {
//:i3 abv 1 Sep 98: ProSTEP TR9: generate PRODUCT_TYPE (derived) instead of PRPC
switch (Interface_Static::IVal("write.step.schema")) { //j4
switch (myModel->GetParam("write.step.schema")->IntegerValue()) { //j4
default:
case 1:
thePRPC = new StepBasic_ProductType;
@ -567,8 +569,10 @@ void STEPConstruct_ContextTool::SetIndex (const Standard_Integer ind)
Handle(TCollection_HAsciiString) STEPConstruct_ContextTool::GetProductName () const
{
Handle(TCollection_HAsciiString) PdtName;
if (Interface_Static::IsSet("write.step.product.name"))
PdtName = new TCollection_HAsciiString(Interface_Static::CVal("write.step.product.name"));
TCollection_AsciiString aName = myModel->CVal("write.step.product.name");
if(!aName.IsEmpty())
PdtName = new TCollection_HAsciiString(aName);
else PdtName = new TCollection_HAsciiString("Product");
for ( Standard_Integer i=1; i <= myLevel.Length(); i++ ) {
@ -596,7 +600,7 @@ Handle(TColStd_HSequenceOfTransient) STEPConstruct_ContextTool::GetRootsForPart
if ( ! SDRTool.PRPC().IsNull() ) seq->Append ( SDRTool.PRPC() );
// for AP203, add required product management data
if ( Interface_Static::IVal("write.step.schema") == 3 ) {
if (myModel->IVal("write.step.schema") == 3 ) {
theAP203.Init ( SDRTool );
seq->Append (theAP203.GetProductCategoryRelationship());
seq->Append (theAP203.GetCreator());
@ -624,9 +628,8 @@ Handle(TColStd_HSequenceOfTransient) STEPConstruct_ContextTool::GetRootsForAssem
Handle(TColStd_HSequenceOfTransient) seq = new TColStd_HSequenceOfTransient;
seq->Append ( assembly.ItemValue() );
// for AP203, write required product management data
if ( Interface_Static::IVal("write.step.schema") == 3 ) {
if (myModel->IVal("write.step.schema") == 3 ) {
theAP203.Init ( assembly.GetNAUO() );
seq->Append (theAP203.GetSecurity());
seq->Append (theAP203.GetClassificationOfficer());

@ -21,6 +21,7 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_InterfaceModel.hxx>
#include <TColStd_SequenceOfInteger.hxx>
#include <STEPConstruct_AP203Context.hxx>
#include <Standard_Boolean.hxx>
@ -55,7 +56,7 @@ public:
//! Initialize ApplicationProtocolDefinition by the first
//! entity of that type found in the model
Standard_EXPORT void SetModel (const Handle(StepData_StepModel)& aStepModel);
Standard_EXPORT void SetModel (const Handle(Interface_InterfaceModel)& aStepModel);
Standard_EXPORT Handle(StepBasic_ApplicationProtocolDefinition) GetAPD();
@ -141,6 +142,7 @@ private:
Handle(StepBasic_ApplicationProtocolDefinition) theAPD;
STEPConstruct_AP203Context theAP203;
Handle(StepGeom_Axis2Placement3d) myAxis;
Handle(Interface_InterfaceModel) myModel;
};

@ -16,7 +16,6 @@
//:j4 gka 16.03.99 S4134
// abv 20.11.99 renamed from StepPDR_SDRtool
#include <Interface_Static.hxx>
#include <StepBasic_ApplicationContext.hxx>
#include <StepBasic_DesignContext.hxx>
#include <StepBasic_HArray1OfProduct.hxx>
@ -59,12 +58,13 @@ STEPConstruct_Part::STEPConstruct_Part()
//purpose :
//=======================================================================
void STEPConstruct_Part::MakeSDR(const Handle(StepShape_ShapeRepresentation)& SR,
const Handle(TCollection_HAsciiString)& aName,
const Handle(StepBasic_ApplicationContext)& AC)
void STEPConstruct_Part::MakeSDR(const Handle(StepShape_ShapeRepresentation)& theShape,
const Handle(TCollection_HAsciiString)& theName,
const Handle(StepBasic_ApplicationContext)& theAppContext,
const Handle(Interface_InterfaceModel)& theModel)
{
// get current schema
Standard_Integer schema = Interface_Static::IVal("write.step.schema");
Standard_Integer schema = theModel->IVal("write.step.schema");
// create PC
Handle(StepBasic_ProductContext) PC;
@ -82,14 +82,14 @@ void STEPConstruct_Part::MakeSDR(const Handle(StepShape_ShapeRepresentation)& SR
Handle(TCollection_HAsciiString) PCname = new TCollection_HAsciiString("");
Handle(TCollection_HAsciiString) PCdisciplineType =
new TCollection_HAsciiString("mechanical");
PC->Init(PCname, AC, PCdisciplineType);
PC->Init(PCname, theAppContext, PCdisciplineType);
// create product
Handle(StepBasic_Product) P = new StepBasic_Product;
Handle(StepBasic_HArray1OfProductContext) PCs = new StepBasic_HArray1OfProductContext(1,1);
PCs->SetValue(1,PC);
Handle(TCollection_HAsciiString) Pdescription = new TCollection_HAsciiString("");
P->Init(aName, aName, Pdescription, PCs);
P->Init(theName, theName, Pdescription, PCs);
// create PDF
Handle(StepBasic_ProductDefinitionFormation) PDF;
@ -123,7 +123,7 @@ void STEPConstruct_Part::MakeSDR(const Handle(StepShape_ShapeRepresentation)& SR
break;
}
Handle(TCollection_HAsciiString) PDClifeCycleStage = new TCollection_HAsciiString("design");
PDC->Init(PDCname, AC, PDClifeCycleStage);
PDC->Init(PDCname, theAppContext, PDClifeCycleStage);
// create PD
Handle(StepBasic_ProductDefinition) PD = new StepBasic_ProductDefinition;
@ -143,11 +143,12 @@ void STEPConstruct_Part::MakeSDR(const Handle(StepShape_ShapeRepresentation)& SR
mySDR = new StepShape_ShapeDefinitionRepresentation;
StepRepr_RepresentedDefinition RD;
RD.SetValue ( PDS );
mySDR->Init(RD, SR);
mySDR->Init(RD, theShape);
// and an associated PRPC
Handle(TCollection_HAsciiString) PRPCName;
switch (Interface_Static::IVal("write.step.schema")) {
switch (schema) {
default:
case 1:
myPRPC = new StepBasic_ProductType;

@ -21,6 +21,7 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Boolean.hxx>
class StepShape_ShapeDefinitionRepresentation;
class StepBasic_ProductRelatedProductCategory;
@ -48,7 +49,10 @@ public:
Standard_EXPORT STEPConstruct_Part();
Standard_EXPORT void MakeSDR (const Handle(StepShape_ShapeRepresentation)& aShape, const Handle(TCollection_HAsciiString)& aName, const Handle(StepBasic_ApplicationContext)& AC);
Standard_EXPORT void MakeSDR (const Handle(StepShape_ShapeRepresentation)& theShape,
const Handle(TCollection_HAsciiString)& theName,
const Handle(StepBasic_ApplicationContext)& theAppContext,
const Handle(Interface_InterfaceModel)& theModel );
Standard_EXPORT void ReadSDR (const Handle(StepShape_ShapeDefinitionRepresentation)& aShape);

@ -20,7 +20,6 @@
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Static.hxx>
#include <Quantity_Color.hxx>
#include <StepBasic_MeasureValueMember.hxx>
#include <STEPConstruct.hxx>
@ -212,8 +211,9 @@ Handle(StepVisual_StyledItem) STEPConstruct_Styles::AddStyle (const TopoDS_Shape
//purpose :
//=======================================================================
Standard_Boolean STEPConstruct_Styles::CreateMDGPR (const Handle(StepRepr_RepresentationContext) &Context,
Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation)& Repr)
Standard_Boolean STEPConstruct_Styles::CreateMDGPR (const Handle(StepRepr_RepresentationContext)& theContext,
Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation)& theMDGPR,
const Handle(Interface_InterfaceModel) theModel)
{
if ( myStyles.Extent() <1 ) return Standard_False;
@ -223,15 +223,16 @@ Standard_Boolean STEPConstruct_Styles::CreateMDGPR (const Handle(StepRepr_Repres
for ( Standard_Integer i=1; i <= myStyles.Extent(); i++ )
elems->SetValue ( i, Handle(StepRepr_RepresentationItem)::DownCast ( myStyles.FindKey(i) ) );
// create new MDGPR
Repr = new StepVisual_MechanicalDesignGeometricPresentationRepresentation;
theMDGPR = new StepVisual_MechanicalDesignGeometricPresentationRepresentation;
Handle(TCollection_HAsciiString) ReprName = new TCollection_HAsciiString ( "" );
Repr->Init ( ReprName, elems, Context );
theMDGPR->Init ( ReprName, elems, theContext );
// record Repr in order to have it written to the file
// Model()->AddWithRefs ( Repr ); add into the model upper
// for AP203, add subschema name
if ( Interface_Static::IVal("write.step.schema") ==3 ) {
if ( theModel->IVal("write.step.schema") == 3 ) {
APIHeaderSection_MakeHeader mkHdr ( Handle(StepData_StepModel)::DownCast ( Model() ) );
Handle(TCollection_HAsciiString) subSchema =
new TCollection_HAsciiString ( "SHAPE_APPEARANCE_LAYER_MIM" );

@ -21,6 +21,7 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_InterfaceModel.hxx>
#include <TColStd_IndexedDataMapOfTransientTransient.hxx>
#include <TColStd_IndexedMapOfTransient.hxx>
#include <TColStd_SequenceOfTransient.hxx>
@ -93,7 +94,9 @@ public:
//! Create MDGPR, fill it with all the styles previously defined,
//! and add it to the model
Standard_EXPORT Standard_Boolean CreateMDGPR (const Handle(StepRepr_RepresentationContext)& Context, Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation)& MDGPR);
Standard_EXPORT Standard_Boolean CreateMDGPR (const Handle(StepRepr_RepresentationContext)& theContext,
Handle(StepVisual_MechanicalDesignGeometricPresentationRepresentation)& theMDGPR,
const Handle(Interface_InterfaceModel) theModel);
//! Create MDGPR, fill it with all the styles previously defined,
//! and add it to the model

@ -17,7 +17,6 @@
//abv 17.11.99: renamed from StepPDR_MakeUnitAndToleranceContext and merged with STEPControl_Unit
//abv 30.02.00: ability to write file in units other than MM
#include <Interface_Static.hxx>
#include <StepBasic_ConversionBasedUnit.hxx>
#include <StepBasic_ConversionBasedUnitAndAreaUnit.hxx>
#include <StepBasic_ConversionBasedUnitAndLengthUnit.hxx>
@ -68,7 +67,8 @@ STEPConstruct_UnitContext::STEPConstruct_UnitContext() : done(Standard_False)
//purpose :
//=======================================================================
void STEPConstruct_UnitContext::Init(const Standard_Real Tol3d)
void STEPConstruct_UnitContext::Init(const Standard_Real Tol3d,
Handle(Interface_InterfaceModel)& theModel)
{
done = Standard_True;
@ -85,7 +85,8 @@ void STEPConstruct_UnitContext::Init(const Standard_Real Tol3d)
Standard_CString uName = 0;
Standard_Boolean hasPref = Standard_True;
StepBasic_SiPrefix siPref = StepBasic_spMilli;
switch ( Interface_Static::IVal ( "write.step.unit" ) ) {
Standard_Integer valunits = theModel->IVal("write.step.unit");
switch (valunits) {
case 1: uName = "INCH"; break;
default:
case 2: break;
@ -106,7 +107,7 @@ void STEPConstruct_UnitContext::Init(const Standard_Real Tol3d)
if ( uName ) { // for non-metric units, create conversion_based_unit
Handle(StepBasic_MeasureValueMember) val = new StepBasic_MeasureValueMember;
val->SetName("LENGTH_UNIT");
val->SetReal ( UnitsMethods::GetLengthFactorValue ( Interface_Static::IVal ( "write.step.unit" ) ) );
val->SetReal(UnitsMethods::GetLengthFactorValue(valunits));
Handle(StepBasic_LengthMeasureWithUnit) measure = new StepBasic_LengthMeasureWithUnit;
StepBasic_Unit Unit;

@ -21,6 +21,7 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Real.hxx>
#include <Standard_Integer.hxx>
@ -47,7 +48,8 @@ public:
//! Creates new context (units are MM and radians,
//! uncertainty equal to Tol3d)
Standard_EXPORT void Init (const Standard_Real Tol3d);
Standard_EXPORT void Init (const Standard_Real Tol3d,
Handle(Interface_InterfaceModel)& theModel);
//! Returns True if Init was called successfully
Standard_EXPORT Standard_Boolean IsDone() const;

@ -19,7 +19,6 @@
#include <gp_Pnt.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <StepBasic_DerivedUnit.hxx>
@ -359,7 +358,8 @@ Standard_Boolean STEPConstruct_ValidationProps::AddProp (const StepRepr_Characte
Model()->AddWithRefs ( PrDR );
// for AP203, add subschema name
if ( Interface_Static::IVal("write.step.schema") ==3 ) {
if (Model()->IVal("write.step.schema") == 3) {
APIHeaderSection_MakeHeader mkHdr(Handle(StepData_StepModel)::DownCast(Model()));
Handle(TCollection_HAsciiString) subSchema =
new TCollection_HAsciiString("GEOMETRIC_VALIDATION_PROPERTIES_MIM");

@ -27,7 +27,6 @@
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <Message_Messenger.hxx>
#include <Message_ProgressSentry.hxx>
#include <OSD_Timer.hxx>
@ -111,7 +110,6 @@
#include <TransferBRep_ShapeBinder.hxx>
#include <UnitsMethods.hxx>
#include <XSAlgo.hxx>
#include <XSAlgo_AlgoContainer.hxx>
IMPLEMENT_STANDARD_RTTIEXT(STEPControl_ActorRead,Transfer_ActorOfTransientProcess)
@ -200,7 +198,10 @@ namespace {
// Purpose : Empty constructor
// ============================================================================
STEPControl_ActorRead::STEPControl_ActorRead() {}
STEPControl_ActorRead::STEPControl_ActorRead()
{
myXSAlgoContainer = new XSAlgo_AlgoContainer;
}
// ============================================================================
// Method : STEPControl_ActorRead::Recognize
@ -216,7 +217,7 @@ Standard_Boolean STEPControl_ActorRead::Recognize
if (start->IsKind(STANDARD_TYPE(StepRepr_NextAssemblyUsageOccurrence))) return Standard_True;
TCollection_AsciiString aProdMode = Interface_Static::CVal("read.step.product.mode");
TCollection_AsciiString aProdMode = myModel->CVal("read.step.product.mode");
if(!aProdMode.IsEqual("ON"))
if(start->IsKind(STANDARD_TYPE(StepShape_ShapeDefinitionRepresentation))) return Standard_True;
@ -393,7 +394,7 @@ static void getListSDR(const Handle(StepRepr_ShapeAspect)& sa,
//purpose : Find all SDRs related to given PDS
//=======================================================================
static void getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
void STEPControl_ActorRead::getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
Handle(TColStd_HSequenceOfTransient)& listSDR,
Handle(TColStd_HSequenceOfTransient)& listNAUO,
Handle(TColStd_HSequenceOfTransient)& listSDRAspect,
@ -402,7 +403,7 @@ static void getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
// Flag indicating preferred shape representation type, to be chosen if
// several different representations are attached to the same shape
Standard_Integer delta = 100;
Standard_Integer ICS = Interface_Static::IVal("read.step.shape.repr");
Standard_Integer ICS = myModel->IVal("read.step.shape.repr");
Standard_Integer nbSDR0 = listSDR->Length();
// Iterate by entities referring PDS
@ -502,12 +503,12 @@ static void getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
// Flag indicating whether SDRs associated with the product`s main SDR
// by SRRs (which correspond to hybrid model representation in AP203 since 1998)
// should be taken into account
Standard_Integer readSRR = Interface_Static::IVal("read.step.shape.relationship");
Standard_Integer readSRR = myModel->IVal("read.step.shape.relationship");
// Flag indicating whether SDRs associated with the product`s main SDR
// by SAs (which correspond to hybrid model representation in AP203 before 1998)
// should be taken into account
Standard_Integer readSA = Interface_Static::IVal("read.step.shape.aspect");
Standard_Integer readSA = myModel->IVal("read.step.shape.aspect");
if ( ! readSA )
listSDRAspect->Clear();
@ -521,7 +522,7 @@ static void getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
// possibly attached directly to intermediate assemblies (1)
// Special mode (4) is used to translate shape attached to this product only,
// ignoring sub-assemblies if any
Standard_Integer readAssembly = Interface_Static::IVal("read.step.assembly.level");
Standard_Integer readAssembly = myModel->IVal("read.step.assembly.level");
if ( readAssembly ==3 || ( readAssembly ==2 && listNAUO->Length() >0 ) )
listSDR->Clear();
else if ( readAssembly == 4 )
@ -757,7 +758,7 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
return shbinder;
isBound = Standard_False;
Standard_Integer nb = sr->NbItems();
// Used in XSAlgo::AlgoContainer()->ProcessShape (ssv; 13.11.2010)
// Used in myXSAlgoContainer->ProcessShape (ssv; 13.11.2010)
Standard_Integer nbTPitems = TP->NbMapped();
Handle(Message_Messenger) sout = TP->Messenger();
#ifdef TRANSLOG
@ -777,7 +778,7 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
Message_ProgressSentry PS ( TP->GetProgress(), "Sub-assembly", 0, nb, 1 );
// [BEGIN] Proceed with non-manifold topology (ssv; 12.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("read.step.nonmanifold") != 0;
Standard_Boolean isNMMode = myModel->IVal("read.step.nonmanifold") != 0;
Standard_Boolean isManifold = Standard_True;
if ( isNMMode && sr->IsKind(STANDARD_TYPE(StepShape_NonManifoldSurfaceShapeRepresentation)) ) {
isManifold = Standard_False;
@ -789,7 +790,7 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
}
// Special processing for I-DEAS STP case (ssv; 15.11.2010)
else {
Standard_Integer isIDeasMode = Interface_Static::IVal("read.step.ideas");
Standard_Integer isIDeasMode = myModel->IVal("read.step.ideas");
if (isNMMode && myNMTool.IsIDEASCase() && isIDeasMode) {
isManifold = Standard_False;
NM_DETECTED = Standard_True;
@ -836,11 +837,11 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
Handle(Standard_Transient) info;
// IMPORTANT: any fixing on non-manifold topology must be done after the shape is transferred from STEP
TopoDS_Shape fixedResult =
XSAlgo::AlgoContainer()->ProcessShape( comp, myPrecision, myMaxTol,
myXSAlgoContainer->ProcessShape( comp, myPrecision, myMaxTol,
"read.step.resource.name",
"read.step.sequence", info,
TP->GetProgress(), Standard_True);
XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
myXSAlgoContainer->MergeTransferInfo(TP, info, nbTPitems);
if (fixedResult.ShapeType() == TopAbs_COMPOUND)
{
@ -1247,12 +1248,11 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
// Apply ShapeFix (on manifold shapes only. Non-manifold topology is processed separately: ssv; 13.11.2010)
if (isManifold) {
Handle(Standard_Transient) info;
mappedShape =
XSAlgo::AlgoContainer()->ProcessShape( mappedShape, myPrecision, myMaxTol,
mappedShape = myXSAlgoContainer->ProcessShape( mappedShape, myPrecision, myMaxTol,
"read.step.resource.name",
"read.step.sequence", info,
TP->GetProgress() );
XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
myXSAlgoContainer->MergeTransferInfo(TP, info, nbTPitems);
}
}
found = !mappedShape.IsNull();
@ -1378,15 +1378,15 @@ Handle(TransferBRep_ShapeBinder) STEPControl_ActorRead::TransferEntity(const Han
TopoDS_Shape S = sb->Result();
Handle(Standard_Transient) info;
TopoDS_Shape shape = XSAlgo::AlgoContainer()->ProcessShape(S, myPrecision, myMaxTol,
TopoDS_Shape shape = myXSAlgoContainer->ProcessShape(S, myPrecision, myMaxTol,
"read.step.resource.name",
"read.step.sequence", info,
TP->GetProgress());
// TopoDS_Shape shape = XSAlgo::AlgoContainer()->PerformFixShape( S, TP, myPrecision, myMaxTol );
//TopoDS_Shape shape = myXSAlgoContainer->PerformFixShape( S, TP, myPrecision, myMaxTol );
if (shape != S)
sb->SetResult(shape);
XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
myXSAlgoContainer->MergeTransferInfo(TP, info, nbTPitems);
}
@ -1413,13 +1413,13 @@ Handle(Transfer_Binder) STEPControl_ActorRead::TransferShape(const Handle(Standa
const Standard_Boolean isManifold)
{
if (start.IsNull()) return NullResult();
XSAlgo::AlgoContainer()->PrepareForTransfer();
myXSAlgoContainer->PrepareForTransfer();
Handle(Message_Messenger) sout = TP->Messenger();
#ifdef TRANSLOG
// POUR MISE AU POINT, a supprimer ensuite
if (TP->TraceLevel() > 1)
sout<<" -- Actor : Transfer Ent.n0 "<<TP->Model()->Number(start)<<" Type "<<start->DynamicType()->Name()<<Message_EndLine;
sout<<" -- Actor : Transfer Ent.n0 "<<myModel->Number(start)<<" Type "<<start->DynamicType()->Name()<<Message_EndLine;
#endif
Handle(TransferBRep_ShapeBinder) shbinder;
@ -1428,7 +1428,7 @@ Handle(Transfer_Binder) STEPControl_ActorRead::TransferShape(const Handle(Standa
// Product Definition Entities
// They should be treated with Design Manager
// case ShapeDefinitionRepresentation if ProductMode != ON
TCollection_AsciiString aProdMode = Interface_Static::CVal("read.step.product.mode");
TCollection_AsciiString aProdMode = myModel->CVal("read.step.product.mode");
if(!aProdMode.IsEqual("ON") &&
start->IsKind(STANDARD_TYPE(StepShape_ShapeDefinitionRepresentation)))
shbinder = OldWay(start,TP);
@ -1549,7 +1549,7 @@ void STEPControl_ActorRead::PrepareUnits(const Handle(StepRepr_Representation)&
if (!theGUAC.IsNull()) {
stat1 = myUnit.ComputeFactors(theGUAC);
Standard_Integer anglemode = Interface_Static::IVal("step.angleunit.mode");
Standard_Integer anglemode = myModel->IVal("step.angleunit.mode");
Standard_Real angleFactor = ( anglemode == 0 ? myUnit.PlaneAngleFactor() :
anglemode == 1 ? 1. : M_PI/180. );
UnitsMethods::InitializeFactors(myUnit.LengthFactor(),
@ -1564,15 +1564,15 @@ void STEPControl_ActorRead::PrepareUnits(const Handle(StepRepr_Representation)&
}
// myPrecision = Precision::Confusion();
if (Interface_Static::IVal("read.precision.mode") == 1) //:i1 gka S4136 05.04.99
myPrecision = Interface_Static::RVal("read.precision.val");
if (myModel->IVal("read.precision.mode") == 1) //:i1 gka S4136 05.04.99
myPrecision = myModel->RVal("read.precision.val");
else if (myUnit.HasUncertainty())
myPrecision = myUnit.Uncertainty() * myUnit.LengthFactor();
else {
TP->AddWarning(theRepCont,"No Length Uncertainty, value of read.precision.val is taken");
myPrecision = Interface_Static::RVal("read.precision.val");
myPrecision = myModel->RVal("read.precision.val");
}
myMaxTol = Max ( myPrecision, Interface_Static::RVal("read.maxprecision.val") );
myMaxTol = Max ( myPrecision, myModel->RVal("read.maxprecision.val") );
// Assign uncertainty
#ifdef TRANSLOG
if (TP->TraceLevel() > 1)
@ -1588,8 +1588,8 @@ void STEPControl_ActorRead::PrepareUnits(const Handle(StepRepr_Representation)&
void STEPControl_ActorRead::ResetUnits ()
{
UnitsMethods::InitializeFactors ( 1, 1, 1 );
myPrecision = Interface_Static::RVal("read.precision.val");
myMaxTol = Max ( myPrecision, Interface_Static::RVal("read.maxprecision.val") );
myPrecision = myModel->RVal("read.precision.val");
myMaxTol = Max ( myPrecision, myModel->RVal("read.maxprecision.val"));
}
//=======================================================================
@ -1796,3 +1796,13 @@ void STEPControl_ActorRead::computeIDEASClosings(const TopoDS_Compound& comp,
shellClosingsMap.Add(shellA, closingShells);
}
}
//=======================================================================
// Method : SetModel
// Purpose :
//=======================================================================
void STEPControl_ActorRead::SetModel(Handle(Interface_InterfaceModel)& theModel)
{
myModel = theModel;
myXSAlgoContainer->SetModel(theModel);
}

@ -25,8 +25,10 @@
#include <Transfer_ActorOfTransientProcess.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
#include <StepRepr_ProductDefinitionShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
#include <XSAlgo_AlgoContainer.hxx>
class StepRepr_Representation;
class Standard_Transient;
class Transfer_Binder;
@ -76,6 +78,9 @@ public:
//! (mm, radians, read.precision.val, etc.)
Standard_EXPORT void ResetUnits();
//! Sets step model for translations
Standard_EXPORT void SetModel(Handle(Interface_InterfaceModel)& theModel);
//! Computes transformation defined by two axis placements (in MAPPED_ITEM
//! or ITEM_DEFINED_TRANSFORMATION) taking into account their
//! representation contexts (i.e. units, which may be different)
@ -130,10 +135,18 @@ private:
Standard_EXPORT void computeIDEASClosings (const TopoDS_Compound& comp, TopTools_IndexedDataMapOfShapeListOfShape& shellClosingMap);
Standard_EXPORT void getSDR(const Handle(StepRepr_ProductDefinitionShape)& PDS,
Handle(TColStd_HSequenceOfTransient)& listSDR,
Handle(TColStd_HSequenceOfTransient)& listNAUO,
Handle(TColStd_HSequenceOfTransient)& listSDRAspect,
const Handle(Transfer_TransientProcess)& TP);
StepToTopoDS_NMTool myNMTool;
Standard_Real myPrecision;
Standard_Real myMaxTol;
Handle(StepRepr_Representation) mySRContext;
Handle(XSAlgo_AlgoContainer) myXSAlgoContainer;
Handle(Interface_InterfaceModel) myModel;
};

@ -28,7 +28,6 @@
#include <gp_Ax2.hxx>
#include <Interface_Macros.hxx>
#include <Interface_MSG.hxx>
#include <Interface_Static.hxx>
#include <MoniTool_DataMapOfShapeTransient.hxx>
#include <OSD_Timer.hxx>
#include <ShapeAnalysis_ShapeTolerance.hxx>
@ -44,7 +43,6 @@
#include <STEPConstruct_UnitContext.hxx>
#include <STEPControl_ActorWrite.hxx>
#include <STEPControl_StepModelType.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_Axis2Placement3d.hxx>
#include <StepGeom_GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx.hxx>
#include <StepGeom_Point.hxx>
@ -104,7 +102,6 @@
#include <TransferBRep_ShapeMapper.hxx>
#include <UnitsMethods.hxx>
#include <XSAlgo.hxx>
#include <XSAlgo_AlgoContainer.hxx>
IMPLEMENT_STANDARD_RTTIEXT(STEPControl_ActorWrite,Transfer_ActorOfFinderProcess)
@ -231,6 +228,7 @@ STEPControl_ActorWrite::STEPControl_ActorWrite ()
: mygroup (0) , mytoler (-1.)
{
SetMode(STEPControl_ShellBasedSurfaceModel);
myXSAlgoContainer = new XSAlgo_AlgoContainer;
}
//=======================================================================
@ -344,9 +342,10 @@ STEPControl_StepModelType STEPControl_ActorWrite::Mode () const
//purpose :
//=======================================================================
void STEPControl_ActorWrite::SetGroupMode (const Standard_Integer mode)
void STEPControl_ActorWrite::SetGroupMode (const Standard_CString theParameter)
{
if (mode >= 0) mygroup = mode;
Standard_Integer aMode = myModel->IVal(theParameter);
if (aMode >= 0) mygroup = aMode;
}
//=======================================================================
@ -448,7 +447,7 @@ Standard_Boolean STEPControl_ActorWrite::Recognize (const Handle(Transfer_Finde
Handle(Transfer_Binder) STEPControl_ActorWrite::Transfer (const Handle(Transfer_Finder)& start,
const Handle(Transfer_FinderProcess)& FP)
{
XSAlgo::AlgoContainer()->PrepareForTransfer();
myXSAlgoContainer->PrepareForTransfer();
Handle(TransferBRep_ShapeMapper) mapper = Handle(TransferBRep_ShapeMapper)::DownCast(start);
@ -456,20 +455,19 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::Transfer (const Handle(Transfer_
TopoDS_Shape shape = mapper->Value();
// init context
Handle(StepData_StepModel) model = Handle(StepData_StepModel)::DownCast ( FP->Model() );
if ( ! model.IsNull() ) myContext.SetModel ( model ); //: abv 04.11.00: take APD from model
if ( ! myModel.IsNull() ) myContext.SetModel (myModel); //: abv 04.11.00: take APD from model
myContext.AddAPD ( Standard_False ); // update APD
myContext.SetLevel ( 1 ); // set assembly level to 1 (to ensure)
//:S4136: init UnitsMethods to reset angle unit factors (see TopoDSToStep)
Standard_Real lFactor = UnitsMethods::GetLengthFactorValue ( Interface_Static::IVal ( "write.step.unit" ) );
Standard_Real lFactor = UnitsMethods::GetLengthFactorValue (myModel->IVal("write.step.unit"));
lFactor /= UnitsMethods::GetCasCadeLengthUnit();
Standard_Integer anglemode = Interface_Static::IVal("step.angleunit.mode");
Standard_Integer anglemode = myModel->IVal("step.angleunit.mode");
UnitsMethods::InitializeFactors ( lFactor, ( anglemode <= 1 ? 1. : M_PI/180. ), 1. );
// create SDR
STEPConstruct_Part SDRTool;
SDRTool.MakeSDR ( 0, myContext.GetProductName(), myContext.GetAPD()->Application() );
SDRTool.MakeSDR ( 0, myContext.GetProductName(), myContext.GetAPD()->Application(), myModel );
Handle(StepShape_ShapeDefinitionRepresentation) sdr = SDRTool.SDRValue();
// transfer shape
@ -494,7 +492,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::Transfer (const Handle(Transfer_
//==========================================
static Standard_Real UsedTolerance (const Standard_Real mytoler,
Standard_Real STEPControl_ActorWrite::usedTolerance(const Standard_Real theToler,
const TopoDS_Shape& theShape)
{
@ -502,10 +500,10 @@ static Standard_Real UsedTolerance (const Standard_Real mytoler,
// Either from Session, or Computed (Least,Average, or Greatest)
// Then given to TopoDSToStep_Tool
Standard_Real Tol = mytoler;
Standard_Integer tolmod = Interface_Static::IVal("write.precision.mode");
if (Tol <= 0 && tolmod == 2) Tol =
Interface_Static::RVal("write.precision.val");
Standard_Real Tol = theToler;
Standard_Integer tolmod = myModel->IVal("write.precision.mode");
if (Tol <= 0 && tolmod == 2)
Tol = myModel->RVal("write.precision.val");
if (Tol <= 0) {
ShapeAnalysis_ShapeTolerance stu;
Tol = stu.Tolerance(theShape, tolmod);
@ -528,7 +526,7 @@ Standard_Boolean STEPControl_ActorWrite::IsAssembly (TopoDS_Shape &S) const
{
if ( ! GroupMode() || S.ShapeType() != TopAbs_COMPOUND ) return Standard_False;
// PTV 16.09.2002 OCC725 for storing compound of vertices
if (Interface_Static::IVal("write.step.vertex.mode") == 0) {//bug 23950
if (myModel->IVal("write.step.vertex.mode") == 0) {//bug 23950
if (S.ShapeType() == TopAbs_COMPOUND ) {
Standard_Boolean IsOnlyVertices = Standard_True;
TopoDS_Iterator anItr( S );
@ -587,7 +585,9 @@ static Standard_Boolean transferVertex (const Handle(Transfer_FinderProcess)& FP
{
Standard_Boolean IsDone = Standard_False;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_True);
TopoDSToStep_Tool aTool(aMap,
Standard_True,
FP->Model()->IVal("write.surfacecurve.mode"));
TopoDSToStep_MakeStepVertex aMkVrtx ( TopoDS::Vertex(aShVrtx), aTool, FP );
if (!aMkVrtx.IsDone())
@ -643,7 +643,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
return TransferCompound(start, SDR0, FP);
// [BEGIN] Separate manifold topology from non-manifold in group mode 0 (ssv; 18.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0;
Standard_Boolean isNMMode = myModel->IVal("write.step.nonmanifold") != 0;
Handle(Transfer_Binder) aNMBinder;
if (isNMMode && !GroupMode() && theShape.ShapeType() == TopAbs_COMPOUND) {
TopoDS_Compound aNMCompound;
@ -736,7 +736,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
sdr = SDR0;
else {
STEPConstruct_Part SDRTool;
SDRTool.MakeSDR( 0, myContext.GetProductName(), myContext.GetAPD()->Application() );
SDRTool.MakeSDR( 0, myContext.GetProductName(), myContext.GetAPD()->Application(), myModel );
sdr = SDRTool.SDRValue();
}
@ -763,7 +763,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
Handle(TopTools_HSequenceOfShape) RepItemSeq = new TopTools_HSequenceOfShape();
Standard_Boolean isSeparateVertices =
Interface_Static::IVal("write.step.vertex.mode") == 0;//bug 23950
myModel->IVal("write.step.vertex.mode") == 0;//bug 23950
// PTV 16.09.2002 OCC725 separate shape from solo vertices.
Standard_Boolean isOnlyVertices = Standard_False;
if (theShape.ShapeType() == TopAbs_COMPOUND) {
@ -859,7 +859,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
// COMPUTING 3D TOLERANCE
// Either from Session, or Computed (Least,Average, or Greatest)
// Then given to TopoDSToStep_Tool
Standard_Real Tol = UsedTolerance (mytoler,theShape);
Standard_Real Tol = usedTolerance (mytoler,theShape);
// Create a STEP-Entity for each TopoDS_Shape
// according to the current StepModelMode
@ -894,10 +894,10 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
// if ( DMT.IsDone() ) aShape = DMT.ModifiedShape ( aShape );
//// aShape = TopoDSToStep::DirectFaces(xShape);
Handle(Standard_Transient) info;
Standard_Real maxTol = Interface_Static::RVal("read.maxprecision.val");
Standard_Real maxTol = myModel->RVal("read.maxprecision.val");
TopoDS_Shape aShape;
aShape = XSAlgo::AlgoContainer()->ProcessShape(xShape, Tol, maxTol,
aShape = myXSAlgoContainer->ProcessShape(xShape, Tol, maxTol,
"write.step.resource.name",
"write.step.sequence", info,
FP->GetProgress() );
@ -1098,7 +1098,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
//:abv 24Jan99 CAX-IF TRJ3: Update FinderProcess map to take into account shape processing
// UpdateMap ( xShape, CSMT, DMT, FP );
XSAlgo::AlgoContainer()->MergeTransferInfo(FP, info);
myXSAlgoContainer->MergeTransferInfo(FP, info);
}
// - Make Shape Representation
@ -1173,7 +1173,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
GetCasted(StepRepr_RepresentationItem, ItemSeq->Value(rep));
items->SetValue(rep,repit);
}
Standard_Integer ap = Interface_Static::IVal("write.step.schema");
Standard_Integer ap = myModel->IVal("write.step.schema");
Transfer_SequenceOfBinder aSeqBindRelation;
if(ap == 3 && nbs > 1) {
Standard_Integer j = 1;
@ -1201,7 +1201,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
repr1->SetValue(2,items->Value(j));
ShapeRepr1->SetItems(repr1);
STEPConstruct_UnitContext mk1;
mk1.Init(Tol);
mk1.Init(Tol, myModel);
ShapeRepr1->SetContextOfItems(mk1.Value()); // la tolerance, voir au debut
ShapeRepr1->SetName (new TCollection_HAsciiString(""));
@ -1234,7 +1234,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran
// init representation
STEPConstruct_UnitContext mk;
mk.Init(Tol);
mk.Init(Tol, myModel);
shapeRep->SetContextOfItems(mk.Value()); // la tolerance, voir au debut
shapeRep->SetName (new TCollection_HAsciiString(""));
@ -1278,7 +1278,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferCompound (const Handle(T
TopoDS_Shape theShape = mapper->Value();
// Inspect non-manifold topology case (ssv; 10.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0;
Standard_Boolean isNMMode = myModel->IVal("write.step.nonmanifold") != 0;
Standard_Boolean isManifold;
if (isNMMode)
isManifold = IsManifoldShape(theShape);
@ -1290,7 +1290,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferCompound (const Handle(T
// Prepare a collection for non-manifold group of shapes
Handle(TopTools_HSequenceOfShape) NonManifoldGroup = new TopTools_HSequenceOfShape();
Standard_Boolean isSeparateVertices =
(Interface_Static::IVal("write.step.vertex.mode") == 0);//bug 23950
( myModel->GetParam("write.step.vertex.mode")->IntegerValue() == 0);//bug 23950
// PTV OCC725 17.09.2002 -- begin --
Standard_Integer nbFreeVrtx = 0;
TopoDS_Compound aCompOfVrtx;
@ -1379,9 +1379,9 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferCompound (const Handle(T
for (Standard_Integer rep = 1; rep <= nsub; rep++)
items->SetValue(rep,GetCasted(StepRepr_RepresentationItem, ItemSeq->Value(rep)));
shapeRep->SetItems(items);
Standard_Real Tol = UsedTolerance (mytoler,theShape);
Standard_Real Tol = usedTolerance (mytoler,theShape);
STEPConstruct_UnitContext mk;
mk.Init(Tol);
mk.Init(Tol, myModel);
shapeRep->SetContextOfItems(mk.Value()); // la tolerance, voir au debut
shapeRep->SetName (new TCollection_HAsciiString(""));
@ -1433,7 +1433,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferSubShape (const Handle(
(resbind,STANDARD_TYPE(StepShape_ShapeDefinitionRepresentation),sdr);
if ( iasdr ) SDRTool.ReadSDR ( sdr );
else {
SDRTool.MakeSDR ( 0, myContext.GetProductName(), myContext.GetAPD()->Application() );
SDRTool.MakeSDR ( 0, myContext.GetProductName(), myContext.GetAPD()->Application(), myModel );
sdr = SDRTool.SDRValue();
}
// resultat = GetCasted(StepShape_ShapeRepresentation,sdr->UsedRepresentation());
@ -1496,3 +1496,14 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferSubShape (const Handle(
return resprod;
}
//=======================================================================
// Method : SetModel
// Purpose :
//=======================================================================
void STEPControl_ActorWrite::SetModel(Handle(Interface_InterfaceModel)& theModel)
{
myModel = theModel;
myXSAlgoContainer->SetModel(theModel);
SetGroupMode("write.step.assembly");
}

@ -22,11 +22,13 @@
#include <Standard_Integer.hxx>
#include <Standard_Real.hxx>
#include <STEPConstruct_ContextTool.hxx>
#include <Transfer_ActorOfFinderProcess.hxx>
#include <Standard_Boolean.hxx>
#include <TopTools_HSequenceOfShape.hxx>
#include <STEPConstruct_ContextTool.hxx>
#include <STEPControl_StepModelType.hxx>
#include <StepData_StepModel.hxx>
#include <TopTools_HSequenceOfShape.hxx>
#include <Transfer_ActorOfFinderProcess.hxx>
#include <XSAlgo_AlgoContainer.hxx>
class Transfer_Finder;
class Transfer_Binder;
class Transfer_FinderProcess;
@ -63,7 +65,7 @@ public:
Standard_EXPORT STEPControl_StepModelType Mode() const;
Standard_EXPORT void SetGroupMode (const Standard_Integer mode);
Standard_EXPORT void SetGroupMode (const Standard_CString theParameter);
Standard_EXPORT Standard_Integer GroupMode() const;
@ -76,6 +78,8 @@ public:
//! NOTE: this method can modify shape
Standard_EXPORT virtual Standard_Boolean IsAssembly (TopoDS_Shape& S) const;
//! Sets step model for translations
Standard_EXPORT void SetModel(Handle(Interface_InterfaceModel)& theModel);
@ -94,14 +98,23 @@ private:
//! Use this method to get the corresponding NMSSR (or
//! to create a new one if doesn't exist yet)
//! (ssv; 13.11.2010)
Standard_EXPORT Handle(StepShape_NonManifoldSurfaceShapeRepresentation) getNMSSRForGroup (const Handle(TopTools_HSequenceOfShape)& shapeGroup, const Handle(Transfer_FinderProcess)& FP, Standard_Boolean& isNMSSRCreated) const;
Standard_EXPORT Handle(StepShape_NonManifoldSurfaceShapeRepresentation) getNMSSRForGroup (const Handle(TopTools_HSequenceOfShape)& shapeGroup,
const Handle(Transfer_FinderProcess)& FP,
Standard_Boolean& isNMSSRCreated) const;
//! bind already written shared faces to STEP entity for non-manifold
Standard_EXPORT void mergeInfoForNM(const Handle(Transfer_FinderProcess)& theFP, const Handle(Standard_Transient) &theInfo) const;
Standard_EXPORT void mergeInfoForNM(const Handle(Transfer_FinderProcess)& theFP,
const Handle(Standard_Transient) &theInfo) const;
//!
Standard_EXPORT Standard_Real usedTolerance(const Standard_Real mytoler,
const TopoDS_Shape& theShape);
Standard_Integer mygroup;
Standard_Real mytoler;
STEPConstruct_ContextTool myContext;
Handle(XSAlgo_AlgoContainer) myXSAlgoContainer;
Handle(Interface_InterfaceModel) myModel;
};

@ -18,23 +18,27 @@
#include <APIHeaderSection_MakeHeader.hxx>
#include <HeaderSection.hxx>
#include <IFSelect_EditForm.hxx>
#include <IFSelect_ParamEditor.hxx>
#include <IFSelect_SelectModelRoots.hxx>
#include <IFSelect_SelectSignature.hxx>
#include <IFSelect_SignAncestor.hxx>
#include <IFSelect_SignCounter.hxx>
#include <IFSelect_SelectModelEntities.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <RWHeaderSection.hxx>
#include <RWStepAP214.hxx>
#include <ShapeExtend.hxx>
#include <ShapeProcess_OperLibrary.hxx>
#include <Standard_Type.hxx>
#include <Standard_Version.hxx>
#include <Standard_Mutex.hxx>
#include <StepAP214_Protocol.hxx>
#include <STEPControl_ActorRead.hxx>
#include <STEPControl_ActorWrite.hxx>
#include <STEPControl_Controller.hxx>
#include <StepData_FileProtocol.hxx>
//#include <StepData_FileProtocol.hxx>
#include <StepData_StepModel.hxx>
#include <STEPEdit.hxx>
#include <STEPEdit_EditContext.hxx>
#include <STEPEdit_EditSDR.hxx>
#include <StepSelect_StepType.hxx>
@ -51,6 +55,7 @@
#include <Transfer_FinderProcess.hxx>
#include <XSAlgo.hxx>
#include <XSControl_WorkSession.hxx>
#include <XSAlgo_AlgoContainer.hxx>
IMPLEMENT_STANDARD_RTTIEXT(STEPControl_Controller,XSControl_Controller)
@ -58,175 +63,45 @@ IMPLEMENT_STANDARD_RTTIEXT(STEPControl_Controller,XSControl_Controller)
STEPControl_Controller::STEPControl_Controller()
: XSControl_Controller("STEP", "step")
{
static Standard_Boolean init = Standard_False;
if (!init) {
RWHeaderSection::Init(); RWStepAP214::Init();
myAdaptorProtocol = new StepAP214_Protocol();
Interface_Static::Init ("step","write.step.product.name",'t',"Open CASCADE STEP translator " OCC_VERSION_STRING);
Interface_Static::Init ("step","write.step.assembly",'e',"");
Interface_Static::Init ("step","write.step.assembly",'&',"enum 0");
Interface_Static::Init ("step","write.step.assembly",'&',"eval Off");
Interface_Static::Init ("step","write.step.assembly",'&',"eval On");
Interface_Static::Init ("step","write.step.assembly",'&',"eval Auto");
Interface_Static::SetCVal("write.step.assembly","Auto");
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
//RWHeaderSection::Init();
RWStepAP214::Init(Handle(StepAP214_Protocol)::DownCast(myAdaptorProtocol));
Interface_Static::Init("step","step.angleunit.mode", 'e',"");
Interface_Static::Init("step","step.angleunit.mode", '&',"enum 0");
Interface_Static::Init("step","step.angleunit.mode", '&',"eval File");
Interface_Static::Init("step","step.angleunit.mode", '&',"eval Rad");
Interface_Static::Init("step","step.angleunit.mode", '&',"eval Deg");
Interface_Static::SetCVal("step.angleunit.mode","File");
Interface_Static::Init("step","write.step.schema", 'e',"");
Interface_Static::Init("step","write.step.schema",'&',"enum 1");
Interface_Static::Init("step","write.step.schema",'&',"eval AP214CD");
Interface_Static::Init("step","write.step.schema",'&',"eval AP214DIS");
Interface_Static::Init("step","write.step.schema",'&',"eval AP203");
Interface_Static::Init("step","write.step.schema",'&',"eval AP214IS");
Interface_Static::Init("step","write.step.schema",'&',"eval AP242DIS");
Interface_Static::SetCVal("write.step.schema","AP214IS");
// Type of Product Definition for reading
// Note: the numbers should be consistent with function FindShapeReprType()
// in STEPControl_ActorRead.cxx
Interface_Static::Init("step","read.step.shape.repr",'e',"");
Interface_Static::Init("step","read.step.shape.repr",'&',"enum 1");
Interface_Static::Init("step","read.step.shape.repr",'&',"eval All"); // 1
Interface_Static::Init("step","read.step.shape.repr",'&',"eval ABSR"); // 2
Interface_Static::Init("step","read.step.shape.repr",'&',"eval MSSR"); // 3
Interface_Static::Init("step","read.step.shape.repr",'&',"eval GBSSR"); // 4
Interface_Static::Init("step","read.step.shape.repr",'&',"eval FBSR"); // 5
Interface_Static::Init("step","read.step.shape.repr",'&',"eval EBWSR"); // 6
Interface_Static::Init("step","read.step.shape.repr",'&',"eval GBWSR"); // 7
Interface_Static::SetCVal("read.step.shape.repr","All");
// Mode for reading shapes attached to main SDR by SRR
// (hybrid model representation in AP203 since 1998)
Interface_Static::Init("step","read.step.shape.relationship",'e',"");
Interface_Static::Init("step","read.step.shape.relationship",'&',"enum 0");
Interface_Static::Init("step","read.step.shape.relationship",'&',"eval OFF");
Interface_Static::Init("step","read.step.shape.relationship",'&',"eval ON");
Interface_Static::SetCVal("read.step.shape.relationship","ON");
// Mode for reading shapes attached to Product by ShapeAspect
// (hybrid model representation in AP203 before 1998)
Interface_Static::Init("step","read.step.shape.aspect",'e',"");
Interface_Static::Init("step","read.step.shape.aspect",'&',"enum 0");
Interface_Static::Init("step","read.step.shape.aspect",'&',"eval OFF");
Interface_Static::Init("step","read.step.shape.aspect",'&',"eval ON");
Interface_Static::SetCVal("read.step.shape.aspect","ON");
// Mode for reading SDR and ShapeRepr if it is necessary
Interface_Static::Init("step","read.step.product.mode",'e',"");
Interface_Static::Init("step","read.step.product.mode",'&',"enum 0");
Interface_Static::Init("step","read.step.product.mode",'&',"eval OFF");
Interface_Static::Init("step","read.step.product.mode",'&',"eval ON");
Interface_Static::SetCVal("read.step.product.mode","ON");
// Order of reading ShapeDefinitionRepresentation in ProductDefinition
Interface_Static::Init("step","read.step.product.context",'e',"");
Interface_Static::Init("step","read.step.product.context",'&',"enum 1");
Interface_Static::Init("step","read.step.product.context",'&',"eval all"); // 1
Interface_Static::Init("step","read.step.product.context",'&',"eval design"); // 2
Interface_Static::Init("step","read.step.product.context",'&',"eval analysis");// 3
Interface_Static::SetCVal("read.step.product.context","all");
// What we try to read in ProductDefinition
Interface_Static::Init("step","read.step.assembly.level",'e',"");
Interface_Static::Init("step","read.step.assembly.level",'&',"enum 1");
Interface_Static::Init("step","read.step.assembly.level",'&',"eval all"); // 1
Interface_Static::Init("step","read.step.assembly.level",'&',"eval assembly"); // 2
Interface_Static::Init("step","read.step.assembly.level",'&',"eval structure");// 3
Interface_Static::Init("step","read.step.assembly.level",'&',"eval shape"); // 4
Interface_Static::SetCVal("read.step.assembly.level","all");
// unit: supposed to be cascade unit (target unit for reading)
Interface_Static::Init("step","write.step.unit", 'e',"");
Interface_Static::Init("step","write.step.unit",'&',"enum 1");
Interface_Static::Init("step","write.step.unit",'&',"eval INCH"); // 1
Interface_Static::Init("step","write.step.unit",'&',"eval MM"); // 2
Interface_Static::Init("step","write.step.unit",'&',"eval ??"); // 3
Interface_Static::Init("step","write.step.unit",'&',"eval FT"); // 4
Interface_Static::Init("step","write.step.unit",'&',"eval MI"); // 5
Interface_Static::Init("step","write.step.unit",'&',"eval M"); // 6
Interface_Static::Init("step","write.step.unit",'&',"eval KM"); // 7
Interface_Static::Init("step","write.step.unit",'&',"eval MIL"); // 8
Interface_Static::Init("step","write.step.unit",'&',"eval UM"); // 9
Interface_Static::Init("step","write.step.unit",'&',"eval CM"); //10
Interface_Static::Init("step","write.step.unit",'&',"eval UIN"); //11
Interface_Static::SetCVal ("write.step.unit","MM");
// Non-manifold topology reading: OFF by default (ssv; 26.11.2010)
Interface_Static::Init ("step","read.step.nonmanifold",'e',"");
Interface_Static::Init ("step","read.step.nonmanifold",'&',"enum 0");
Interface_Static::Init ("step","read.step.nonmanifold",'&',"eval Off");
Interface_Static::Init ("step","read.step.nonmanifold",'&',"eval On");
Interface_Static::SetIVal("read.step.nonmanifold",0);
// Non-manifold topology writing: OFF by default (ssv; 26.11.2010)
Interface_Static::Init ("step","write.step.nonmanifold",'e',"");
Interface_Static::Init ("step","write.step.nonmanifold",'&',"enum 0");
Interface_Static::Init ("step","write.step.nonmanifold",'&',"eval Off");
Interface_Static::Init ("step","write.step.nonmanifold",'&',"eval On");
Interface_Static::SetIVal("write.step.nonmanifold",0);
// I-Deas-like STEP processing: OFF by default (ssv; 22.11.2010)
Interface_Static::Init ("step","read.step.ideas",'e',"");
Interface_Static::Init ("step","read.step.ideas",'&',"enum 0");
Interface_Static::Init ("step","read.step.ideas",'&',"eval Off");
Interface_Static::Init ("step","read.step.ideas",'&',"eval On");
Interface_Static::SetIVal("read.step.ideas",0);
//Parameter to write all free vertices in one SDR (name and style of vertex are lost) (default)
//or each vertex in its own SDR (name and style of vertex are exported). (ika; 21.07.2014)
Interface_Static::Init ("step","write.step.vertex.mode",'e',"");
Interface_Static::Init ("step","write.step.vertex.mode",'&',"enum 0");
Interface_Static::Init ("step","write.step.vertex.mode",'&',"eval One Compound");
Interface_Static::Init ("step","write.step.vertex.mode",'&',"eval Single Vertex");
Interface_Static::SetIVal("write.step.vertex.mode",0);
// abv 15.11.00: ShapeProcessing
Interface_Static::Init ("XSTEP","write.step.resource.name",'t',"STEP");
Interface_Static::Init ("XSTEP","read.step.resource.name",'t',"STEP");
Interface_Static::Init ("XSTEP","write.step.sequence",'t',"ToSTEP");
Interface_Static::Init ("XSTEP","read.step.sequence",'t',"FromSTEP");
// ika 28.07.16: Paremeter to read all top level solids and shells,
// should be used only in case of invalid shape_representation without links to shapes.
Interface_Static::Init("step", "read.step.all.shapes", 'e', "");
Interface_Static::Init("step", "read.step.all.shapes", '&', "enum 0");
Interface_Static::Init("step", "read.step.all.shapes", '&', "eval Off");
Interface_Static::Init("step", "read.step.all.shapes", '&', "eval On");
Interface_Static::SetIVal("read.step.all.shapes", 0);
init = Standard_True;
// initialization of Standard Shape Healing
//ShapeExtend::Init();
//XSAlgo::Init();
// init Standard Shape Processing operators
ShapeProcess_OperLibrary::Init();
}
Handle(STEPControl_ActorWrite) ActWrite = new STEPControl_ActorWrite;
ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
myAdaptorWrite = ActWrite;
Handle(StepSelect_WorkLibrary) swl = new StepSelect_WorkLibrary;
swl->SetDumpLabel(1);
myAdaptorLibrary = swl;
myAdaptorProtocol = STEPEdit::Protocol();
myAdaptorRead = new STEPControl_ActorRead; // par ex pour Recognize
myStepType = new StepSelect_StepType;
myStepType->SetProtocol(myAdaptorProtocol);
SetModeWrite (0,4);
SetModeWriteHelp (0,"As Is");
SetModeWriteHelp (1,"Faceted Brep");
SetModeWriteHelp (2,"Shell Based");
SetModeWriteHelp (3,"Manifold Solid");
SetModeWriteHelp (4,"Wireframe");
TraceStatic ("read.surfacecurve.mode",5);
// --- 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);
AddSessionItem (myStepType,"step-type");
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter(myStepType,Standard_False,Standard_True);
AddSessionItem (tys,"step-types");
//szv:mySignType = sty;
@ -235,16 +110,32 @@ STEPControl_Controller::STEPControl_Controller ()
AddSessionItem (new IFSelect_SignAncestor(),"xst-derived");
Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
stdvar->SetProtocol(STEPEdit::Protocol());
stdvar->SetProtocol(myAdaptorProtocol);
AddSessionItem (stdvar,"step-derived");
Handle(IFSelect_SelectSignature) selsdr = STEPEdit::NewSelectSDR();
//Creates a Selection for ShapeDefinitionRepresentation
Handle(IFSelect_SelectSignature) selsdr = new IFSelect_SelectSignature
(myStepType, "SHAPE_DEFINITION_REPRESENTATION");
selsdr->SetInput (xmr);
AddSessionItem (selsdr,"step-shape-def-repr");
AddSessionItem (STEPEdit::NewSelectPlacedItem(),"step-placed-items");
// input deja pret avec ModelAll
AddSessionItem (STEPEdit::NewSelectShapeRepr(),"step-shape-repr");
// Creates a Selection for Placed Items, i.e. MappedItem or
// ContextDependentShapeRepresentation, which itself refers to a
// RepresentationRelationship with possible subtypes (Shape...
// and/or ...WithTransformation)
Handle(IFSelect_SelectSignature) selrrs = new IFSelect_SelectSignature
(myStepType, "MAPPED_ITEM|CONTEXT_DEPENDENT_SHAPE_REPRESENTATION", Standard_False);
selrrs->SetInput(new IFSelect_SelectModelEntities);
AddSessionItem (selrrs,"step-placed-items");
// Creates a Selection for ShapeRepresentation and its sub - types,
// plus ContextDependentShapeRepresentation (which is not a
// sub-type of ShapeRepresentation)
Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
(myStepType, "SHAPE_REPRESENTATION", Standard_False);
// REPRESENTATION_RELATIONSHIP passe par CONTEXT_DEPENDENT_SHAPE_REPRESENTATION
sel->SetInput(new IFSelect_SelectModelEntities);
AddSessionItem (sel,"step-shape-repr");
}
//pdn
@ -282,7 +173,8 @@ STEPControl_Controller::STEPControl_Controller ()
Handle(Interface_InterfaceModel) STEPControl_Controller::NewModel () const
{
return STEPEdit::NewModel();
APIHeaderSection_MakeHeader head;
return head.NewModel(myAdaptorProtocol);
}
// #### PROVISOIRE ??? ####
@ -294,26 +186,38 @@ IFSelect_ReturnStatus STEPControl_Controller::TransferWriteShape
const Standard_Integer modeshape) const
{
if (modeshape < 0 || modeshape > 4) return IFSelect_RetError;
if (model.IsNull()) return IFSelect_RetError;
Handle(STEPControl_ActorWrite) ActWrite =
Handle(STEPControl_ActorWrite)::DownCast(myAdaptorWrite);
// A PRESENT ON PASSE PAR LE PROFILE
if (!ActWrite.IsNull())
ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
{
ActWrite->SetGroupMode("write.step.assembly");
}
return XSControl_Controller::TransferWriteShape (shape,FP,model,modeshape);
}
Standard_Boolean STEPControl_Controller::Init ()
Standard_Boolean STEPControl_Controller::Init(const Handle(XSControl_WorkSession)& theWS)
{
static Standard_Boolean inic = Standard_False;
if (!inic) {
Handle(STEPControl_Controller) STEPCTL = new STEPControl_Controller;
STEPCTL->AutoRecord(); // avec les noms donnes a la construction
XSAlgo::Init();
inic = Standard_True;
}
Handle(Interface_InterfaceModel) aModel = theWS->Model();
if (aModel.IsNull()) return Standard_False;
TraceNotStatic(aModel->GetParam("read.surfacecurve.mode"), 5);
TraceNotStatic(aModel->GetParam("read.precision.mode"), 5);
TraceNotStatic(aModel->GetParam("read.precision.val"), 5);
TraceNotStatic(aModel->GetParam("write.precision.mode"), 6);
TraceNotStatic(aModel->GetParam("write.precision.val"), 6);
DeclareAndCast(STEPControl_ActorRead, aReadActor, myAdaptorRead);
if (!aReadActor.IsNull()) aReadActor->SetModel(aModel);
DeclareAndCast(STEPControl_ActorWrite, aWriteActor, myAdaptorWrite);
if (!aWriteActor.IsNull()) aWriteActor->SetModel(aModel);
return Standard_True;
}
//=======================================================================
//function : Customise
//purpose :
@ -337,29 +241,48 @@ void STEPControl_Controller::Customise(Handle(XSControl_WorkSession)& WS)
WS->AddNamedItem ("xst-transferrable-roots",st1);
if (!slr.IsNull()) {
Handle(IFSelect_Signature) sty = STEPEdit::SignType();
WS->AddNamedItem ("step-type",sty);
WS->AddNamedItem ("step-type", myStepType);
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter(sty,Standard_False,Standard_True);
Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter(myStepType,Standard_False,Standard_True);
WS->AddNamedItem ("step-types",tys);
//szv:mySignType = sty;
WS->SetSignType( sty );
WS->SetSignType(myStepType);
//pdn S4133 18.02.99
WS->AddNamedItem ("xst-derived",new IFSelect_SignAncestor());
Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
stdvar->SetProtocol(STEPEdit::Protocol());
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
stdvar->SetProtocol(myAdaptorProtocol);
}
WS->AddNamedItem ("step-derived",stdvar);
Handle(IFSelect_SelectSignature) selsdr = STEPEdit::NewSelectSDR();
//Creates a Selection for ShapeDefinitionRepresentation
Handle(IFSelect_SelectSignature) selsdr = new IFSelect_SelectSignature
(myStepType, "SHAPE_DEFINITION_REPRESENTATION");
selsdr->SetInput(slr);
WS->AddNamedItem("step-shape-def-repr", selsdr);
Handle(IFSelect_SelectSignature) selrrs = STEPEdit::NewSelectPlacedItem();
// Creates a Selection for Placed Items, i.e. MappedItem or
// ContextDependentShapeRepresentation, which itself refers to a
// RepresentationRelationship with possible subtypes (Shape...
// and/or ...WithTransformation)
Handle(IFSelect_SelectSignature) selrrs = new IFSelect_SelectSignature
(myStepType, "MAPPED_ITEM|CONTEXT_DEPENDENT_SHAPE_REPRESENTATION", Standard_False);
selrrs->SetInput(new IFSelect_SelectModelEntities);
WS->AddNamedItem ("step-placed-items",selrrs);
Handle(IFSelect_SelectSignature) selsr = STEPEdit::NewSelectShapeRepr();
// input deja pret avec ModelAll
WS->AddNamedItem ("step-shape-repr",selsr);
// Creates a Selection for ShapeRepresentation and its sub - types,
// plus ContextDependentShapeRepresentation (which is not a
// sub-type of ShapeRepresentation)
Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
(myStepType, "SHAPE_REPRESENTATION", Standard_False);
// REPRESENTATION_RELATIONSHIP passe par CONTEXT_DEPENDENT_SHAPE_REPRESENTATION
sel->SetInput(new IFSelect_SelectModelEntities);
WS->AddNamedItem ("step-shape-repr", sel);
}
//pdn

@ -24,6 +24,7 @@
#include <IFSelect_ReturnStatus.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
#include <StepSelect_StepType.hxx>
class Interface_InterfaceModel;
class Transfer_ActorOfTransientProcess;
class XSControl_WorkSession;
@ -59,10 +60,8 @@ public:
//! modeshape : 1 Facetted BRep, 2 Shell, 3 Manifold Solid
Standard_EXPORT virtual IFSelect_ReturnStatus TransferWriteShape (const TopoDS_Shape& shape, const Handle(Transfer_FinderProcess)& FP, const Handle(Interface_InterfaceModel)& model, const Standard_Integer modetrans = 0) const Standard_OVERRIDE;
//! Standard Initialisation. It creates a Controller for STEP
//! and records it to various names, available to select it later
//! Returns True when done, False if could not be done
Standard_EXPORT static Standard_Boolean Init();
//! Initialisation of additional parameters taken data from session model
Standard_EXPORT virtual Standard_Boolean Init(const Handle(XSControl_WorkSession)& theWS) Standard_OVERRIDE;
@ -72,12 +71,8 @@ public:
protected:
private:
Handle(StepSelect_StepType) myStepType;
};

@ -14,8 +14,8 @@
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_Macros.hxx>
#include <Interface_ShareFlags.hxx>
#include <Interface_Static.hxx>
#include <StepBasic_ApplicationContext.hxx>
#include <StepBasic_ConversionBasedUnit.hxx>
#include <StepBasic_DocumentProductEquivalence.hxx>
@ -38,8 +38,8 @@
#include <StepBasic_SolidAngleMeasureWithUnit.hxx>
#include <StepBasic_SolidAngleUnit.hxx>
#include <STEPConstruct_UnitContext.hxx>
#include <STEPControl_Controller.hxx>
#include <STEPControl_Reader.hxx>
#include <STEPControl_ActorRead.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_GeometricRepresentationContextAndGlobalUnitAssignedContext.hxx>
#include <StepGeom_GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx.hxx>
@ -74,8 +74,7 @@
//=======================================================================
STEPControl_Reader::STEPControl_Reader ()
{
STEPControl_Controller::Init();
SetNorm ("STEP");
initReader(new XSControl_WorkSession, new STEPControl_Controller);
}
//=======================================================================
@ -83,12 +82,38 @@ STEPControl_Reader::STEPControl_Reader ()
//purpose :
//=======================================================================
STEPControl_Reader::STEPControl_Reader
(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch)
STEPControl_Reader::STEPControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean scratch)
{
STEPControl_Controller::Init();
SetWS (WS,scratch);
SetNorm ("STEP");
initReader(theWS, new STEPControl_Controller, scratch);
}
//=======================================================================
//function : STEPControl_Reader
//purpose :
//=======================================================================
STEPControl_Reader::STEPControl_Reader (const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch)
{
initReader(theWS, theController, scratch);
}
//=======================================================================
//function : initReader
//purpose :
//=======================================================================
void STEPControl_Reader::initReader(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch)
{
myController = theController;
theWS->SetController(myController);
SetWS(theWS, scratch);
myController->Init(WS());
initTransferReader();
}
//=======================================================================
@ -122,10 +147,11 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
therootsta = Standard_True;
//theroots.Clear();
Standard_Integer nb = Model()->NbEntities();
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(Model());
Standard_Integer nb = aModel->NbEntities();
for (Standard_Integer i = 1; i <= nb; i ++) {
Handle(Standard_Transient) ent = Model()->Value(i);
if (Interface_Static::IVal("read.step.all.shapes") == 1) {
Handle(Standard_Transient) ent = aModel->Value(i);
if (aModel->IVal("read.step.all.shapes") == 1) {
// Special case to read invalid shape_representation without links to shapes.
if (ent->IsKind(STANDARD_TYPE(StepShape_ManifoldSolidBrep))) {
Interface_EntityIterator aShareds = WS()->Graph().Sharings(ent);
@ -185,8 +211,8 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
}
// determinate roots used ProductDefinitionContext
if(IsRoot) {
const char *str1 = Interface_Static::CVal("read.step.product.context");
Standard_Integer ICS = Interface_Static::IVal("read.step.product.context");
const char *str1 = aModel->CVal("read.step.product.context");
Standard_Integer ICS = aModel->IVal("read.step.product.context");
if(ICS>1) {
subs = graph.Shareds(PD);
for(subs.Start(); subs.More(); subs.Next()) {
@ -219,7 +245,7 @@ Standard_Integer STEPControl_Reader::NbRootsForTransfer()
WS()->TransferReader()->TransientProcess()->RootsForTransfer()->Append(ent);
}
}
TCollection_AsciiString aProdMode = Interface_Static::CVal("read.step.product.mode");
TCollection_AsciiString aProdMode = aModel->CVal("read.step.product.mode");
if(!aProdMode.IsEqual("ON")) {
if(ent->IsKind(STANDARD_TYPE(StepShape_ShapeDefinitionRepresentation))) {
Standard_Boolean IsRoot = Standard_True;

@ -24,6 +24,7 @@
#include <XSControl_Reader.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
#include <STEPControl_Controller.hxx>
#include <TColStd_SequenceOfAsciiString.hxx>
#include <TColStd_Array1OfAsciiString.hxx>
#include <TColStd_Array1OfReal.hxx>
@ -38,7 +39,7 @@ class StepRepr_RepresentationContext;
//! As in XSControl_Reader, you specify the list using a selection.
//! For the translation of iges files it is possible to use next sequence:
//! To change translation parameters
//! class Interface_Static should be used before beginning of
//! class StepData_StepModel should be used before beginning of
//! translation (see STEP Parameters and General Parameters)
//! Creation of reader - STEPControl_Reader reader;
//! To load s file in a model use method reader.ReadFile("filename.stp")
@ -79,7 +80,14 @@ public:
//! Creates a Reader for STEP from an already existing Session
//! Clears the session if it was not yet set for STEP
Standard_EXPORT STEPControl_Reader(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
Standard_EXPORT STEPControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean scratch = Standard_True);
//! Creates a Reader for STEP from an already existing Session
//! Clears the session if it was not yet set for STEP
Standard_EXPORT STEPControl_Reader(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch = Standard_True);
//! Returns the model as a StepModel.
//! It can then be consulted (header, product)
@ -97,7 +105,9 @@ public:
//! Returns sequence of all unit names for shape representations
//! found in file
Standard_EXPORT void FileUnits (TColStd_SequenceOfAsciiString& theUnitLengthNames, TColStd_SequenceOfAsciiString& theUnitAngleNames, TColStd_SequenceOfAsciiString& theUnitSolidAngleNames);
Standard_EXPORT void FileUnits (TColStd_SequenceOfAsciiString& theUnitLengthNames,
TColStd_SequenceOfAsciiString& theUnitAngleNames,
TColStd_SequenceOfAsciiString& theUnitSolidAngleNames);
@ -112,9 +122,16 @@ private:
//! Returns units for length , angle and solidangle for shape representations
Standard_EXPORT Standard_Boolean findUnits (const Handle(StepRepr_RepresentationContext)& theReprContext, TColStd_Array1OfAsciiString& theNameUnits, TColStd_Array1OfReal& theFactorUnits);
Standard_EXPORT Standard_Boolean findUnits (const Handle(StepRepr_RepresentationContext)& theReprContext,
TColStd_Array1OfAsciiString& theNameUnits,
TColStd_Array1OfReal& theFactorUnits);
//!
Standard_EXPORT void initReader(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch = Standard_True);
Handle(XSControl_Controller) myController;
};

@ -16,7 +16,6 @@
#include <Interface_Macros.hxx>
#include <Message_ProgressIndicator.hxx>
#include <STEPControl_ActorWrite.hxx>
#include <STEPControl_Controller.hxx>
#include <STEPControl_Writer.hxx>
#include <StepData_StepModel.hxx>
#include <TopExp_Explorer.hxx>
@ -31,28 +30,46 @@
//=======================================================================
STEPControl_Writer::STEPControl_Writer ()
{
STEPControl_Controller::Init();
SetWS (new XSControl_WorkSession);
initWriter(new XSControl_WorkSession, new STEPControl_Controller);
}
//=======================================================================
//function : STEPControl_Writer
//purpose :
//=======================================================================
STEPControl_Writer::STEPControl_Writer
(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch)
STEPControl_Writer::STEPControl_Writer (const Handle(XSControl_WorkSession)& theWS,
const Standard_Boolean theScratch)
{
STEPControl_Controller::Init();
SetWS (WS,scratch);
initWriter(theWS, new STEPControl_Controller, theScratch);
}
//=======================================================================
//function : STEPControl_Writer
//purpose :
//=======================================================================
STEPControl_Writer::STEPControl_Writer(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch)
{
initWriter(theWS, theController, theScratch);
}
//=======================================================================
//function : initWriter
//purpose :
//=======================================================================
void STEPControl_Writer::initWriter(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch)
{
myController = theController;
theWS->SetController(myController);
SetWS(theWS, scratch);
myController->Init(WS());
}
//=======================================================================
//function : SetWS
//purpose :
//=======================================================================
@ -62,7 +79,9 @@ void STEPControl_Writer::SetWS(const Handle(XSControl_WorkSession)& WS,
thesession = WS;
thesession->SelectNorm("STEP");
thesession->InitTransferReader(0);
Handle(StepData_StepModel) model = Model (scratch);
Handle(StepData_StepModel) aModel = Model (scratch);
DeclareAndCast(STEPControl_ActorWrite, anActor, myController->ActorWrite());
if (!anActor.IsNull()) anActor->SetModel(aModel);
}
@ -99,8 +118,8 @@ Handle(StepData_StepModel) STEPControl_Writer::Model
void STEPControl_Writer::SetTolerance (const Standard_Real Tol)
{
DeclareAndCast(STEPControl_ActorWrite,act,WS()->NormAdaptor()->ActorWrite());
if (!act.IsNull()) act->SetTolerance (Tol);
DeclareAndCast(STEPControl_ActorWrite, anActor, myController->ActorWrite());
if (!anActor.IsNull()) anActor->SetTolerance (Tol);
}

@ -21,12 +21,13 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <IFSelect_ReturnStatus.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Real.hxx>
#include <IFSelect_ReturnStatus.hxx>
#include <STEPControl_StepModelType.hxx>
#include <Standard_CString.hxx>
#include <Standard_Integer.hxx>
#include <STEPControl_Controller.hxx>
#include <STEPControl_StepModelType.hxx>
class XSControl_WorkSession;
class StepData_StepModel;
class TopoDS_Shape;
@ -48,8 +49,15 @@ public:
Standard_EXPORT STEPControl_Writer();
//! Creates a Writer from an already existing Session
//! If <scratch> is True (D), clears already recorded data
Standard_EXPORT STEPControl_Writer(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
//! If <theScratch> is True (D), clears already recorded data
Standard_EXPORT STEPControl_Writer(const Handle(XSControl_WorkSession)& WS,
const Standard_Boolean theScratch = Standard_True);
//! Creates a Writer for STEP from an already existing Session
//! If <theScratch> is True (D), clears already recorded data
Standard_EXPORT STEPControl_Writer(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean theScratch = Standard_True);
//! Sets a length-measure value that
//! will be written to uncertainty-measure-with-unit
@ -115,7 +123,10 @@ public:
protected:
//!
Standard_EXPORT void initWriter(const Handle(XSControl_WorkSession)& theWS,
const Handle(XSControl_Controller)& theController,
const Standard_Boolean scratch = Standard_True);
@ -124,6 +135,7 @@ private:
Handle(XSControl_WorkSession) thesession;
Handle(XSControl_Controller) myController;
};

@ -1,5 +1,3 @@
STEPEdit.cxx
STEPEdit.hxx
STEPEdit_EditContext.cxx
STEPEdit_EditContext.hxx
STEPEdit_EditSDR.cxx

@ -1,78 +0,0 @@
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <APIHeaderSection_MakeHeader.hxx>
#include <IFSelect_SelectModelEntities.hxx>
#include <IFSelect_SelectModelRoots.hxx>
#include <IFSelect_SelectSignature.hxx>
#include <IFSelect_Signature.hxx>
#include <Interface_Protocol.hxx>
#include <StepAP214.hxx>
#include <StepAP214_Protocol.hxx>
#include <StepData_StepModel.hxx>
#include <STEPEdit.hxx>
#include <StepSelect_StepType.hxx>
Handle(Interface_Protocol) STEPEdit::Protocol ()
{
/*
static Handle(StepData_FileProtocol) proto;
if (!proto.IsNull()) return proto;
proto = new StepData_FileProtocol;
proto->Add (StepAP214::Protocol());
proto->Add (HeaderSection::Protocol());
return proto;
*/
return StepAP214::Protocol();
}
Handle(StepData_StepModel) STEPEdit::NewModel ()
{
APIHeaderSection_MakeHeader head;
return head.NewModel(STEPEdit::Protocol());
}
Handle(IFSelect_Signature) STEPEdit::SignType ()
{
static Handle(StepSelect_StepType) sty;
if (!sty.IsNull()) return sty;
sty = new StepSelect_StepType;
sty->SetProtocol (STEPEdit::Protocol());
return sty;
}
Handle(IFSelect_SelectSignature) STEPEdit::NewSelectSDR ()
{
Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
(STEPEdit::SignType(),"SHAPE_DEFINITION_REPRESENTATION");
sel->SetInput (new IFSelect_SelectModelRoots);
return sel;
}
Handle(IFSelect_SelectSignature) STEPEdit::NewSelectPlacedItem ()
{
Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
(STEPEdit::SignType(),"MAPPED_ITEM|CONTEXT_DEPENDENT_SHAPE_REPRESENTATION",Standard_False);
sel->SetInput (new IFSelect_SelectModelEntities);
return sel;
}
Handle(IFSelect_SelectSignature) STEPEdit::NewSelectShapeRepr ()
{
Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
(STEPEdit::SignType(),"SHAPE_REPRESENTATION",Standard_False);
// REPRESENTATION_RELATIONSHIP passe par CONTEXT_DEPENDENT_SHAPE_REPRESENTATION
sel->SetInput (new IFSelect_SelectModelEntities);
return sel;
}

@ -1,93 +0,0 @@
// Created on: 1998-07-29
// Created by: Christian CAILLET
// Copyright (c) 1998-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _STEPEdit_HeaderFile
#define _STEPEdit_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
class Interface_Protocol;
class StepData_StepModel;
class IFSelect_Signature;
class IFSelect_SelectSignature;
class STEPEdit_EditContext;
class STEPEdit_EditSDR;
//! Provides tools to exploit and edit a set of STEP data :
//! editors, selections ..
class STEPEdit
{
public:
DEFINE_STANDARD_ALLOC
//! Returns a Protocol fit for STEP (creates the first time)
Standard_EXPORT static Handle(Interface_Protocol) Protocol();
//! Returns a new empty StepModel fit for STEP
//! i.e. with its header determined from Protocol
Standard_EXPORT static Handle(StepData_StepModel) NewModel();
//! Returns a SignType fit for STEP (creates the first time)
Standard_EXPORT static Handle(IFSelect_Signature) SignType();
//! Creates a Selection for ShapeDefinitionRepresentation
//! By default searches among root entities
Standard_EXPORT static Handle(IFSelect_SelectSignature) NewSelectSDR();
//! Creates a Selection for Placed Items, i.e. MappedItem or
//! ContextDependentShapeRepresentation, which itself refers to a
//! RepresentationRelationship with possible subtypes (Shape...
//! and/or ...WithTransformation)
//! By default in the whole StepModel
Standard_EXPORT static Handle(IFSelect_SelectSignature) NewSelectPlacedItem();
//! Creates a Selection for ShapeRepresentation and its sub-types,
//! plus ContextDependentShapeRepresentation (which is not a
//! sub-type of ShapeRepresentation)
//! By default in the whole StepModel
Standard_EXPORT static Handle(IFSelect_SelectSignature) NewSelectShapeRepr();
protected:
private:
friend class STEPEdit_EditContext;
friend class STEPEdit_EditSDR;
};
#endif // _STEPEdit_HeaderFile

@ -1,5 +1,3 @@
StepAP214.cxx
StepAP214.hxx
StepAP214_AppliedApprovalAssignment.cxx
StepAP214_AppliedApprovalAssignment.hxx
StepAP214_AppliedDateAndTimeAssignment.cxx

@ -1,27 +0,0 @@
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Interface_Statics.hxx>
#include <StepAP214.hxx>
#include <StepAP214_Protocol.hxx>
StaticHandle(StepAP214_Protocol, proto);
Handle(StepAP214_Protocol) StepAP214::Protocol()
{
InitHandleVoid(StepAP214_Protocol, proto);
return proto;
}

@ -1,153 +0,0 @@
// Created on: 1995-12-01
// Created by: EXPRESS->CDL V0.2 Translator
// Copyright (c) 1995-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _StepAP214_HeaderFile
#define _StepAP214_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
class StepAP214_Protocol;
class StepAP214_AutoDesignDateAndPersonItem;
class StepAP214_AutoDesignDateAndTimeItem;
class StepAP214_AutoDesignDatedItem;
class StepAP214_AutoDesignGeneralOrgItem;
class StepAP214_AutoDesignOrganizationItem;
class StepAP214_AutoDesignGroupedItem;
class StepAP214_AutoDesignPresentedItemSelect;
class StepAP214_AutoDesignReferencingItem;
class StepAP214_DateAndTimeItem;
class StepAP214_DateItem;
class StepAP214_ApprovalItem;
class StepAP214_OrganizationItem;
class StepAP214_DocumentReferenceItem;
class StepAP214_GroupItem;
class StepAP214_PersonAndOrganizationItem;
class StepAP214_PresentedItemSelect;
class StepAP214_SecurityClassificationItem;
class StepAP214_Protocol;
class StepAP214_AutoDesignApprovalAssignment;
class StepAP214_AutoDesignActualDateAndTimeAssignment;
class StepAP214_AutoDesignNominalDateAndTimeAssignment;
class StepAP214_AutoDesignActualDateAssignment;
class StepAP214_AutoDesignNominalDateAssignment;
class StepAP214_AutoDesignGroupAssignment;
class StepAP214_AutoDesignOrganizationAssignment;
class StepAP214_AutoDesignDateAndPersonAssignment;
class StepAP214_AutoDesignPersonAndOrganizationAssignment;
class StepAP214_AutoDesignPresentedItem;
class StepAP214_AutoDesignSecurityClassificationAssignment;
class StepAP214_AutoDesignDocumentReference;
class StepAP214_AppliedApprovalAssignment;
class StepAP214_AppliedDateAndTimeAssignment;
class StepAP214_AppliedDateAssignment;
class StepAP214_AppliedGroupAssignment;
class StepAP214_AppliedOrganizationAssignment;
class StepAP214_AppliedPersonAndOrganizationAssignment;
class StepAP214_AppliedPresentedItem;
class StepAP214_AppliedSecurityClassificationAssignment;
class StepAP214_AppliedDocumentReference;
class StepAP214_AppliedExternalIdentificationAssignment;
class StepAP214_Class;
class StepAP214_ExternalIdentificationItem;
class StepAP214_ExternallyDefinedClass;
class StepAP214_ExternallyDefinedGeneralProperty;
class StepAP214_RepItemGroup;
//! Complete AP214 CC1 , Revision 4
//! Upgrading from Revision 2 to Revision 4 : 26 Mar 1997
//! Splitting in sub-schemas : 5 Nov 1997
class StepAP214
{
public:
DEFINE_STANDARD_ALLOC
//! creates a Protocol
Standard_EXPORT static Handle(StepAP214_Protocol) Protocol();
protected:
private:
friend class StepAP214_AutoDesignDateAndPersonItem;
friend class StepAP214_AutoDesignDateAndTimeItem;
friend class StepAP214_AutoDesignDatedItem;
friend class StepAP214_AutoDesignGeneralOrgItem;
friend class StepAP214_AutoDesignOrganizationItem;
friend class StepAP214_AutoDesignGroupedItem;
friend class StepAP214_AutoDesignPresentedItemSelect;
friend class StepAP214_AutoDesignReferencingItem;
friend class StepAP214_DateAndTimeItem;
friend class StepAP214_DateItem;
friend class StepAP214_ApprovalItem;
friend class StepAP214_OrganizationItem;
friend class StepAP214_DocumentReferenceItem;
friend class StepAP214_GroupItem;
friend class StepAP214_PersonAndOrganizationItem;
friend class StepAP214_PresentedItemSelect;
friend class StepAP214_SecurityClassificationItem;
friend class StepAP214_Protocol;
friend class StepAP214_AutoDesignApprovalAssignment;
friend class StepAP214_AutoDesignActualDateAndTimeAssignment;
friend class StepAP214_AutoDesignNominalDateAndTimeAssignment;
friend class StepAP214_AutoDesignActualDateAssignment;
friend class StepAP214_AutoDesignNominalDateAssignment;
friend class StepAP214_AutoDesignGroupAssignment;
friend class StepAP214_AutoDesignOrganizationAssignment;
friend class StepAP214_AutoDesignDateAndPersonAssignment;
friend class StepAP214_AutoDesignPersonAndOrganizationAssignment;
friend class StepAP214_AutoDesignPresentedItem;
friend class StepAP214_AutoDesignSecurityClassificationAssignment;
friend class StepAP214_AutoDesignDocumentReference;
friend class StepAP214_AppliedApprovalAssignment;
friend class StepAP214_AppliedDateAndTimeAssignment;
friend class StepAP214_AppliedDateAssignment;
friend class StepAP214_AppliedGroupAssignment;
friend class StepAP214_AppliedOrganizationAssignment;
friend class StepAP214_AppliedPersonAndOrganizationAssignment;
friend class StepAP214_AppliedPresentedItem;
friend class StepAP214_AppliedSecurityClassificationAssignment;
friend class StepAP214_AppliedDocumentReference;
friend class StepAP214_AppliedExternalIdentificationAssignment;
friend class StepAP214_Class;
friend class StepAP214_ExternalIdentificationItem;
friend class StepAP214_ExternallyDefinedClass;
friend class StepAP214_ExternallyDefinedGeneralProperty;
friend class StepAP214_RepItemGroup;
};
#endif // _StepAP214_HeaderFile

@ -21,11 +21,11 @@
IMPLEMENT_STANDARD_RTTIEXT(StepAP214_Protocol,StepData_Protocol)
static Standard_CString schemaAP214CD = "AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }";
static Standard_CString schemaAP214DIS = "AUTOMOTIVE_DESIGN { 1 2 10303 214 0 1 1 1 }";
static Standard_CString schemaAP214IS = "AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }";
static Standard_CString schemaAP203 = "CONFIG_CONTROL_DESIGN";
static Standard_CString schemaAP242DIS = "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF. {1 0 10303 442 1 1 4 }";
Standard_CString schemaAP214CD = "AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }";
Standard_CString schemaAP214DIS = "AUTOMOTIVE_DESIGN { 1 2 10303 214 0 1 1 1 }";
Standard_CString schemaAP214IS = "AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }";
Standard_CString schemaAP203 = "CONFIG_CONTROL_DESIGN";
Standard_CString schemaAP242DIS = "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF. {1 0 10303 442 1 1 4 }";
#include <HeaderSection_Protocol.hxx>
@ -454,7 +454,6 @@ static Standard_CString schemaAP242DIS = "AP242_MANAGED_MODEL_BASED_3D_ENGINEERI
#include <StepShape_ExtrudedFaceSolid.hxx>
#include <StepShape_RevolvedFaceSolid.hxx>
#include <StepShape_SweptFaceSolid.hxx>
#include <Interface_Static.hxx>
#include <StepBasic_AreaUnit.hxx>
#include <StepBasic_VolumeUnit.hxx>
#include <StepBasic_SiUnitAndAreaUnit.hxx>
@ -749,23 +748,20 @@ static Standard_CString schemaAP242DIS = "AP242_MANAGED_MODEL_BASED_3D_ENGINEERI
#include <StepVisual_CameraModelD3MultiClippingIntersection.hxx>
#include <StepVisual_CameraModelD3MultiClippingUnion.hxx>
#include <StepVisual_AnnotationCurveOccurrenceAndAnnotationOccurrenceAndGeomReprItemAndReprItemAndStyledItem.hxx>
static int THE_StepAP214_Protocol_init = 0;
static Interface_DataMapOfTransientInteger types(800);
#include <StepVisual_SurfaceStyleTransparent.hxx>
#include <StepVisual_SurfaceStyleReflectanceAmbient.hxx>
#include <StepVisual_SurfaceStyleRendering.hxx>
#include <StepVisual_SurfaceStyleRenderingWithProperties.hxx>
//=======================================================================
//function : StepAP214_Protocol
//purpose :
//=======================================================================
StepAP214_Protocol::StepAP214_Protocol ()
StepAP214_Protocol::StepAP214_Protocol () :
myShemaName(schemaAP214IS),
types(800)
{
if (THE_StepAP214_Protocol_init)
{
return;
}
THE_StepAP214_Protocol_init = 1;
types.Bind (STANDARD_TYPE(StepBasic_Address), 1);
types.Bind (STANDARD_TYPE(StepShape_AdvancedBrepShapeRepresentation), 2);
types.Bind (STANDARD_TYPE(StepShape_AdvancedFace), 3);
@ -1481,18 +1477,21 @@ Handle(Standard_Type)& atype) const
//purpose :
//=======================================================================
Standard_CString StepAP214_Protocol::SchemaName() const
Standard_CString StepAP214_Protocol::SchemaName(Standard_Integer theShematype)
{
switch (Interface_Static::IVal("write.step.schema")) { //:j4
if (theShematype != 0)
{
switch (theShematype) { //:j4
default:
case 1 : return schemaAP214CD; break;
case 2 : return schemaAP214DIS; break;
case 3 : return schemaAP203; break;
case 4: return schemaAP214IS; break;
case 5 : return schemaAP242DIS; break;
case 1: myShemaName = schemaAP214CD; break;
case 2: myShemaName = schemaAP214DIS; break;
case 3: myShemaName = schemaAP203; break;
case 4: myShemaName = schemaAP214IS; break;
case 5: myShemaName = schemaAP242DIS; break;
}
}
return myShemaName;
}
//=======================================================================
//function : NbResources

@ -43,7 +43,7 @@ public:
//! Returns a Case Number for each of the StepAP214 Entities
Standard_EXPORT virtual Standard_Integer TypeNumber (const Handle(Standard_Type)& atype) const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_CString SchemaName() const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_CString SchemaName(Standard_Integer theShematype = 0) Standard_OVERRIDE;
//! Returns count of Protocol used as Resources (level one)
Standard_EXPORT virtual Standard_Integer NbResources() const Standard_OVERRIDE;
@ -63,8 +63,8 @@ protected:
private:
Standard_CString myShemaName;
Interface_DataMapOfTransientInteger types;
};

@ -15,11 +15,9 @@
// svv #2 23.02.00: porting on SIL
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <Interface_Statics.hxx>
#include <StepData.hxx>
#include <StepData_DefaultGeneral.hxx>
#include <StepData_FileProtocol.hxx>
#include <StepData_Protocol.hxx>
StaticHandle(StepData_Protocol,proto);
@ -32,7 +30,6 @@ StaticHandleA(StepData_Protocol,theheader);
{
// InitHandleVoid(StepData_Protocol,proto);
// InitHandleVoid(StepData_DefaultGeneral,stmod);
//:S4136 Interface_Static::Init("step","step.readaccept.void",'i',"1");
// if (proto.IsNull()) proto = new StepData_Protocol;
// if (stmod.IsNull()) stmod = new StepData_DefaultGeneral;
}
@ -50,13 +47,13 @@ StaticHandleA(StepData_Protocol,theheader);
InitHandle(StepData_Protocol,theheader);
if (theheader.IsNull()) theheader = header;
else {
DeclareAndCast(StepData_FileProtocol,headmult,theheader);
if (headmult.IsNull()) {
headmult = new StepData_FileProtocol;
headmult->Add(theheader);
}
headmult->Add(header);
theheader = headmult;
//DeclareAndCast(StepData_FileProtocol,headmult,theheader);
// if (headmult.IsNull()) {
// headmult = new StepData_FileProtocol;
//headmult->Add(theheader);
//}
//headmult->Add(header);
//theheader = headmult;
}
}

@ -46,8 +46,8 @@ class StepData_FreeFormEntity;
class StepData_Protocol;
class StepData_GeneralModule;
class StepData_FileRecognizer;
class StepData_FileProtocol;
class StepData_HeaderTool;
//class StepData_FileProtocol;
//class StepData_HeaderTool;
class StepData_EnumTool;
class StepData_DescrProtocol;
class StepData_DescrGeneral;
@ -127,12 +127,12 @@ friend class StepData_FreeFormEntity;
friend class StepData_Protocol;
friend class StepData_GeneralModule;
friend class StepData_FileRecognizer;
friend class StepData_FileProtocol;
friend class StepData_HeaderTool;
//friend class StepData_FileProtocol;
//friend class StepData_HeaderTool;
friend class StepData_EnumTool;
friend class StepData_DescrProtocol;
friend class StepData_DescrGeneral;
friend class StepData_DescrReadWrite;
//friend class StepData_DescrProtocol;
//friend class StepData_DescrGeneral;
//friend class StepData_DescrReadWrite;
friend class StepData_StepReaderData;
friend class StepData_StepReaderTool;
friend class StepData_ReadWriteModule;
@ -140,8 +140,8 @@ friend class StepData_StepWriter;
friend class StepData_StepDumper;
friend class StepData_WriterLib;
friend class StepData_DefaultGeneral;
friend class StepData_GlobalNodeOfWriterLib;
friend class StepData_NodeOfWriterLib;
//friend class StepData_GlobalNodeOfWriterLib;
//friend class StepData_NodeOfWriterLib;
};

@ -1,68 +0,0 @@
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Interface_Check.hxx>
#include <Interface_Graph.hxx>
#include <Interface_Protocol.hxx>
#include <Standard_Type.hxx>
#include <StepData_FileProtocol.hxx>
#include <StepData_Protocol.hxx>
IMPLEMENT_STANDARD_RTTIEXT(StepData_FileProtocol,StepData_Protocol)
//static TCollection_AsciiString thename("");
static Standard_CString thename = "";
// Protocol fabrique a la demande avec d autres Protocoles
StepData_FileProtocol::StepData_FileProtocol () { }
void StepData_FileProtocol::Add (const Handle(StepData_Protocol)& protocol)
{
if (protocol.IsNull()) return;
Handle(Standard_Type) ptype = protocol->DynamicType();
Standard_Integer nb = thecomps.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thecomps.Value(i)->IsInstance(ptype)) return;
}
thecomps.Append(protocol);
}
Standard_Integer StepData_FileProtocol::NbResources () const
{ return thecomps.Length(); }
Handle(Interface_Protocol) StepData_FileProtocol::Resource
(const Standard_Integer num) const
{ return Handle(Interface_Protocol)::DownCast(thecomps.Value(num)); }
Standard_Integer StepData_FileProtocol::TypeNumber
(const Handle(Standard_Type)& /*atype*/) const
{ return 0; }
Standard_Boolean StepData_FileProtocol::GlobalCheck(const Interface_Graph& G,
Handle(Interface_Check)& ach) const
{
Standard_Boolean res = Standard_False;
Standard_Integer i,nb = NbResources();
for (i = 1; i <= nb; i ++) res |= Resource(i)->GlobalCheck (G,ach);
return res;
}
Standard_CString StepData_FileProtocol::SchemaName () const
{ return thename; }

@ -1,103 +0,0 @@
// Created on: 1993-07-23
// Created by: Christian CAILLET
// Copyright (c) 1993-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _StepData_FileProtocol_HeaderFile
#define _StepData_FileProtocol_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <TColStd_SequenceOfTransient.hxx>
#include <StepData_Protocol.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Type.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_CString.hxx>
class StepData_Protocol;
class Interface_Protocol;
class Interface_Graph;
class Interface_Check;
class StepData_FileProtocol;
DEFINE_STANDARD_HANDLE(StepData_FileProtocol, StepData_Protocol)
//! A FileProtocol is defined as the addition of several already
//! existing Protocols. It corresponds to the definition of a
//! SchemaName with several Names, each one being attached to a
//! specific Protocol. Thus, a File defined with a compound Schema
//! is processed as any other one, once built the equivalent
//! compound Protocol, a FileProtocol
class StepData_FileProtocol : public StepData_Protocol
{
public:
//! Creates an empty FileProtocol
Standard_EXPORT StepData_FileProtocol();
//! Adds a Protocol to the definition list of the FileProtocol
//! But ensures that each class of Protocol is present only once
//! in this list
Standard_EXPORT void Add (const Handle(StepData_Protocol)& protocol);
//! Gives the count of Protocols used as Resource (can be zero)
//! i.e. the count of Protocol recorded by calling the method Add
Standard_EXPORT virtual Standard_Integer NbResources() const Standard_OVERRIDE;
//! Returns a Resource, given a rank. Here, rank of calling Add
Standard_EXPORT virtual Handle(Interface_Protocol) Resource (const Standard_Integer num) const Standard_OVERRIDE;
//! Returns a Case Number, specific of each recognized Type
//! Here, NO Type at all is recognized properly : all Types are
//! recognized by the resources
Standard_EXPORT virtual Standard_Integer TypeNumber (const Handle(Standard_Type)& atype) const Standard_OVERRIDE;
//! Calls GlobalCheck for each of its recorded ressources
Standard_EXPORT virtual Standard_Boolean GlobalCheck (const Interface_Graph& G, Handle(Interface_Check)& ach) const Standard_OVERRIDE;
//! Returns the Schema Name attached to each class of Protocol
//! To be redefined by each sub-class
//! Here, SchemaName returns "" (empty String)
//! was C++ : return const
Standard_EXPORT virtual Standard_CString SchemaName() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(StepData_FileProtocol,StepData_Protocol)
protected:
private:
TColStd_SequenceOfTransient thecomps;
};
#endif // _StepData_FileProtocol_HeaderFile

@ -70,12 +70,11 @@ Standard_Integer StepData_Protocol::TypeNumber
}
Standard_CString StepData_Protocol::SchemaName () const
Standard_CString StepData_Protocol::SchemaName (Standard_Integer /*theShematype*/)
{
return thename;
}
Handle(Interface_InterfaceModel) StepData_Protocol::NewModel () const
{
return new StepData_StepModel;

@ -72,7 +72,7 @@ public:
//! To be redefined by each sub-class
//! Here, SchemaName returns "(DEFAULT)"
//! was C++ : return const
Standard_EXPORT virtual Standard_CString SchemaName() const;
Standard_EXPORT virtual Standard_CString SchemaName(Standard_Integer theShematype = 0);
//! Creates an empty Model for Step Norm
Standard_EXPORT Handle(Interface_InterfaceModel) NewModel() const Standard_OVERRIDE;

@ -34,8 +34,330 @@
IMPLEMENT_STANDARD_RTTIEXT(StepData_StepModel,Interface_InterfaceModel)
// Entete de fichier : liste d entites
StepData_StepModel::StepData_StepModel () { }
StepData_StepModel::StepData_StepModel ()
{
initParameters();
}
//=======================================================================
//function : initParameters
//purpose :
//=======================================================================
void StepData_StepModel::initParameters()
{
//for each created item, value from static map should be
//checked, if static map is bound with this parameter than get value from static
Handle(Interface_Static) aStaticItem;
Handle(Interface_Static) anItem = new Interface_Static("step", "write.step.product.name", Interface_ParamText, "");
myParamMap.Bind("write.step.product.name", anItem);
anItem = new Interface_Static("step", "write.step.assembly", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
Interface_Static::InitValues(anItem, "eval Auto");
aStaticItem = Interface_Static::Static("write.step.assembly");
anItem->SetCStringValue(aStaticItem.IsNull() ? "Auto" : aStaticItem->CStringValue());
myParamMap.Bind("write.step.assembly", anItem);
anItem = new Interface_Static("step", "step.angleunit.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval File");
Interface_Static::InitValues(anItem, "eval Rad");
Interface_Static::InitValues(anItem, "eval Deg");
aStaticItem = Interface_Static::Static("step.angleunit.mode");
anItem->SetCStringValue(aStaticItem.IsNull() ? "File" : aStaticItem->CStringValue());
myParamMap.Bind("step.angleunit.mode", anItem);
anItem = new Interface_Static("step", "write.step.schema", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval AP214CD");
Interface_Static::InitValues(anItem, "eval AP214DIS");
Interface_Static::InitValues(anItem, "eval AP203");
Interface_Static::InitValues(anItem, "eval AP214IS");
Interface_Static::InitValues(anItem, "eval AP242DIS");
aStaticItem = Interface_Static::Static("write.step.schema");
anItem->SetCStringValue(aStaticItem.IsNull() ? "AP214IS" : aStaticItem->CStringValue());
myParamMap.Bind("write.step.schema", anItem);
// Type of Product Definition for reading
// Note: the numbers should be consistent with function FindShapeReprType()
// in STEPControl_ActorRead.cxx
anItem = new Interface_Static("step", "read.step.shape.repr", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval All"); // 1
Interface_Static::InitValues(anItem, "eval ABSR"); // 2
Interface_Static::InitValues(anItem, "eval MSSR"); // 3
Interface_Static::InitValues(anItem, "eval GBSSR"); // 4
Interface_Static::InitValues(anItem, "eval FBSR"); // 5
Interface_Static::InitValues(anItem, "eval EBWSR"); // 6
Interface_Static::InitValues(anItem, "eval GBWSR"); // 7
aStaticItem = Interface_Static::Static("read.step.shape.repr");
anItem->SetCStringValue(aStaticItem.IsNull() ? "All" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.shape.repr", anItem);
// Mode for reading shapes attached to main SDR by SRR
// (hybrid model representation in AP203 since 1998)
anItem = new Interface_Static("step", "read.step.shape.relationship", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval OFF");
Interface_Static::InitValues(anItem, "eval ON");
aStaticItem = Interface_Static::Static("read.step.shape.relationship");
anItem->SetCStringValue(aStaticItem.IsNull() ? "ON" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.shape.relationship", anItem);
// Mode for reading shapes attached to Product by ShapeAspect
// (hybrid model representation in AP203 before 1998)
anItem = new Interface_Static("step", "read.step.shape.aspect", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval OFF");
Interface_Static::InitValues(anItem, "eval ON");
aStaticItem = Interface_Static::Static("read.step.shape.aspect");
anItem->SetCStringValue(aStaticItem.IsNull() ? "ON" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.shape.aspect", anItem);
// Mode for reading SDR and ShapeRepr if it is necessary
anItem = new Interface_Static("step", "read.step.product.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval OFF");
Interface_Static::InitValues(anItem, "eval ON");
aStaticItem = Interface_Static::Static("read.step.product.mode");
anItem->SetCStringValue(aStaticItem.IsNull() ? "ON" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.product.mode", anItem);
// Order of reading ShapeDefinitionRepresentation in ProductDefinition
anItem = new Interface_Static("step", "read.step.product.context", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval all"); // 1
Interface_Static::InitValues(anItem, "eval design"); // 2
Interface_Static::InitValues(anItem, "eval analysis");// 3
aStaticItem = Interface_Static::Static("read.step.product.context");
anItem->SetCStringValue(aStaticItem.IsNull() ? "all" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.product.context", anItem);
// What we try to read in ProductDefinition
anItem = new Interface_Static("step", "read.step.assembly.level", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval all"); // 1
Interface_Static::InitValues(anItem, "eval assembly"); // 2
Interface_Static::InitValues(anItem, "eval structure");// 3
Interface_Static::InitValues(anItem, "eval shape"); // 4
aStaticItem = Interface_Static::Static("read.step.assembly.level");
anItem->SetCStringValue(aStaticItem.IsNull() ? "all" : aStaticItem->CStringValue());
myParamMap.Bind("read.step.assembly.level", anItem);
// unit: supposed to be cascade unit (target unit for reading)
anItem = new Interface_Static("step", "write.step.unit", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval INCH"); // 1
Interface_Static::InitValues(anItem, "eval MM"); // 2
Interface_Static::InitValues(anItem, "eval ??"); // 3
Interface_Static::InitValues(anItem, "eval FT"); // 4
Interface_Static::InitValues(anItem, "eval MI"); // 5
Interface_Static::InitValues(anItem, "eval M"); // 6
Interface_Static::InitValues(anItem, "eval KM"); // 7
Interface_Static::InitValues(anItem, "eval MIL"); // 8
Interface_Static::InitValues(anItem, "eval UM"); // 9
Interface_Static::InitValues(anItem, "eval CM"); //10
Interface_Static::InitValues(anItem, "eval UIN"); //11
aStaticItem = Interface_Static::Static("write.step.unit");
anItem->SetCStringValue(aStaticItem.IsNull() ? "MM" : aStaticItem->CStringValue());
myParamMap.Bind("write.step.unit", anItem);
// Non-manifold topology reading: OFF by default (ssv; 26.11.2010)
anItem = new Interface_Static("step", "read.step.nonmanifold", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
aStaticItem = Interface_Static::Static("read.step.nonmanifold");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.step.nonmanifold", anItem);
// Non-manifold topology writing: OFF by default (ssv; 26.11.2010)
anItem = new Interface_Static("step", "write.step.nonmanifold", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
aStaticItem = Interface_Static::Static("write.step.nonmanifold");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("write.step.nonmanifold", anItem);
// I-Deas-like STEP processing: OFF by default (ssv; 22.11.2010)
anItem = new Interface_Static("step", "read.step.ideas", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
aStaticItem = Interface_Static::Static("read.step.ideas");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.step.ideas", anItem);
//Parameter to write all free vertices in one SDR (name and style of vertex are lost) (default)
//or each vertex in its own SDR (name and style of vertex are exported). (ika; 21.07.2014)
anItem = new Interface_Static("step", "write.step.vertex.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval One Compound");
Interface_Static::InitValues(anItem, "eval Single Vertex");
aStaticItem = Interface_Static::Static("write.step.vertex.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("write.step.vertex.mode", anItem);
// abv 15.11.00: ShapeProcessing
anItem = new Interface_Static("XSTEP", "write.step.resource.name", Interface_ParamText, "STEP");
myParamMap.Bind("write.step.resource.name", anItem);
anItem = new Interface_Static("XSTEP", "read.step.resource.name", Interface_ParamText, "STEP");
myParamMap.Bind("read.step.resource.name", anItem);
anItem = new Interface_Static("XSTEP", "write.step.sequence", Interface_ParamText, "ToSTEP");
myParamMap.Bind("write.step.sequence", anItem);
anItem = new Interface_Static("XSTEP", "read.step.sequence", Interface_ParamText, "FromSTEP");
myParamMap.Bind("read.step.sequence", anItem);
// ika 28.07.16: Paremeter to read all top level solids and shells,
// should be used only in case of invalid shape_representation without links to shapes.
anItem = new Interface_Static("step", "read.step.all.shapes", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
aStaticItem = Interface_Static::Static("read.step.all.shapes");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.step.all.shapes", anItem);
//--------------------------------------------------------------------------------
//From Base Class
anItem = new Interface_Static("XSTEP", "read.precision.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch 0");
Interface_Static::InitValues(anItem, "eval File");
Interface_Static::InitValues(anItem, "eval User");
anItem->SetIntegerValue(0);
aStaticItem = Interface_Static::Static("read.precision.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.precision.mode", anItem);
anItem = new Interface_Static("XSTEP", "read.precision.val", Interface_ParamReal, "1.e-03");
myParamMap.Bind("read.precision.val", anItem);
anItem = new Interface_Static("XSTEP", "read.maxprecision.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch 0");
Interface_Static::InitValues(anItem, "eval Preferred");
Interface_Static::InitValues(anItem, "eval Forced");
aStaticItem = Interface_Static::Static("read.maxprecision.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.maxprecision.mode", anItem);
anItem = new Interface_Static("XSTEP", "read.maxprecision.val", Interface_ParamReal, "1.");
myParamMap.Bind("read.maxprecision.val", anItem);
// encode regularity
// negatif ou nul : ne rien faire. positif : on y va
anItem = new Interface_Static("XSTEP", "read.encoderegularity.angle", Interface_ParamReal, "0.01");
myParamMap.Bind("read.encoderegularity.angle", anItem);
// compute surface curves
// 0 : par defaut. 2 : ne garder que le 2D. 3 : ne garder que le 3D
//gka S4054
anItem = new Interface_Static("XSTEP", "read.surfacecurve.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch -3");
Interface_Static::InitValues(anItem, "eval 3DUse_Forced");
Interface_Static::InitValues(anItem, "eval 2DUse_Forced");
Interface_Static::InitValues(anItem, "eval ?");
Interface_Static::InitValues(anItem, "eval Default");
Interface_Static::InitValues(anItem, "eval ?");
Interface_Static::InitValues(anItem, "eval 2DUse_Preferred");
Interface_Static::InitValues(anItem, "eval 3DUse_Preferred");
aStaticItem = Interface_Static::Static("read.surfacecurve.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.surfacecurve.mode", anItem);
// write precision
anItem = new Interface_Static("XSTEP", "write.precision.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch -1");
Interface_Static::InitValues(anItem, "eval Min");
Interface_Static::InitValues(anItem, "eval Average");
Interface_Static::InitValues(anItem, "eval Max");
Interface_Static::InitValues(anItem, "eval User");
aStaticItem = Interface_Static::Static("write.precision.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("write.precision.mode", anItem);
anItem = new Interface_Static("XSTEP", "write.precision.val", Interface_ParamReal, "1.e-03");
myParamMap.Bind("write.precision.val", anItem);
// Write surface curves
// 0: write (defaut), 1: do not write, 2: write except for analytical surfaces
anItem = new Interface_Static("XSTEP", "write.surfacecurve.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
//Interface_Static::InitValues(anItem,"eval NoAnalytic");
aStaticItem = Interface_Static::Static("write.surfacecurve.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 1 : aStaticItem->IntegerValue());
myParamMap.Bind("write.surfacecurve.mode", anItem);
//--------------------------------------------------------------------------------
//#74 rln 10.03.99 S4135: adding new parameter for handling use of BRepLib::SameParameter
anItem = new Interface_Static("XSTEP", "read.stdsameparameter.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "ematch 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
aStaticItem = Interface_Static::Static("read.stdsameparameter.mode");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.stdsameparameter.mode", anItem);
// unit: supposed to be cascade unit (target unit for reading)
anItem = new Interface_Static("XSTEP", "xstep.cascade.unit", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::InitValues(anItem, "eval INCH"); // 1
Interface_Static::InitValues(anItem, "eval MM"); // 2
Interface_Static::InitValues(anItem, "eval ??"); // 3
Interface_Static::InitValues(anItem, "eval FT"); // 4
Interface_Static::InitValues(anItem, "eval MI"); // 5
Interface_Static::InitValues(anItem, "eval M"); // 6
Interface_Static::InitValues(anItem, "eval KM"); // 7
Interface_Static::InitValues(anItem, "eval MIL"); // 8
Interface_Static::InitValues(anItem, "eval UM"); // 9
Interface_Static::InitValues(anItem, "eval CM"); //10
Interface_Static::InitValues(anItem, "eval UIN"); //11
aStaticItem = Interface_Static::Static("xstep.cascade.unit");
anItem->SetCStringValue(aStaticItem.IsNull() ? "MM" : aStaticItem->CStringValue());
myParamMap.Bind("xstep.cascade.unit", anItem);
//-----------------------------------------------------------
// Few variables for advanced control of translation process
//-----------------------------------------------------------
// Indicates whether to write sub-shape names to 'Name' attributes of
// STEP Representation Items
anItem = new Interface_Static("stepcaf", "write.stepcaf.subshapes.name", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off"); // 0
Interface_Static::InitValues(anItem, "eval On"); // 1
aStaticItem = Interface_Static::Static("write.stepcaf.subshapes.name");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("write.stepcaf.subshapes.name", anItem);
// Indicates whether to read sub-shape names from 'Name' attributes of
// STEP Representation Items
anItem = new Interface_Static("stepcaf", "read.stepcaf.subshapes.name", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off"); // 0
Interface_Static::InitValues(anItem, "eval On"); // 1
aStaticItem = Interface_Static::Static("read.stepcaf.subshapes.name");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.stepcaf.subshapes.name", anItem);
// STEP file encoding for names translation
// Note: the numbers should be consistent with Resource_FormatType enumeration
anItem = new Interface_Static ("stepcaf", "read.stepcaf.codepage", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval SJIS"); // Resource_FormatType_SJIS
Interface_Static::InitValues(anItem, "eval EUC"); // Resource_FormatType_EUC
Interface_Static::InitValues(anItem, "eval ANSI"); // Resource_FormatType_ANSI
Interface_Static::InitValues(anItem, "eval GB"); // Resource_FormatType_GB
Interface_Static::InitValues(anItem, "eval UTF8"); // Resource_FormatType_UTF8
Interface_Static::InitValues(anItem, "eval SystemLocale"); // Resource_FormatType_SystemLocale
aStaticItem = Interface_Static::Static("read.stepcaf.codepage");
anItem->SetIntegerValue(aStaticItem.IsNull() ? 0 : aStaticItem->IntegerValue());
myParamMap.Bind("read.stepcaf.codepage", anItem);
}
Handle(Standard_Transient) StepData_StepModel::Entity
(const Standard_Integer num) const
@ -88,19 +410,19 @@ void StepData_StepModel::AddHeaderEntity
{ theheader.Append(ent); }
void StepData_StepModel::VerifyCheck(Handle(Interface_Check)& ach) const
{
Interface_GeneralLib lib(StepData::HeaderProtocol());
Handle(StepData_StepModel) me (this);
Handle(Interface_Protocol) aHP = StepData::HeaderProtocol();
Interface_ShareTool sh(me,aHP);
Handle(Interface_GeneralModule) module; Standard_Integer CN;
for (Interface_EntityIterator iter = Header(); iter.More(); iter.Next()) {
Handle(Standard_Transient) head = iter.Value();
if (!lib.Select(head,module,CN)) continue;
module->CheckCase(CN,head,sh,ach);
}
}
//void StepData_StepModel::VerifyCheck(Handle(Interface_Check)& ach) const
//{
// Interface_GeneralLib lib(StepData::HeaderProtocol());
// Handle(StepData_StepModel) me (this);
// Handle(Interface_Protocol) aHP = StepData::HeaderProtocol();
// Interface_ShareTool sh(me,aHP);
// Handle(Interface_GeneralModule) module; Standard_Integer CN;
// for (Interface_EntityIterator iter = Header(); iter.More(); iter.Next()) {
// Handle(Standard_Transient) head = iter.Value();
// if (!lib.Select(head,module,CN)) continue;
// module->CheckCase(CN,head,sh,ach);
// }
//}
void StepData_StepModel::DumpHeader

@ -23,6 +23,8 @@
#include <Interface_EntityList.hxx>
#include <TColStd_HArray1OfInteger.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Interface_Static.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Type.hxx>
@ -76,7 +78,7 @@ public:
Standard_EXPORT void AddHeaderEntity (const Handle(Standard_Transient)& ent);
//! Specific Check, checks Header Items with HeaderProtocol
Standard_EXPORT virtual void VerifyCheck (Handle(Interface_Check)& ach) const Standard_OVERRIDE;
//Standard_EXPORT virtual void VerifyCheck (Handle(Interface_Check)& ach) const Standard_OVERRIDE;
//! Dumps the Header, with the Header Protocol of StepData.
//! If the Header Protocol is not defined, for each Header Entity,
@ -106,11 +108,12 @@ public:
DEFINE_STANDARD_RTTIEXT(StepData_StepModel,Interface_InterfaceModel)
protected:
//! Initialises all non-static parameters used in translations
Standard_EXPORT void initParameters();

@ -1086,8 +1086,8 @@ Standard_Boolean StepData_StepReaderData::ReadEntity(const Standard_Integer num,
if (!sel.Matches(entent))
{
errmess = new String("Parameter n0.%d (%s) : Entity has illegal type");
//fot not suppported STEP entity
if (entent->IsKind(STANDARD_TYPE(StepData_UndefinedEntity)))
//for not suppported STEP entity
if (!entent.IsNull() && entent->IsKind(STANDARD_TYPE(StepData_UndefinedEntity)))
sel.SetValue(entent);
}
else

@ -26,6 +26,10 @@
#include <Interface_FileReaderTool.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
#include <NCollection_List.hxx>
#include <StepData_GeneralModule.hxx>
#include <StepData_ReadWriteModule.hxx>
class StepData_FileRecognizer;
class StepData_StepReaderData;
class StepData_Protocol;
@ -100,7 +104,8 @@ protected:
private:
NCollection_List<Handle(StepData_GeneralModule)> myglib;
NCollection_List<Handle(StepData_ReadWriteModule)> myrlib;
Handle(StepData_FileRecognizer) thereco;
Interface_GeneralLib theglib;

@ -47,6 +47,7 @@ extern "C" void recfile_modeprint (int mode); // controle trace recfile
#include <Message_Messenger.hxx>
#include <Message.hxx>
#include <Standard_Mutex.hxx>
#ifdef OCCT_DEBUG
#define CHRONOMESURE
@ -117,6 +118,10 @@ Standard_Integer StepFile_Read
const Handle(StepData_FileRecognizer)& recodata)
{
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
Handle(Message_Messenger) sout = Message::DefaultMessenger();
char *ficnom = nomfic; // because const (non reconnu par C)
@ -227,6 +232,7 @@ Standard_Integer StepFile_Read
stepread_endinput(newin, ficnom); return 0;
}
}
void StepFile_Interrupt (char* mess)
{

@ -48,7 +48,7 @@ static TCollection_AsciiString lastvalue;
Standard_CString StepSelect_StepType::Value
(const Handle(Standard_Transient)& ent,
const Handle(Interface_InterfaceModel)& /*model*/) const
const Handle(Interface_InterfaceModel)& model) const
{
lastvalue.Clear();
Handle(StepData_ReadWriteModule) module;
@ -56,7 +56,8 @@ static TCollection_AsciiString lastvalue;
Standard_Boolean ok = thelib.Select (ent,module,CN);
if (!ok) {
lastvalue.AssignCat ("..NOT FROM SCHEMA ");
lastvalue.AssignCat (theproto->SchemaName());
Standard_Integer aval = model->IVal("write.step.schema");
lastvalue.AssignCat (theproto->SchemaName(aval));
lastvalue.AssignCat ("..");
} else {
Standard_Boolean plex = module->IsComplex(CN);

@ -70,8 +70,16 @@ Standard_Integer StepSelect_WorkLibrary::ReadFile
long status = 1;
DeclareAndCast(StepData_Protocol,stepro,protocol);
if (stepro.IsNull()) return 1;
Handle(StepData_StepModel) stepmodel = new StepData_StepModel;
//ISCAR
Handle(StepData_StepModel) stepmodel;
if(!model.IsNull())
stepmodel = Handle(StepData_StepModel)::DownCast(model);
if(stepmodel.IsNull())
{
stepmodel = new StepData_StepModel;
model = stepmodel;
}
StepFile_ReadTrace (0);
char *pName=(char *)name;
status = StepFile_Read (pName,stepmodel,stepro);

@ -1508,7 +1508,8 @@ Handle(Geom_Surface) StepToGeom::MakeSurface (const Handle(StepGeom_Surface)& SS
const BRepBuilderAPI_MakeFace aBFace(aBasisSurface, Precision::Confusion());
if (aBFace.IsDone())
{
const TopoDS_Shape aResult = ShapeAlgo::AlgoContainer()->C0ShapeToC1Shape(aBFace.Face(), Abs(anOffset));
Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
const TopoDS_Shape aResult = aContainer->C0ShapeToC1Shape(aBFace.Face(), Abs(anOffset));
if (aResult.ShapeType() == TopAbs_FACE)
{
aBasisSurface = BRep_Tool::Surface(TopoDS::Face(aResult));

@ -30,7 +30,6 @@
#include <Geom_Curve.hxx>
#include <Geom_RectangularTrimmedSurface.hxx>
#include <Geom_Surface.hxx>
#include <Interface_Static.hxx>
#include <Message_Messenger.hxx>
#include <Message_ProgressSentry.hxx>
#include <Precision.hxx>
@ -89,10 +88,12 @@
#include <TransferBRep.hxx>
#include <stdio.h>
static void ResetPreci (const TopoDS_Shape& S, Standard_Real maxtol)
static void ResetPreci (const TopoDS_Shape& S,
Standard_Real maxtol,
const Handle(Interface_InterfaceModel)& theModel)
{
//:S4136
Standard_Integer modetol = Interface_Static::IVal("read.maxprecision.mode");
Standard_Integer modetol = theModel->IVal("read.maxprecision.mode");
if (modetol) {
ShapeFix_ShapeTolerance STU;
STU.LimitTolerance (S,Precision::Confusion(),maxtol);
@ -228,7 +229,7 @@ void StepToTopoDS_Builder::Init
}
//:S4136 ShapeFix::SameParameter (S,Standard_False);
ResetPreci (S, MaxTol());
ResetPreci (S, MaxTol(), TP->Model());
}
else {
TP->AddWarning(aShell," OuterShell from ManifoldSolidBrep not mapped to TopoDS");
@ -336,7 +337,7 @@ void StepToTopoDS_Builder::Init
}
//:S4136 ShapeFix::SameParameter (S,Standard_False);
ResetPreci (S, MaxTol());
ResetPreci (S, MaxTol(), TP->Model());
}
// ============================================================================
@ -543,8 +544,8 @@ void StepToTopoDS_Builder::Init
}
//:S4136 ShapeFix::SameParameter (S,Standard_False);
ResetPreci (S, MaxTol());
ResetPreci (Shl, MaxTol()); //skl
ResetPreci (S, MaxTol(), TP->Model());
ResetPreci (Shl, MaxTol(), TP->Model()); //skl
}
// ============================================================================
@ -604,7 +605,7 @@ void StepToTopoDS_Builder::Init (const Handle(StepShape_EdgeBasedWireframeModel)
myError = ( myResult.IsNull() ? StepToTopoDS_BuilderDone : StepToTopoDS_BuilderOther );
done = ! myResult.IsNull();
ResetPreci (myResult, MaxTol());
ResetPreci (myResult, MaxTol(), TP->Model());
}
// ============================================================================
@ -666,7 +667,7 @@ void StepToTopoDS_Builder::Init (const Handle(StepShape_FaceBasedSurfaceModel)&
myError = ( myResult.IsNull() ? StepToTopoDS_BuilderDone : StepToTopoDS_BuilderOther );
done = ! myResult.IsNull();
ResetPreci (myResult, MaxTol());
ResetPreci (myResult, MaxTol(), TP->Model());
}

@ -22,7 +22,7 @@
#include <Geom2d_Curve.hxx>
#include <Geom_Curve.hxx>
#include <Geom_Surface.hxx>
#include <Interface_Static.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Precision.hxx>
#include <ShapeExtend_WireData.hxx>
#include <ShapeFix_Wire.hxx>
@ -106,7 +106,7 @@ Standard_Boolean StepToTopoDS_TranslateCompositeCurve::Init (const Handle(StepGe
Standard_Boolean isClosed = Standard_False;
if ( SurfMode ) {
Standard_Integer modepcurve = Interface_Static::IVal("read.surfacecurve.mode");
Standard_Integer modepcurve = TP->Model()->IVal("read.surfacecurve.mode");
if ( modepcurve ==-3 ) SurfMode = Standard_False;
}

@ -79,8 +79,10 @@ Standard_Boolean StepToTopoDS_TranslateCurveBoundedSurface::Init (
// abv 30.06.00: trj4_k1_geo-tu.stp #108: do as in TranslateFace
// pdn to force bsplsurf to be periodic
Handle(StepGeom_BSplineSurface) sgbss = Handle(StepGeom_BSplineSurface)::DownCast(S);
if (!sgbss.IsNull()) {
Handle(Geom_Surface) periodicSurf = ShapeAlgo::AlgoContainer()->ConvertToPeriodic(Surf);
if (!sgbss.IsNull())
{
Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
Handle(Geom_Surface) periodicSurf = aContainer->ConvertToPeriodic(Surf);
if (!periodicSurf.IsNull()) {
TP->AddWarning(S, "Surface forced to be periodic");
Surf = periodicSurf;

@ -38,7 +38,6 @@
#include <Geom_Surface.hxx>
#include <gp_Pnt.hxx>
#include <gp_Pnt2d.hxx>
#include <Interface_Static.hxx>
#include <Precision.hxx>
#include <ShapeAlgo.hxx>
#include <ShapeAlgo_AlgoContainer.hxx>
@ -50,6 +49,7 @@
#include <ShapeFix_EdgeProjAux.hxx>
#include <Standard_ErrorHandler.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_Curve.hxx>
#include <StepGeom_Pcurve.hxx>
#include <StepGeom_PcurveOrSurface.hxx>
@ -174,7 +174,8 @@ static void CheckPCurves (TopoDS_Wire& aWire, const TopoDS_Face& aFace,
// advanced check
XSAlgo::AlgoContainer()->CheckPCurve (myEdge, aFace, preci, sbwd->IsSeam(i));
Handle(XSAlgo_AlgoContainer) aContainer = new XSAlgo_AlgoContainer;
aContainer->CheckPCurve(myEdge, aFace, preci, sbwd->IsSeam(i));
}
}
@ -225,7 +226,10 @@ void StepToTopoDS_TranslateEdgeLoop::Init(const Handle(StepShape_FaceBound)& Fac
done = Standard_True;
return;
}
Standard_Integer modepcurve = Interface_Static::IVal("read.surfacecurve.mode");
Handle(StepData_StepModel) aModel =
Handle(StepData_StepModel)::DownCast(aTool.TransientProcess()->Model());
Standard_Integer modepcurve = aModel->IVal("read.surfacecurve.mode");
// 0,1 : suivre le code, 2 : ne prendre que pcurve, 3 : ne prendre que C3D
BRep_Builder B;
@ -686,7 +690,8 @@ void StepToTopoDS_TranslateEdgeLoop::Init(const Handle(StepShape_FaceBound)& Fac
if (!aTool.ComputePCurve())
for (TopoDS_Iterator EdgeIt(W);EdgeIt.More();EdgeIt.Next()) {
TopoDS_Edge edge = TopoDS::Edge(EdgeIt.Value());
Handle(ShapeFix_EdgeProjAux) myEdgePro = ShapeAlgo::AlgoContainer()->ToolContainer()->EdgeProjAux();
Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
Handle(ShapeFix_EdgeProjAux) myEdgePro =aContainer->ToolContainer()->EdgeProjAux();
myEdgePro->Init (Face, edge);
myEdgePro->Compute(preci);
if (myEdgePro->IsFirstDone() && myEdgePro->IsLastDone()) {

@ -184,8 +184,10 @@ void StepToTopoDS_TranslateFace::Init
}
// pdn to force bsplsurf to be periodic
Handle(StepGeom_BSplineSurface) sgbss = Handle(StepGeom_BSplineSurface)::DownCast(StepSurf);
if (!sgbss.IsNull()) {
Handle(Geom_Surface) periodicSurf = ShapeAlgo::AlgoContainer()->ConvertToPeriodic(GeomSurf);
if (!sgbss.IsNull())
{
Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
Handle(Geom_Surface) periodicSurf = aContainer->ConvertToPeriodic(GeomSurf);
if (!periodicSurf.IsNull()) {
TP->AddWarning(StepSurf, "Surface forced to be periodic");
GeomSurf = periodicSurf;

@ -18,6 +18,7 @@
#include <BRepClass3d.hxx>
#include <MoniTool_DataMapOfShapeTransient.hxx>
#include <StdFail_NotDone.hxx>
#include <Interface_InterfaceModel.hxx>
#include <StepShape_BrepWithVoids.hxx>
#include <StepShape_ClosedShell.hxx>
#include <StepShape_HArray1OfOrientedClosedShell.hxx>
@ -76,7 +77,7 @@ TopoDSToStep_MakeBrepWithVoids::
CurrentShell.Reverse();
//:d7 abv 16 Mar 98: try to treat 'open' shells as closed since flag
// IsClosed() is often incorrect (taken from MakeManifoldSolid(Solid))
aTool.Init(aMap, Standard_False);
aTool.Init(aMap, Standard_False, FP->Model()->IVal("write.surfacecurve.mode"));
StepB.Init(CurrentShell, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );
if (StepB.IsDone()) {

@ -17,6 +17,7 @@
#include <BRepClass3d.hxx>
#include <StdFail_NotDone.hxx>
#include <Interface_InterfaceModel.hxx>
#include <StepShape_ClosedShell.hxx>
#include <StepShape_FacetedBrep.hxx>
#include <StepShape_TopologicalRepresentationItem.hxx>
@ -41,8 +42,9 @@ TopoDSToStep_MakeFacetedBrep::
if (aShell.Closed()) {
Handle(StepShape_TopologicalRepresentationItem) aItem;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_True);
TopoDSToStep_Tool aTool(aMap,
Standard_True,
FP->Model()->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aShell, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );
@ -89,8 +91,9 @@ TopoDSToStep_MakeFacetedBrep::
if (aOuterShell.Closed()) {
Handle(StepShape_TopologicalRepresentationItem) aItem;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_True);
TopoDSToStep_Tool aTool(aMap,
Standard_True,
FP->Model()->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aOuterShell, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );

@ -18,6 +18,7 @@
#include <BRepClass3d.hxx>
#include <MoniTool_DataMapOfShapeTransient.hxx>
#include <StdFail_NotDone.hxx>
#include <Interface_InterfaceModel.hxx>
#include <StepShape_ClosedShell.hxx>
#include <StepShape_FacetedBrepAndBrepWithVoids.hxx>
#include <StepShape_HArray1OfOrientedClosedShell.hxx>
@ -67,7 +68,7 @@ TopoDSToStep_MakeFacetedBrepAndBrepWithVoids::
TopoDS_Shell CurrentShell = TopoDS::Shell(It.Value());
if (It.Value().Closed()) {
aTool.Init(aMap, Standard_False);
aTool.Init(aMap, Standard_False, FP->Model()->IVal("write.surfacecurve.mode"));
StepB.Init(CurrentShell, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );

@ -17,6 +17,7 @@
#include <MoniTool_DataMapOfShapeTransient.hxx>
#include <StdFail_NotDone.hxx>
#include <Interface_InterfaceModel.hxx>
#include <StepShape_GeometricCurveSet.hxx>
#include <StepShape_GeometricSetSelect.hxx>
#include <StepShape_HArray1OfGeometricSetSelect.hxx>
@ -42,7 +43,9 @@ TopoDSToStep_MakeGeometricCurveSet::TopoDSToStep_MakeGeometricCurveSet(
done = Standard_False;
Handle(TColStd_HSequenceOfTransient) itemList;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool (aMap, Standard_False);
TopoDSToStep_Tool aTool (aMap,
Standard_False,
FP->Model()->IVal("write.surfacecurve.mode"));
TopoDSToStep_WireframeBuilder wirefB (aShape, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );

@ -17,6 +17,7 @@
#include <BRepClass3d.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepShape_ClosedShell.hxx>
#include <StepShape_HArray1OfFace.hxx>
#include <StepShape_ManifoldSolidBrep.hxx>
@ -37,7 +38,8 @@ static Handle(StepShape_ManifoldSolidBrep) MakeManifoldSolidBrep (const TopoDS_S
Handle(StepShape_ManifoldSolidBrep) theManifoldSolidBrep;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_False);
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
TopoDSToStep_Tool aTool(aMap, Standard_False, aModel->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aShell, aTool, FP);

@ -17,6 +17,7 @@
#include <MoniTool_DataMapOfShapeTransient.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepShape_ClosedShell.hxx>
#include <StepShape_ConnectedFaceSet.hxx>
#include <StepShape_FaceSurface.hxx>
@ -50,7 +51,10 @@ TopoDSToStep_MakeShellBasedSurfaceModel::
done = Standard_False;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_False);
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
TopoDSToStep_Tool aTool(aMap,
Standard_False,
aModel->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aFace, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );
@ -98,7 +102,10 @@ TopoDSToStep_MakeShellBasedSurfaceModel::
Handle(StepShape_ClosedShell) aClosedShell;
MoniTool_DataMapOfShapeTransient aMap;
TopoDSToStep_Tool aTool(aMap, Standard_False);
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
TopoDSToStep_Tool aTool(aMap,
Standard_False,
aModel->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aShell, aTool, FP);
//TopoDSToStep::AddResult ( FP, aTool );
@ -155,7 +162,11 @@ TopoDSToStep_MakeShellBasedSurfaceModel::
if (It.Value().ShapeType() == TopAbs_SHELL) {
aShell = TopoDS::Shell(It.Value());
TopoDSToStep_Tool aTool(aMap, Standard_False);
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
TopoDSToStep_Tool aTool(aMap,
Standard_False,
aModel->IVal("write.surfacecurve.mode"));
TopoDSToStep_Builder StepB(aShell, aTool, FP);
TopoDSToStep::AddResult ( FP, aTool );

@ -30,8 +30,8 @@
#include <GeomToStep_MakeCurve.hxx>
#include <GeomToStep_MakeLine.hxx>
#include <gp_Vec.hxx>
#include <Interface_Static.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_HArray1OfPcurveOrSurface.hxx>
#include <StepGeom_Line.hxx>
#include <StepGeom_SeamCurve.hxx>
@ -88,7 +88,9 @@ void TopoDSToStep_MakeStepEdge::Init(const TopoDS_Edge& aEdge,
aTool.SetCurrentEdge(aEdge);
// [BEGIN] Processing non-manifold topology (ssv; 11.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0;
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
Standard_Boolean isNMMode = aModel->IVal("write.step.nonmanifold") != 0;
if (isNMMode) {
Handle(StepShape_EdgeCurve) anEC;
Handle(TransferBRep_ShapeMapper) aSTEPMapper = TransferBRep::ShapeMapper(FP, aEdge);

@ -47,11 +47,11 @@
#include <Geom_TrimmedCurve.hxx>
#include <GeomToStep_MakeCurve.hxx>
#include <GeomToStep_MakeSurface.hxx>
#include <Interface_Static.hxx>
#include <Precision.hxx>
#include <ShapeAlgo.hxx>
#include <ShapeAlgo_AlgoContainer.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_Curve.hxx>
#include <StepGeom_DegenerateToroidalSurface.hxx>
#include <StepGeom_GeometricRepresentationContextAndParametricRepresentationContext.hxx>
@ -124,7 +124,8 @@ void TopoDSToStep_MakeStepFace::Init(const TopoDS_Face& aFace,
new TransferBRep_ShapeMapper(aFace); // on ne sait jamais
// [BEGIN] Processing non-manifold topology (another approach) (ssv; 10.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0;
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
Standard_Boolean isNMMode = aModel->IVal("write.step.nonmanifold") != 0;
if (isNMMode) {
Handle(StepShape_AdvancedFace) anAF;
Handle(TransferBRep_ShapeMapper) aSTEPMapper = TransferBRep::ShapeMapper(FP, aFace);
@ -220,16 +221,20 @@ void TopoDSToStep_MakeStepFace::Init(const TopoDS_Face& aFace,
// create basis curve
Standard_Real UF, VF, UL, VL;
ShapeAlgo::AlgoContainer()->GetFaceUVBounds ( aFace, UF, UL, VF, VL );
Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
aContainer->GetFaceUVBounds ( aFace, UF, UL, VF, VL );
gp_Ax2 Ax2 ( pos.XYZ() + X.XYZ() * TS->MajorRadius(), X ^ dir, X );
Handle(Geom_Curve) BasisCurve = new Geom_Circle ( Ax2, TS->MinorRadius() );
// convert basis curve to bspline in order to avoid self-intersecting
// surface of revolution (necessary e.g. for CATIA)
if (VL - VF - 2 * M_PI < -Precision::PConfusion())
BasisCurve = ShapeAlgo::AlgoContainer()->ConvertCurveToBSpline (BasisCurve, VF, VL, Precision::Approximation(),
{
//Handle(ShapeAlgo_AlgoContainer) aContainer = new ShapeAlgo_AlgoContainer;
BasisCurve = aContainer->ConvertCurveToBSpline(BasisCurve, VF, VL, Precision::Approximation(),
GeomAbs_C1, 100, 9);
//BasisCurve = new Geom_TrimmedCurve ( BasisCurve, VF, VL );
}
// create surface of revolution
gp_Ax1 Axis = Ax3.Axis();

@ -18,8 +18,8 @@
#include <BRep_Tool.hxx>
#include <GeomToStep_MakeCartesianPoint.hxx>
#include <gp_Pnt.hxx>
#include <Interface_Static.hxx>
#include <StdFail_NotDone.hxx>
#include <StepData_StepModel.hxx>
#include <StepGeom_CartesianPoint.hxx>
#include <StepShape_TopologicalRepresentationItem.hxx>
#include <StepShape_VertexPoint.hxx>
@ -62,7 +62,8 @@ void TopoDSToStep_MakeStepVertex::Init(const TopoDS_Vertex& aVertex,
aTool.SetCurrentVertex(aVertex);
// [BEGIN] Processing non-manifold topology (ssv; 11.11.2010)
Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0;
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(FP->Model());
Standard_Boolean isNMMode = aModel->IVal("write.step.nonmanifold") != 0;
if (isNMMode) {
Handle(StepShape_VertexPoint) aVP;
Handle(TransferBRep_ShapeMapper) aSTEPMapper = TransferBRep::ShapeMapper(FP, aVertex);

@ -16,7 +16,6 @@
#include <BRep_Tool.hxx>
#include <Interface_Static.hxx>
#include <StepShape_TopologicalRepresentationItem.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
@ -31,9 +30,8 @@
//purpose :
//=======================================================================
TopoDSToStep_Tool::TopoDSToStep_Tool()
:myLowestTol(0.),myReversedSurface (Standard_False)
:myLowestTol(0.),myReversedSurface (Standard_False),myPCurveMode(1)
{
myPCurveMode = Interface_Static::IVal("write.surfacecurve.mode");
}
//=======================================================================
@ -41,10 +39,12 @@ TopoDSToStep_Tool::TopoDSToStep_Tool()
//purpose :
//=======================================================================
TopoDSToStep_Tool::TopoDSToStep_Tool(const MoniTool_DataMapOfShapeTransient& M, const Standard_Boolean FacetedContext)
TopoDSToStep_Tool::TopoDSToStep_Tool(const MoniTool_DataMapOfShapeTransient& M,
const Standard_Boolean FacetedContext,
Standard_Integer theCurveMode)
:myLowestTol(0.),myReversedSurface(Standard_False)
{
Init ( M, FacetedContext );
Init ( M, FacetedContext, theCurveMode );
}
//=======================================================================
@ -52,11 +52,13 @@ TopoDSToStep_Tool::TopoDSToStep_Tool(const MoniTool_DataMapOfShapeTransient& M,
//purpose :
//=======================================================================
void TopoDSToStep_Tool::Init(const MoniTool_DataMapOfShapeTransient& M, const Standard_Boolean FacetedContext)
void TopoDSToStep_Tool::Init(const MoniTool_DataMapOfShapeTransient& M,
const Standard_Boolean FacetedContext,
Standard_Integer theCurveMode)
{
myDataMap = M;
myFacetedContext = FacetedContext;
myPCurveMode = Interface_Static::IVal("write.surfacecurve.mode");
myPCurveMode = theCurveMode;
}
//=======================================================================

@ -50,9 +50,13 @@ public:
Standard_EXPORT TopoDSToStep_Tool();
Standard_EXPORT TopoDSToStep_Tool(const MoniTool_DataMapOfShapeTransient& M, const Standard_Boolean FacetedContext);
Standard_EXPORT TopoDSToStep_Tool(const MoniTool_DataMapOfShapeTransient& M,
const Standard_Boolean FacetedContext,
Standard_Integer theCurveMode);
Standard_EXPORT void Init (const MoniTool_DataMapOfShapeTransient& M, const Standard_Boolean FacetedContext);
Standard_EXPORT void Init (const MoniTool_DataMapOfShapeTransient& M,
const Standard_Boolean FacetedContext,
Standard_Integer theCurveMode);
Standard_EXPORT Standard_Boolean IsBound (const TopoDS_Shape& S);

@ -1402,6 +1402,43 @@ static Standard_Integer testDoc (Draw_Interpretor&,
return 0;
}
static void initStatics()
{
//Be carefull using this method and static map.
//For step files all this parameters initialises in the model.
//They are initialised here to avoid errors during using auxiliary
//functions to work with step files particulary function "param" in IFSelect_Functions.cxx.
//Do NOT USE Interface_Static methods for getting param values while reading step.
//If you need the parameters values use StepData_StepModel::GetParam method
// Indicates whether to write sub-shape names to 'Name' attributes of
// STEP Representation Items
Interface_Static::Init("stepcaf", "write.stepcaf.subshapes.name", 'e', "");
Interface_Static::Init("stepcaf", "write.stepcaf.subshapes.name", '&', "enum 0");
Interface_Static::Init("stepcaf", "write.stepcaf.subshapes.name", '&', "eval Off"); // 0
Interface_Static::Init("stepcaf", "write.stepcaf.subshapes.name", '&', "eval On"); // 1
Interface_Static::SetIVal("write.stepcaf.subshapes.name", 0); // Disabled by default
// Indicates whether to read sub-shape names from 'Name' attributes of
// STEP Representation Items
Interface_Static::Init("stepcaf", "read.stepcaf.subshapes.name", 'e', "");
Interface_Static::Init("stepcaf", "read.stepcaf.subshapes.name", '&', "enum 0");
Interface_Static::Init("stepcaf", "read.stepcaf.subshapes.name", '&', "eval Off"); // 0
Interface_Static::Init("stepcaf", "read.stepcaf.subshapes.name", '&', "eval On"); // 1
Interface_Static::SetIVal("read.stepcaf.subshapes.name", 0); // Disabled by default
// STEP file encoding for names translation
// Note: the numbers should be consistent with Resource_FormatType enumeration
Interface_Static::Init("step", "read.stepcaf.codepage", 'e', "");
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "enum 0");
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval SJIS"); // Resource_FormatType_SJIS
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval EUC"); // Resource_FormatType_EUC
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval ANSI"); // Resource_FormatType_ANSI
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval GB"); // Resource_FormatType_GB
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval UTF8"); // Resource_FormatType_UTF8
Interface_Static::Init ("step", "read.stepcaf.codepage", '&', "eval SystemLocale"); // Resource_FormatType_SystemLocale
Interface_Static::SetCVal ("read.stepcaf.codepage", "UTF8");
}
//=======================================================================
//function : Init
@ -1418,7 +1455,13 @@ void XDEDRAW::Init(Draw_Interpretor& di)
initactor = Standard_True;
// Load static variables for STEPCAF (ssv; 16.08.2012)
STEPCAFControl_Controller::Init();
static Standard_Boolean inic = Standard_False;
if (!inic) {
initStatics();
Handle(STEPCAFControl_Controller) STEPCTL = new STEPCAFControl_Controller;
XSDRAW::SetController(STEPCTL);
inic = Standard_True;
}
// Initialize XCAF formats
Handle(TDocStd_Application) anApp = DDocStd::GetApplication();

@ -308,7 +308,12 @@ static Standard_Integer WriteIges (Draw_Interpretor& di, Standard_Integer argc,
static Standard_Integer ReadStep (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
{
DeclareAndCast(STEPControl_Controller,ctl,XSDRAW::Controller());
if (ctl.IsNull()) XSDRAW::SetNorm("STEP");
if (ctl.IsNull())
{
ctl = new STEPCAFControl_Controller;
XSDRAW::SetController(ctl);
}
Standard_CString aDocName = NULL;
TCollection_AsciiString aFilePath, aModeStr;
@ -341,7 +346,7 @@ static Standard_Integer ReadStep (Draw_Interpretor& di, Standard_Integer argc, c
else di << " Model taken from the session : " << fnom.ToCString() << "\n";
// di<<" -- Names of variables BREP-DRAW prefixed by : "<<rnom<<"\n";
STEPCAFControl_Reader reader ( XSDRAW::Session(),modfic);
STEPCAFControl_Reader reader (XSDRAW::Session(), ctl, modfic);
if (!aModeStr.IsEmpty())
{
Standard_Boolean mode = Standard_True;
@ -426,9 +431,14 @@ static Standard_Integer WriteStep (Draw_Interpretor& di, Standard_Integer argc,
Standard_CString multifile = 0;
Standard_Integer k = 3;
DeclareAndCast(STEPControl_Controller,ctl,XSDRAW::Controller());
if (ctl.IsNull()) XSDRAW::SetNorm("STEP");
STEPCAFControl_Writer writer ( XSDRAW::Session(), Standard_True );
DeclareAndCast(STEPCAFControl_Controller, ctl, XSDRAW::Controller());
if (ctl.IsNull())
{
ctl = new STEPCAFControl_Controller;
XSDRAW::SetController(ctl);
}
STEPCAFControl_Writer writer ( XSDRAW::Session(), ctl, Standard_True );
STEPControl_StepModelType mode = STEPControl_AsIs;
if ( argc > k ) {
@ -566,7 +576,6 @@ static Standard_Integer Expand (Draw_Interpretor& di, Standard_Integer argc, con
return 0;
}
//=======================================================================
//function : WriteVrml
//purpose : Write DECAF document to Vrml

@ -29,8 +29,8 @@
#include <Message_ProgressIndicator.hxx>
#include <Resource_Manager.hxx>
#include <ShapeAlgo.hxx>
#include <ShapeAlgo_AlgoContainer.hxx>
#include <ShapeAlgo_ToolContainer.hxx>
//#include <ShapeAlgo_AlgoContainer.hxx>
//#include <ShapeAlgo_ToolContainer.hxx>
#include <ShapeAnalysis_Edge.hxx>
#include <ShapeBuild_Edge.hxx>
#include <ShapeBuild_ReShape.hxx>
@ -64,6 +64,7 @@
#include <XSAlgo_AlgoContainer.hxx>
#include <XSAlgo_ToolContainer.hxx>
#include <TopExp_Explorer.hxx>
#include <Standard_Mutex.hxx>
IMPLEMENT_STANDARD_RTTIEXT(XSAlgo_AlgoContainer,Standard_Transient)
@ -83,7 +84,7 @@ XSAlgo_AlgoContainer::XSAlgo_AlgoContainer()
void XSAlgo_AlgoContainer::PrepareForTransfer() const
{
UnitsMethods::SetCasCadeLengthUnit ( Interface_Static::IVal("xstep.cascade.unit") );
UnitsMethods::SetCasCadeLengthUnit(IVal("xstep.cascade.unit"));
}
//=======================================================================
@ -105,7 +106,7 @@ TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape (const TopoDS_Shape& shape,
Handle(ShapeProcess_ShapeContext) context = Handle(ShapeProcess_ShapeContext)::DownCast(info);
if ( context.IsNull() )
{
Standard_CString rscfile = Interface_Static::CVal(prscfile);
Standard_CString rscfile = CVal(prscfile);
if (!rscfile)
rscfile = prscfile;
context = new ShapeProcess_ShapeContext(shape, rscfile);
@ -115,8 +116,7 @@ TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape (const TopoDS_Shape& shape,
}
context->SetNonManifold(NonManifold);
info = context;
Standard_CString seq = Interface_Static::CVal ( pseq );
Standard_CString seq = CVal(pseq);
if ( ! seq ) seq = pseq;
// if resource file is not loaded or does not define <seq>.exec.op,
@ -139,7 +139,7 @@ TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape (const TopoDS_Shape& shape,
try {
OCC_CATCH_SIGNALS
Handle(ShapeExtend_MsgRegistrator) msg = new ShapeExtend_MsgRegistrator;
Handle(ShapeFix_Shape) sfs = ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape;// ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
sfs->Init ( shape );
sfs->SetMsgRegistrator ( msg );
sfs->SetPrecision ( Prec );
@ -360,7 +360,8 @@ Standard_Boolean XSAlgo_AlgoContainer::CheckPCurve (const TopoDS_Edge& E,
B.Range(edge,face,w1,w2);
B.SameRange(edge, Standard_False );
//:S4136
Standard_Integer SPmode = Interface_Static::IVal("read.stdsameparameter.mode");
Standard_Integer SPmode = IVal("read.stdsameparameter.mode");
if ( SPmode )
B.SameParameter (edge, Standard_False );
@ -569,3 +570,102 @@ void XSAlgo_AlgoContainer::MergeTransferInfo(const Handle(Transfer_FinderProcess
}
}
}
//=======================================================================
// Method : SetModel
// Purpose :
//=======================================================================
void XSAlgo_AlgoContainer::SetModel(Handle(Interface_InterfaceModel)& theModel)
{
myModel = theModel;
initParameters();
}
//=======================================================================
// Method : getParam
// Purpose :
//=======================================================================
Handle(Interface_Static) XSAlgo_AlgoContainer::getParam
(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam;
if (!myModel.IsNull())
aParam = myModel->GetParam(theParamName);
if (aParam.IsNull())
{
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
aParam = Interface_Static::Static(theParamName);
}
}
return aParam;
}
//=======================================================================
//function : IVal
//purpose :
//=======================================================================
Standard_Integer XSAlgo_AlgoContainer::IVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = getParam(theParamName);
return (aParam.IsNull() ? 0 : aParam->IntegerValue());
}
//=======================================================================
//function : RVal
//purpose :
//=======================================================================
Standard_Real XSAlgo_AlgoContainer::RVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = getParam(theParamName);
return (aParam.IsNull() ? 0.0 : aParam->RealValue());
}
//=======================================================================
//function : CVal
//purpose :
//=======================================================================
Standard_CString XSAlgo_AlgoContainer::CVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = getParam(theParamName);
return (aParam.IsNull() ? "" : aParam->CStringValue());
}
void XSAlgo_AlgoContainer::initParameters()
{
if (myModel.IsNull())
return;
Handle(Interface_Static) anItem = new Interface_Static("XSTEP", "read.stdsameparameter.mode", Interface_ParamEnum, "");
Interface_Static::InitValues(anItem, "enum 0");
Interface_Static::InitValues(anItem, "eval Off");
Interface_Static::InitValues(anItem, "eval On");
anItem->SetCStringValue("Off");
myModel->AddParam("read.stdsameparameter.mode", anItem);
// unit: supposed to be cascade unit (target unit for reading)
anItem = new Interface_Static("XSTEP", "xstep.cascade.unit", Interface_ParamEnum, "");
Interface_Static::Init("XSTEP", "xstep.cascade.unit", 'e', "");
Interface_Static::InitValues(anItem, "enum 1");
Interface_Static::Init("XSTEP", "xstep.cascade.unit", '&', "enum 1");
Interface_Static::InitValues(anItem, "eval INCH"); // 1
Interface_Static::InitValues(anItem, "eval MM"); // 2
Interface_Static::InitValues(anItem, "eval ??"); // 3
Interface_Static::InitValues(anItem, "eval FT"); // 4
Interface_Static::InitValues(anItem, "eval MI"); // 5
Interface_Static::InitValues(anItem, "eval M"); // 6
Interface_Static::InitValues(anItem, "eval KM"); // 7
Interface_Static::InitValues(anItem, "eval MIL"); // 8
Interface_Static::InitValues(anItem, "eval UM"); // 9
Interface_Static::InitValues(anItem, "eval CM"); //10
Interface_Static::InitValues(anItem, "eval UIN"); //11
anItem->SetCStringValue("MM");
myModel->AddParam("xstep.cascade.unit", anItem);
}

@ -19,6 +19,8 @@
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Static.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Real.hxx>
#include <Standard_CString.hxx>
@ -82,6 +84,9 @@ public:
//! from item startTPitem
Standard_EXPORT virtual void MergeTransferInfo (const Handle(Transfer_FinderProcess)& FP, const Handle(Standard_Transient)& info) const;
//! Sets the model for translations
Standard_EXPORT void SetModel(Handle(Interface_InterfaceModel)& theModel);
@ -89,13 +94,22 @@ public:
protected:
//! Returns a parameter for translations.
//! First tries get it from non-static model,
//! if failure get it from static map
Standard_EXPORT Handle(Interface_Static) getParam(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Integer IVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Real RVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_CString CVal(const Standard_CString theParamName) const;
void initParameters();
private:
Handle(XSAlgo_ToolContainer) myTC;
Handle(Interface_InterfaceModel) myModel;
};

@ -61,6 +61,7 @@
#include <XSControl_SignTransferStatus.hxx>
#include <XSControl_TransferReader.hxx>
#include <XSControl_WorkSession.hxx>
#include <Standard_Mutex.hxx>
IMPLEMENT_STANDARD_RTTIEXT(XSControl_Controller,Standard_Transient)
@ -76,6 +77,8 @@ static NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>
XSControl_Controller::XSControl_Controller(const Standard_CString theLongName, const Standard_CString theShortName)
: myShortName(theShortName), myLongName(theLongName)
{
if (!myLongName.IsEqual("STEP") && !myShortName.IsEqual("step"))
{
// Standard parameters
Interface_Static::Standards();
@ -84,6 +87,12 @@ XSControl_Controller::XSControl_Controller (const Standard_CString theLongName,
TraceStatic("write.precision.mode", 6);
TraceStatic("write.precision.val", 6);
}
}
Standard_Boolean XSControl_Controller::Init(const Handle(XSControl_WorkSession)& /*theWS*/)
{
return Standard_True;
}
//=======================================================================
//function : TraceStatic
@ -98,6 +107,18 @@ void XSControl_Controller::TraceStatic (const Standard_CString theName, const St
myParamUses.Append(theUse);
}
//=======================================================================
//function : TraceNotStatic
//purpose :
//=======================================================================
void XSControl_Controller::TraceNotStatic(const Handle(Interface_Static)& theParam, const Standard_Integer theUse)
{
if (theParam.IsNull()) return;
myParams.Append(theParam);
myParamUses.Append(theUse);
}
//=======================================================================
//function : SetNames
//purpose :
@ -120,6 +141,9 @@ void XSControl_Controller::SetNames (const Standard_CString theLongName, const S
void XSControl_Controller::Record (const Standard_CString theName) const
{
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
if (listad.IsBound(theName)) {
Handle(Standard_Transient) thisadapt(this);
Handle(Standard_Transient) newadapt = listad.ChangeFind(theName);
@ -130,6 +154,7 @@ void XSControl_Controller::Record (const Standard_CString theName) const
}
listad.Bind(theName, this);
}
}
//=======================================================================
//function : Recorded
@ -138,11 +163,15 @@ void XSControl_Controller::Record (const Standard_CString theName) const
Handle(XSControl_Controller) XSControl_Controller::Recorded(const Standard_CString theName)
{
static Standard_Mutex aPars;
{
Standard_Mutex::Sentry aLock(aPars);
Handle(Standard_Transient) recorded;
return (listad.Find(theName, recorded) ?
Handle(XSControl_Controller)::DownCast(recorded) :
Handle(XSControl_Controller)());
}
}
// #### DEFINITION ####
@ -476,9 +505,13 @@ void XSControl_Controller::Customise (Handle(XSControl_WorkSession)& WS)
// Here for the specific manufacturers of controllers could create the
// Parameters: So wait here
//for step it is not needed
if (!myLongName.IsEqual("STEP") && !myShortName.IsEqual("step"))
{
Handle(TColStd_HSequenceOfHAsciiString) listat = Interface_Static::Items();
Handle(IFSelect_ParamEditor) paramed = IFSelect_ParamEditor::StaticEditor(listat, "All Static Parameters");
WS->AddNamedItem("xst-static-params-edit", paramed);
Handle(IFSelect_EditForm) paramform = paramed->Form(Standard_False);
WS->AddNamedItem("xst-static-params", paramform);
}
}

@ -20,6 +20,7 @@
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Interface_Static.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColStd_SequenceOfTransient.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
@ -66,6 +67,9 @@ class XSControl_Controller : public Standard_Transient
{
public:
//! Initialisation of additional non-static parameters taken data from session model
Standard_EXPORT virtual Standard_Boolean Init(const Handle(XSControl_WorkSession)& /*theWS*/);
//! Changes names
//! if a name is empty, the formerly set one remains
//! Remark : Does not call Record or AutoRecord
@ -203,6 +207,9 @@ class XSControl_Controller : public Standard_Transient
//! Records the name of a Static to be traced for a given use
Standard_EXPORT void TraceStatic (const Standard_CString theName, const Standard_Integer theUse);
//! Records the non Static parameter to be traced for a given use
Standard_EXPORT void TraceNotStatic(const Handle(Interface_Static)& theParam, const Standard_Integer theUse);
TCollection_AsciiString myShortName;
TCollection_AsciiString myLongName;
Handle(IFSelect_WorkLibrary) myAdaptorLibrary;
@ -218,6 +225,7 @@ class XSControl_Controller : public Standard_Transient
NCollection_Vector<Handle(Standard_Transient)> myParams;
NCollection_Vector<Standard_Integer> myParamUses;
Handle(Interface_HArray1OfHAsciiString) myModeWriteShapeN;
};
#endif // _XSControl_Controller_HeaderFile

@ -19,7 +19,6 @@
#include <Interface_CheckIterator.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Macros.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
@ -81,12 +80,13 @@ static IFSelect_ReturnStatus XSControl_xnorm(const Handle(IFSelect_SessionPilot)
<< " Short name (resource) : "<<control->Name(Standard_True)<<Message_EndLine;
if (argc == 1) return IFSelect_RetVoid;
control = XSControl_Controller::Recorded(arg1);
control = WS->Recorded(arg1);
if (control.IsNull()) {
sout<<" No norm named : "<<arg1<<Message_EndLine;
return IFSelect_RetError;
}
WS->SetController(control);
sout<<"new norm : "<<control->Name()<<Message_EndLine;
return IFSelect_RetDone;

@ -19,7 +19,6 @@
#include <Interface_Check.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_ShareFlags.hxx>
#include <Interface_Static.hxx>
#include <Message_ProgressSentry.hxx>
#include <ShapeExtend_Explorer.hxx>
#include <Standard_Transient.hxx>
@ -78,12 +77,20 @@ Standard_Boolean XSControl_Reader::SetNorm (const Standard_CString norm)
{
if (thesession.IsNull()) SetWS (new XSControl_WorkSession);
Standard_Boolean stat = thesession->SelectNorm (norm);
if (stat) {
if (stat) initTransferReader();
return stat;
}
//=======================================================================
//function : InitTransferReader
//purpose :
//=======================================================================
void XSControl_Reader::initTransferReader()
{
if (thesession.IsNull()) return;
thesession->InitTransferReader(0);
thesession->InitTransferReader(4);
}
return stat;
}
//=======================================================================
@ -101,8 +108,7 @@ void XSControl_Reader::SetWS(const Handle(XSControl_WorkSession)& WS,
if (thesession->NormAdaptor().IsNull()) return;
Handle(Interface_InterfaceModel) model = thesession->Model ();
if (scratch || model.IsNull()) model = thesession->NewModel ();
thesession->InitTransferReader(0);
thesession->InitTransferReader(4);
initTransferReader();
}

@ -253,6 +253,9 @@ protected:
//! Returns a sequence of produced shapes
Standard_EXPORT TopTools_SequenceOfShape& Shapes();
//! Sets a Transfer Reader
Standard_EXPORT void initTransferReader();
Standard_Boolean therootsta;
TColStd_SequenceOfTransient theroots;

@ -404,7 +404,16 @@ TopoDS_Shape XSControl_TransferReader::ShapeResult
TopoDS_Shape sh = xu.BinderShape (mres->Binder());
// Ouh la vilaine verrue
Standard_Real tolang = Interface_Static::RVal("read.encoderegularity.angle");
Standard_Real tolang;
Handle(Interface_Static) aParam = myModel->GetParam("read.encoderegularity.angle");
if (aParam.IsNull())
{
tolang = Interface_Static::RVal("read.encoderegularity.angle");
}
else
{
tolang = aParam->RealValue();
}
if (tolang <= 0 || sh.IsNull()) return sh;
ShapeFix::EncodeRegularity (sh,tolang);
return sh;

@ -86,12 +86,19 @@ Standard_Boolean XSControl_WorkSession::SelectNorm(const Standard_CString normn
{
// Old norm and results
myTransferReader->Clear(-1);
// ???? En toute rigueur, menage a faire dans XWS : virer les items
// ( a la limite, pourquoi pas, refaire XWS en entier)
if (!myController.IsNull())
{
TCollection_AsciiString aN1 =myController->Name(Standard_False);
TCollection_AsciiString aN2 = myController->Name(Standard_True);
Handle(XSControl_Controller) newadapt = XSControl_Controller::Recorded (normname);
if (aN1.IsEqual(normname) || aN2.IsEqual(normname))
return Standard_True;
}
Handle(XSControl_Controller) newadapt = (!myMapCtl.IsBound(normname) ?
XSControl_Controller::Recorded(normname) : myMapCtl.Find(normname));
if (newadapt.IsNull()) return Standard_False;
if (newadapt == myController) return Standard_True;
SetController (newadapt);
return Standard_True;
}
@ -105,6 +112,7 @@ Standard_Boolean XSControl_WorkSession::SelectNorm(const Standard_CString normn
void XSControl_WorkSession::SetController(const Handle(XSControl_Controller)& ctl)
{
myController = ctl;
SetModel(myController->NewModel());
SetLibrary ( myController->WorkLibrary() );
SetProtocol ( myController->Protocol() );
@ -120,6 +128,21 @@ void XSControl_WorkSession::SetController(const Handle(XSControl_Controller)& ct
myTransferReader->SetController (myController);
myTransferWriter->SetController (myController);
if (!myMapCtl.IsBound(ctl->Name(Standard_True)))
{
myMapCtl.Bind(ctl->Name(Standard_True), ctl);
myMapCtl.Bind(ctl->Name(Standard_False), ctl);
}
else
{
Handle(XSControl_Controller) aController = myMapCtl.Find(ctl->Name(Standard_True));
if (!aController->DynamicType()->IsKind(ctl->DynamicType()))
{
myMapCtl.Bind(ctl->Name(Standard_True), ctl);
myMapCtl.Bind(ctl->Name(Standard_False), ctl);
}
}
}

@ -23,7 +23,8 @@
#include <IFSelect_WorkSession.hxx>
#include <IFSelect_ReturnStatus.hxx>
#include <XSControl_TransferWriter.hxx>
class XSControl_Controller;
#include <XSControl_Controller.hxx>
//class XSControl_Controller;
class XSControl_TransferReader;
class XSControl_Vars;
class Message_Messenger;
@ -181,6 +182,13 @@ class XSControl_WorkSession : public IFSelect_WorkSession
//! with original objects (in fact, their mappers)
Standard_EXPORT Interface_CheckIterator TransferWriteCheckList() const;
Standard_EXPORT Handle(XSControl_Controller) Recorded(const Standard_CString theNormName)
{
if(!myMapCtl.IsBound(theNormName))
return 0;
return myMapCtl.Find(theNormName);
}
const Handle(XSControl_Vars) & Vars() const
{ return myVars; }
@ -199,6 +207,7 @@ class XSControl_WorkSession : public IFSelect_WorkSession
Handle(XSControl_TransferWriter) myTransferWriter;
NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)> myContext;
Handle(XSControl_Vars) myVars;
NCollection_DataMap<TCollection_AsciiString, Handle(XSControl_Controller)> myMapCtl;
};
#endif // _XSControl_WorkSession_HeaderFile

@ -692,7 +692,8 @@ void XSDRAWIGES::InitSelect ()
Handle(IGESSelect_Activator) igesact = new IGESSelect_Activator;
IGESControl_Controller::Init();
// XSDRAW::SetNorm ("IGES"); trop tot
XSDRAW::SetController (XSControl_Controller::Recorded("iges"));
Handle(IGESControl_Controller) igesCtl = new IGESControl_Controller;
XSDRAW::SetController (igesCtl);
atexit (cleanpilot);
}

Some files were not shown because too many files have changed in this diff Show More