int OCCTools::writeSTEP(const char *filename, std::vector<OCCBase *> shapes) { try { STEPControl_Writer writer; IFSelect_ReturnStatus status; Interface_Static::SetCVal("xstep.cascade.unit","M"); Interface_Static::SetIVal("read.step.nonmanifold", 1); for (unsigned i = 0; i < shapes.size(); i++) { status = writer.Transfer(shapes[i]->getShape(), STEPControl_AsIs); if (status != IFSelect_RetDone) { StdFail_NotDone::Raise("Failed to write STEP file"); } } status = writer.Write(filename); } catch(Standard_Failure &err) { Handle_Standard_Failure e = Standard_Failure::Caught(); const Standard_CString msg = e->GetMessageString(); //printf("ERROR: %s\n", e->GetMessageString()); if (msg != NULL && strlen(msg) > 1) { setErrorMessage(msg); } else { setErrorMessage("Failed to write STEP file"); } return 0; } return 1; }
SALOME_WNT_EXPORT int ExportSTEP( const TopoDS_Shape& theShape, const TCollection_AsciiString& theFileName, const TCollection_AsciiString& theFormatName) { MESSAGE("Export STEP into file " << theFileName.ToCString()); try { IFSelect_ReturnStatus status ; //VRV: OCC 4.0 migration STEPControl_Writer aWriter; //VSR: 16/09/09: Convert to METERS Interface_Static::SetCVal("xstep.cascade.unit","M"); Interface_Static::SetIVal("write.step.nonmanifold", 1); //JFA: PAL6162 status = aWriter.Transfer( theShape, STEPControl_ManifoldSolidBrep ); status = aWriter.Transfer( theShape, STEPControl_AsIs ); //VRV: OCC 4.0 migration if ( status == IFSelect_RetDone ) status = aWriter.Write( theFileName.ToCString() ) ; // Return previous locale if ( status == IFSelect_RetDone ) return 1; } catch(Standard_Failure) { Standard_Failure::Raise("Could not export in STEP format"); } return 0; }
void GeometryWriter::writeGeomEntityToStepFile(Handle_Geom_Surface surface, std::string fileName) { BRepBuilderAPI_MakeFace faceMaker; faceMaker.Init(surface,true,1E-6); TopoDS_Shape face = faceMaker.Shape(); STEPControl_Writer writer; writer.Transfer(face,STEPControl_AsIs); writer.Write(fileName.c_str()); return; }
void GeometryWriter::writeGeomEntityToStepFile(Handle_Geom_Curve curve, std::string fileName) { BRepBuilderAPI_MakeEdge edgeMaker; edgeMaker.Init(curve); TopoDS_Shape edge = edgeMaker.Shape(); STEPControl_Writer writer; writer.Transfer(edge,STEPControl_AsIs); writer.Write(fileName.c_str()); return; }
/*! \brief Write a topologic shape to a file (STEP format) * \param shape Topologic shape to write * \param fileName Path to the file to write * \param indicator Indicator to notify the writing progress */ void IO::writeStepFile(const TopoDS_Shape& shape, const QString& fileName, Handle_Message_ProgressIndicator indicator) { IFSelect_ReturnStatus status; STEPControl_Writer writer; if (!indicator.IsNull()) writer.WS()->MapReader()->SetProgress(indicator); status = writer.Transfer(shape, STEPControl_AsIs); status = writer.Write(fileName.toAscii().data()); writer.WS()->MapReader()->SetProgress(NULL); }
bool saveInSTEP(TopoDS_Shape &shape, char const *filename) { STEPControl_Writer writer; writer.Transfer(shape, STEPControl_AsIs); IFSelect_ReturnStatus status = writer.Write(filename); if (status != IFSelect_RetDone) { return false; } return true; }
void Werkstuck::STEPExportieren() { STEPControl_Writer *schreiber = new STEPControl_Writer(); Interface_Static::SetCVal("write.step.schema","AP203"); schreiber->Model(true); STEPControl_StepModelType mode = STEPControl_ManifoldSolidBrep; schreiber->Transfer(WS,mode); QString str = QFileDialog::getSaveFileName(); if (str.isEmpty()) return; bool res1 = schreiber->Write(str.toStdString().c_str()); if (res1) showMessage(tr("Экспорт в STEP успешно!")); delete schreiber; }
//---------------------------------------------------------------------------------------- IFSelect_ReturnStatus GeomImportExport::SaveSTEP(const QString& aFileName, const TopoDS_Shape& aHSequenceOfShape, const STEPControl_StepModelType aValue /* =TopoDSToCc1Act_ManifoldSolidBrep */ ) { // CREATE THE WRITER STEPControl_Writer aWriter; IFSelect_ReturnStatus status; status = aWriter.Transfer(aHSequenceOfShape, aValue); if ( status != IFSelect_RetDone ) return status; status = aWriter.Write(aFileName.toAscii().data()); return status; }
bool CShape::ExportSolidsFile(const std::list<HeeksObj*>& objects, const wxChar* filepath, std::map<int, CShapeData> *index_map) { // returns true, if suffix handled wxString wf(filepath); wf.LowerCase(); if(wf.EndsWith(_T(".stp")) || wf.EndsWith(_T(".step"))) { char oldlocale[1000]; strcpy(oldlocale, setlocale(LC_NUMERIC, "C")); Standard_CString aFileName = (Standard_CString) (Ttc(filepath)); STEPControl_Writer writer; // add all the solids int i = 1; for(std::list<HeeksObj*>::const_iterator It = objects.begin(); It != objects.end(); It++) { HeeksObj* object = *It; WriteShapeOrGroup(writer, object, index_map, i); } writer.Write(aFileName); setlocale(LC_NUMERIC, oldlocale); return true; } else if(wf.EndsWith(_T(".igs")) || wf.EndsWith(_T(".iges"))) { char oldlocale[1000]; strcpy(oldlocale, setlocale(LC_NUMERIC, "C")); Standard_CString aFileName = (Standard_CString) (Ttc(filepath)); IGESControl_Controller::Init(); IGESControl_Writer writer; // add all the solids for(std::list<HeeksObj*>::const_iterator It = objects.begin(); It != objects.end(); It++) { HeeksObj* object = *It; if(CShape::IsTypeAShape(object->GetType())){ writer.AddShape(((CShape*)object)->Shape()); } else if(object->GetType() == WireType){ writer.AddShape(((CWire*)object)->Shape()); } } writer.Write(aFileName); setlocale(LC_NUMERIC, oldlocale); return true; } else if(wf.EndsWith(_T(".brep"))) { #ifdef __WXMSW__ ofstream ofs(filepath); #else ofstream ofs(Ttc(filepath)); #endif for(std::list<HeeksObj*>::const_iterator It = objects.begin(); It != objects.end(); It++) { HeeksObj* object = *It; if(CShape::IsTypeAShape(object->GetType())){ BRepTools::Write(((CShape*)object)->Shape(), ofs); } } } return false; }
int EG_saveModel(const egObject *model, const char *name) { int i, len, outLevel; egadsModel *mshape; FILE *fp; if (model == NULL) return EGADS_NULLOBJ; if (model->magicnumber != MAGIC) return EGADS_NOTOBJ; if (model->oclass != MODEL) return EGADS_NOTMODEL; outLevel = EG_outLevel(model); if (name == NULL) { if (outLevel > 0) printf(" EGADS Warning: NULL Filename (EG_saveModel)!\n"); return EGADS_NONAME; } /* does file exist? */ fp = fopen(name, "r"); if (fp != NULL) { if (outLevel > 0) printf(" EGADS Warning: File %s Exists (EG_saveModel)!\n", name); fclose(fp); return EGADS_NOTFOUND; } /* find extension */ len = strlen(name); for (i = len-1; i > 0; i--) if (name[i] == '.') break; if (i == 0) { if (outLevel > 0) printf(" EGADS Warning: No Extension in %s (EG_saveModel)!\n", name); return EGADS_NODATA; } mshape = (egadsModel *) model->blind; if ((strcasecmp(&name[i],".step") == 0) || (strcasecmp(&name[i],".stp") == 0)) { /* STEP files */ STEPControl_Writer aWriter; TopExp_Explorer Exp; const STEPControl_StepModelType aVal = STEPControl_AsIs; for (Exp.Init(mshape->shape, TopAbs_WIRE, TopAbs_FACE); Exp.More(); Exp.Next()) aWriter.Transfer(Exp.Current(), aVal); for (Exp.Init(mshape->shape, TopAbs_FACE, TopAbs_SHELL); Exp.More(); Exp.Next()) aWriter.Transfer(Exp.Current(), aVal); for (Exp.Init(mshape->shape, TopAbs_SHELL, TopAbs_SOLID); Exp.More(); Exp.Next()) aWriter.Transfer(Exp.Current(), aVal); for (Exp.Init(mshape->shape, TopAbs_SOLID); Exp.More(); Exp.Next()) aWriter.Transfer(Exp.Current(), aVal); if (!aWriter.Write(name)) { printf(" EGADS Warning: STEP Write Error (EG_saveModel)!\n"); return EGADS_WRITERR; } } else if ((strcasecmp(&name[i],".iges") == 0) || (strcasecmp(&name[i],".igs") == 0)) { /* IGES files */ try { IGESControl_Controller::Init(); IGESControl_Writer iWrite; TopExp_Explorer Exp; for (Exp.Init(mshape->shape, TopAbs_WIRE, TopAbs_FACE); Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current()); for (Exp.Init(mshape->shape, TopAbs_FACE, TopAbs_SHELL); Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current()); for (Exp.Init(mshape->shape, TopAbs_SHELL, TopAbs_SOLID); Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current()); for (Exp.Init(mshape->shape, TopAbs_SOLID); Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current()); iWrite.ComputeModel(); if (!iWrite.Write(name)) { printf(" EGADS Warning: IGES Write Error (EG_saveModel)!\n"); return EGADS_WRITERR; } } catch (...) { printf(" EGADS Warning: Internal IGES Write Error (EG_saveModel)!\n"); return EGADS_WRITERR; } } else if ((strcasecmp(&name[i],".brep") == 0) || (strcasecmp(&name[i],".egads") == 0)) { /* Native OCC file or our filetype */ if (!BRepTools::Write(mshape->shape, name)) { printf(" EGADS Warning: OCC Write Error (EG_saveModel)!\n"); return EGADS_WRITERR; } if (strcasecmp(&name[i],".brep") == 0) return EGADS_SUCCESS; /* append the attributes -- output in the read order */ FILE *fp = fopen(name, "a"); if (fp == NULL) { printf(" EGADS Warning: EGADS Open Error (EG_saveModel)!\n"); return EGADS_WRITERR; } fprintf(fp, "\n##EGADS HEADER FILE-REV 1 ##\n"); /* write model attributes */ EG_writeAttrs(model, fp); TopExp_Explorer Exp; for (Exp.Init(mshape->shape, TopAbs_WIRE, TopAbs_FACE); Exp.More(); Exp.Next()) { TopoDS_Shape shape = Exp.Current(); for (i = 0; i < mshape->nbody; i++) { egObject *obj = mshape->bodies[i]; egadsBody *pbody = (egadsBody *) obj->blind; if (shape.IsSame(pbody->shape)) { EG_writeAttrs(obj, fp); break; } } } for (Exp.Init(mshape->shape, TopAbs_FACE, TopAbs_SHELL); Exp.More(); Exp.Next()) { TopoDS_Shape shape = Exp.Current(); for (i = 0; i < mshape->nbody; i++) { egObject *obj = mshape->bodies[i]; egadsBody *pbody = (egadsBody *) obj->blind; if (shape.IsSame(pbody->shape)) { EG_writeAttrs(obj, fp); break; } } } for (Exp.Init(mshape->shape, TopAbs_SHELL, TopAbs_SOLID); Exp.More(); Exp.Next()) { TopoDS_Shape shape = Exp.Current(); for (i = 0; i < mshape->nbody; i++) { egObject *obj = mshape->bodies[i]; egadsBody *pbody = (egadsBody *) obj->blind; if (shape.IsSame(pbody->shape)) { EG_writeAttrs(obj, fp); break; } } } for (Exp.Init(mshape->shape, TopAbs_SOLID); Exp.More(); Exp.Next()) { TopoDS_Shape shape = Exp.Current(); for (i = 0; i < mshape->nbody; i++) { egObject *obj = mshape->bodies[i]; egadsBody *pbody = (egadsBody *) obj->blind; if (shape.IsSame(pbody->shape)) { EG_writeAttrs(obj, fp); break; } } } fclose(fp); } else { if (outLevel > 0) printf(" EGADS Warning: Extension in %s Not Supported (EG_saveModel)!\n", name); return EGADS_NODATA; } return EGADS_SUCCESS; }