// 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include IMPLEMENT_STANDARD_RTTIEXT(StepSelect_WorkLibrary,IFSelect_WorkLibrary) StepSelect_WorkLibrary::StepSelect_WorkLibrary (const Standard_Boolean copymode) : thecopymode (copymode) , thelabmode (0) { SetDumpLevels (1,2); SetDumpHelp (0,"#id + Step Type"); SetDumpHelp (1,"Entity as in file"); SetDumpHelp (2,"Entity + shareds (level 1) as in file"); } // rq : les init sont faits par ailleurs, pas de souci a se faire void StepSelect_WorkLibrary::SetDumpLabel (const Standard_Integer mode) { thelabmode = mode; } Standard_Integer StepSelect_WorkLibrary::ReadFile (const Standard_CString name, Handle(Interface_InterfaceModel)& model, const Handle(Interface_Protocol)& protocol) const { long status = 1; DeclareAndCast(StepData_Protocol,stepro,protocol); if (stepro.IsNull()) return 1; Handle(StepData_StepModel) stepmodel = new StepData_StepModel; model = stepmodel; StepFile_ReadTrace (0); char *pName=(char *)name; status = StepFile_Read (pName,stepmodel,stepro); return status; } Standard_Boolean StepSelect_WorkLibrary::WriteFile (IFSelect_ContextWrite& ctx) const { // Preparation Message_Messenger::StreamBuffer sout = Message::SendInfo(); DeclareAndCast(StepData_StepModel,stepmodel,ctx.Model()); DeclareAndCast(StepData_Protocol,stepro,ctx.Protocol()); if (stepmodel.IsNull() || stepro.IsNull()) return Standard_False; std::ofstream fout; OSD_OpenStream(fout,ctx.FileName(),std::ios::out|std::ios::trunc); if (!fout || !fout.is_open()) { ctx.CCheck(0)->AddFail("Step File could not be created"); sout<<" Step File could not be created : " << ctx.FileName() << std::endl; return 0; } sout << " Step File Name : "<NbEntities()<<" ents) "; // File Modifiers Standard_Integer nbmod = ctx.NbModifiers(); for (Standard_Integer numod = 1; numod <= nbmod; numod ++) { ctx.SetModifier (numod); DeclareAndCast(StepSelect_FileModifier,filemod,ctx.FileModifier()); if (!filemod.IsNull()) filemod->Perform(ctx,SW); // (impressions de mise au point) sout << " .. FileMod." << numod << filemod->Label(); if (ctx.IsForAll()) sout << " (all model)"; else sout << " (" << ctx.NbEntities() << " entities)"; // sout << std::flush; } // Envoi SW.SendModel(stepro); Interface_CheckIterator chl = SW.CheckList(); for (chl.Start(); chl.More(); chl.Next()) ctx.CCheck(chl.Number())->GetMessages(chl.Value()); sout<<" Write "; Standard_Boolean isGood = SW.Print(fout); sout<<" Done"<Number(entity); if (nument <= 0 || nument > model->NbEntities()) return; Standard_Boolean iserr = model->IsRedefinedContent(nument); Handle(Standard_Transient) ent, con; ent = entity; S <<" --- (STEP) Entity "; model->Print(entity, S); if (iserr) con = model->ReportEntity(nument)->Content(); if (entity.IsNull()) { S <<" Null"<DynamicType()->Name() << std::endl; if (iserr) S <<" *** NOT WELL LOADED : CONTENT FROM FILE ***"<IsUnknownEntity(nument)) S <<" *** UNKNOWN TYPE ***"<