+++ /dev/null
-// Copyright (C) 2014 OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include <DXFPLUGIN_exports.h>
-#include <DXFPLUGIN_version.h>
-
-#include <Basics_Utils.hxx>
-
-#include <DxfControl_Reader.hxx>
-#include <DxfSection_Block.hxx>
-#include <DxfSection_HSequenceOfObject.hxx>
-#include <DxfSection_Model.hxx>
-#include <DxfSection_Section.hxx>
-#include <IFSelect_ReturnStatus.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_HAsciiString.hxx>
-#include <TDF_Label.hxx>
-#include <TDataStd_Name.hxx>
-#include <TNaming_Builder.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TransferBRep.hxx>
-#include <Transfer_Binder.hxx>
-#include <Transfer_TransientProcess.hxx>
-#include <XSControl_TransferReader.hxx>
-#include <XSControl_WorkSession.hxx>
-
-#ifdef DXF_HASLICENSE
-#include <DXFPLUGIN_license.h>
-
-#include <Standard_LicenseError.hxx>
-#include <OCCLicense_Activate.hxx>
-#endif // DXF_HASLICENSE
-
-extern "C"
-{
- /*!
- \brief Get version of the plugin.
- \return the version of the plugin
- */
- DXFPLUGIN_EXPORT
- int GetVersion()
- {
- return DXFPLUGIN_VERSION;
- }
-
- /*!
- \brief Get version of the plugin.
- \return the string representation of the plugin's version
- */
- DXFPLUGIN_EXPORT
- char* GetVersionStr()
- {
- return (char*)DXFPLUGIN_VERSION_STR;
- }
-
- /*!
- \brief Import shape from the DXF format.
- \param theFileName file path
- \param theFormatName file format signature
- \param theError error description, if there's any, is returned via this parameter
- \param theShapeLabel a label in the CAF tree where shape attributes are set to
- \return imported shape
- */
- DXFPLUGIN_EXPORT
- TopoDS_Shape Import(const TCollection_AsciiString& theFileName,
- const TCollection_AsciiString& /*theFormatName*/,
- TCollection_AsciiString& theError,
- const TDF_Label& theShapeLabel)
- {
- TopoDS_Shape aResShape;
-
-#ifdef DXF_HASLICENSE
- try {
- OCCLicense_Activate( "DXF-R-"OCC_VERSION_STRING, DXF_READ_LICENSE);
- }
- catch (Standard_LicenseError) {
- return aResShape;
- }
-#endif
-
- // Set "C" numeric locale to save numbers correctly
- Kernel_Utils::Localizer loc;
-
- DxfControl_Reader aReader;
-
- try {
- IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString());
- if (status == IFSelect_RetDone) {
- aReader.TransferRoots();
- aResShape = aReader.OneShape();
-
- // ATTENTION: this is a workaround for mantis issue 0020442 remark 0010776
- // It should be removed after patching OCCT for bug OCC22436
- // (fix for OCCT is expected in service pack next to OCCT6.3sp12)
- if (aResShape.ShapeType() == TopAbs_COMPOUND) {
- int nbSub1 = 0;
- TopoDS_Shape currShape;
- TopoDS_Iterator It (aResShape, Standard_True, Standard_True);
- for (; It.More(); It.Next()) {
- nbSub1++;
- currShape = It.Value();
- }
- if (nbSub1 == 1)
- aResShape = currShape;
- }
- Handle(DxfSection_Model) aModel = Handle(DxfSection_Model)::DownCast( aReader.WS()->Model() );
- Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader();
- if (!TR.IsNull()) {
- Handle(Transfer_TransientProcess) TP = TR->TransientProcess();
-
- Handle(DxfSection_Section) aBlocks = aModel->FindSection("BLOCKS");
- if (aBlocks.IsNull()) return aResShape;
-
- Handle(DxfSection_HSequenceOfObject) anObjects = aBlocks->GetObjects();
- if (anObjects.IsNull()) return aResShape;
-
- for (Standard_Integer i = 1; i <= anObjects->Length(); i++) {
- Handle(DxfSection_Block) aBlock = Handle(DxfSection_Block)::DownCast(anObjects->Value(i));
- if (aBlock.IsNull()) continue;
- Handle(TCollection_HAsciiString) aName = aBlock->GetBlockName1();
- if (aName.IsNull()) continue;
-
- Handle(Transfer_Binder) binder = TP->Find ( aBlock );
- if (binder.IsNull()) continue;
- TopoDS_Shape aResShape = TransferBRep::ShapeResult (binder);
- if (aResShape.IsNull()) continue;
-
- // create label and set shape
- TDF_Label L;
- TDF_TagSource aTag;
- L = aTag.NewChild(theShapeLabel);
- TNaming_Builder tnBuild(L);
- tnBuild.Generated(aResShape);
-
- // set a name
- TCollection_ExtendedString str(aName->ToCString());
- TDataStd_Name::Set(L,str);
- }
- }
- }
- else {
- theError = "Wrong format of the imported file. Can't import file.";
- aResShape.Nullify();
- }
- }
- catch (Standard_Failure) {
- Handle(Standard_Failure) aFail = Standard_Failure::Caught();
- theError = aFail->GetMessageString();
- aResShape.Nullify();
- }
- return aResShape;
- }
-} // end of extern "C"
-