From: mpa Date: Thu, 4 Sep 2014 08:22:47 +0000 (+0400) Subject: Implementation of DXFPLUGIN as a GEOM plugin (added files) X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=32fd5b06acf0df687e64c582d1b81adc291d9fd5;p=plugins%2Fdxfplugin.git Implementation of DXFPLUGIN as a GEOM plugin (added files) --- diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100755 index 0000000..7eb84fe --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +ADD_SUBDIRECTORY(salome) diff --git a/doc/salome/CMakeLists.txt b/doc/salome/CMakeLists.txt new file mode 100755 index 0000000..957d7ef --- /dev/null +++ b/doc/salome/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +ADD_SUBDIRECTORY(examples) +ADD_SUBDIRECTORY(gui) \ No newline at end of file diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt new file mode 100644 index 0000000..9dad95b --- /dev/null +++ b/doc/salome/examples/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.py") +INSTALL(FILES ${files} DESTINATION ${SALOME_INSTALL_DOC}/examples/DXFPLUGIN) diff --git a/doc/salome/examples/DXFPlugindemo.py b/doc/salome/examples/DXFPlugindemo.py new file mode 100644 index 0000000..313fb3b --- /dev/null +++ b/doc/salome/examples/DXFPlugindemo.py @@ -0,0 +1,34 @@ +# Import/Export DXF + +import salome +salome.salome_init() +import GEOM,os +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) + +# Example of import/export file in DXF format + +print "Test Export/Import DXF ..." + +tmpDir = os.getenv("TEMP") +if tmpDir == None: + tmpDir = "/tmp" + +# File for Export/Import testing +fileExportImport = tmpDir + "/testExportImportDXF.dxf" + +# create shape +box = geompy.MakeBoxDXDYDZ(100,100,100) + +# export shape +geompy.ExportDXF(box,fileExportImport) + +# import shape +Shape1 = geompy.ImportDXF(fileExportImport) +geompy.addToStudy(Shape1, "ImportDXF_1") + +# It is possible also to use next format of importing and publishing in study + +Shape2 = geompy.ImportDXF(fileExportImport,"ImportDXF_2") + +print "OK" \ No newline at end of file diff --git a/doc/salome/gui/CMakeLists.txt b/doc/salome/gui/CMakeLists.txt new file mode 100755 index 0000000..efac789 --- /dev/null +++ b/doc/salome/gui/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +ADD_SUBDIRECTORY(DXFPLUGIN) diff --git a/doc/salome/gui/DXFPLUGIN/CMakeLists.txt b/doc/salome/gui/DXFPLUGIN/CMakeLists.txt new file mode 100755 index 0000000..598bde7 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +SALOME_CONFIGURE_FILE(doxyfile.in doxyfile) +SALOME_CONFIGURE_FILE(doxyfile_py.in doxyfile_py) +SALOME_CONFIGURE_FILE(static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html) +SALOME_CONFIGURE_FILE(static/header_py.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header_py.html) + +SET(kernel_file "$ENV{KERNEL_ROOT_DIR}/bin/salome/prepare_generating_doc.py") +IF(WIN32) + STRING(REPLACE "/" "\\" kernel_file ${kernel_file}) +ENDIF(WIN32) + +ADD_CUSTOM_TARGET(usr_docs ${CMAKE_COMMAND} -E make_directory tmp + COMMAND ${PYTHON_EXECUTABLE} ${kernel_file} -o tmp/DXFPluginBuilder.py ${CMAKE_SOURCE_DIR}/src/DXFPluginBuilder.py + COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py + COMMAND ${DOXYGEN_EXECUTABLE} doxyfile + COMMAND ${CMAKE_COMMAND} -E remove_directory tmp + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target usr_docs)") +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/DXFPLUGIN DESTINATION ${SALOME_INSTALL_DOC}/gui) +INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/DXFPLUGIN) +INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/DXFPLUGIN/dxfpluginpy_doc) + +SET(make_clean_files DXFPLUGIN dxfpluginpy_doc.tag) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}") diff --git a/doc/salome/gui/DXFPLUGIN/doxyfile.in b/doc/salome/gui/DXFPLUGIN/doxyfile.in new file mode 100755 index 0000000..7f54ec4 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/doxyfile.in @@ -0,0 +1,114 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "SALOME DXFPLUGIN User's Guide" +OUTPUT_DIRECTORY = DXFPLUGIN +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @CMAKE_CURRENT_SOURCE_DIR@/input +FILE_PATTERNS = *.doc +EXCLUDE = +IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/images +EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/doc/salome/examples + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_HEADER = @CMAKE_CURRENT_BINARY_DIR@/static/header.html +HTML_FOOTER = @CMAKE_CURRENT_SOURCE_DIR@/static/footer.html +HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/static/salome_extra.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool... +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = NO +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = jpg +DOT_FONTNAME = Arial +DOT_PATH =. +DOTFILE_DIRS =. +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1200 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO + + +GENERATE_LEGEND = NO +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +#SORT related options +#--------------------------------------------------------------------------- +SORT_GROUP_NAMES = NO + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +EXTRA_PACKAGES = amsmath + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- + +TAGFILES = dxfpluginpy_doc.tag=../DXFPLUGIN/dxfpluginpy_doc +SEARCHENGINE = YES + +#--------------------------------------------------------------------------- +#Custom commands +#--------------------------------------------------------------------------- +ALIASES += tui_script{1}="\include \1 Download this script" diff --git a/doc/salome/gui/DXFPLUGIN/doxyfile_py.in b/doc/salome/gui/DXFPLUGIN/doxyfile_py.in new file mode 100755 index 0000000..bb77f41 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/doxyfile_py.in @@ -0,0 +1,160 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "SALOME DXFPLUGIN User's Guide" +OUTPUT_DIRECTORY = DXFPLUGIN +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = YES +FULL_PATH_NAMES = NO +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 5 +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +MAX_INITIALIZER_LINES = 25 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +EXCLUDE_SYMLINKS = NO +EXAMPLE_RECURSIVE = NO + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = tmp @CMAKE_SOURCE_DIR@/idl/DXFPlugin_Gen.idl +FILE_PATTERNS = +IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/images +RECURSIVE = NO +EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/src/ + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = dxfpluginpy_doc +HTML_HEADER = @CMAKE_CURRENT_BINARY_DIR@/static/header_py.html +HTML_FOOTER = @CMAKE_CURRENT_SOURCE_DIR@/static/footer.html +HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/static/salome_extra.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_FONTNAME = Arial +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = NO +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- +GENERATE_TAGFILE = dxfpluginpy_doc.tag +SEARCHENGINE = YES diff --git a/doc/salome/gui/DXFPLUGIN/images/export_dxf.png b/doc/salome/gui/DXFPLUGIN/images/export_dxf.png new file mode 100644 index 0000000..d8d7fd1 Binary files /dev/null and b/doc/salome/gui/DXFPLUGIN/images/export_dxf.png differ diff --git a/doc/salome/gui/DXFPLUGIN/images/head.png b/doc/salome/gui/DXFPLUGIN/images/head.png new file mode 100755 index 0000000..307d9ef Binary files /dev/null and b/doc/salome/gui/DXFPLUGIN/images/head.png differ diff --git a/doc/salome/gui/DXFPLUGIN/images/import_dxf.png b/doc/salome/gui/DXFPLUGIN/images/import_dxf.png new file mode 100644 index 0000000..ef39d63 Binary files /dev/null and b/doc/salome/gui/DXFPLUGIN/images/import_dxf.png differ diff --git a/doc/salome/gui/DXFPLUGIN/images/reopen_dxf.png b/doc/salome/gui/DXFPLUGIN/images/reopen_dxf.png new file mode 100644 index 0000000..9d6745d Binary files /dev/null and b/doc/salome/gui/DXFPLUGIN/images/reopen_dxf.png differ diff --git a/doc/salome/gui/DXFPLUGIN/input/dxfplugin_importexport_page.doc b/doc/salome/gui/DXFPLUGIN/input/dxfplugin_importexport_page.doc new file mode 100644 index 0000000..30ae626 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/input/dxfplugin_importexport_page.doc @@ -0,0 +1,30 @@ +/*! + +\page dxfplugin_importexport_page Import/Export DXF + +For using DXFPLUGIN functionalities in SALOME: + +- Run SALOME and activate Geometry module. + +- Import the DXF file from menu File/Import/DXF. + + \image html import_dxf.png + + Browse and select the file and click "Open" button. New object (shape) + will appears in the SALOME object browser. + + \note It is possible to re-open from the initial file a previously imported shape if + the file has been changed on disk. For this, select Reload From Disk + in the context menu of the imported shape. The reloaded shape will have the same + representation parameters as before this operation. + + \image html reopen_dxf.png + +- Export to the DXF file selecting a shape in the SALOME object browser and + calling menu File/Export/DXF. + + \image html export_dxf.png + + Enter the file name and click "Save" button. + +*/ diff --git a/doc/salome/gui/DXFPLUGIN/input/dxfplugin_python_interface_page.doc b/doc/salome/gui/DXFPLUGIN/input/dxfplugin_python_interface_page.doc new file mode 100644 index 0000000..e2725fa --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/input/dxfplugin_python_interface_page.doc @@ -0,0 +1,19 @@ +/*! + +\page dxfplugin_python_interface_page Python Interface + +Python package DXFPluginBuilder defines several classes, destined for +import and export CAD models in DXF format (*.dxf files). + +DXFPLUGIN dynamically adds several methods to the geomBuilder. + +Below you can see an example of usage of the DXFPluginBuilder package for +import and export CAD models: + +\anchor example_DXFPlugin +

Example of import/export CAD model stored in DXF format (*.dxf files) with DXFPLUGIN:

+\tui_script{DXFPlugindemo.py} + +*/ + + diff --git a/doc/salome/gui/DXFPLUGIN/input/index.doc b/doc/salome/gui/DXFPLUGIN/input/index.doc new file mode 100644 index 0000000..78568cf --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/input/index.doc @@ -0,0 +1,17 @@ +/*! + +\mainpage Introduction to DXFPLUGIN + +\b DXF interface to be used as plugin for SALOME Geometry +module. +It is destined for: +- Importing CAD models stored in DXF format (*.dxf files) into +SALOME study; +- Exporting CAD models from SALOME to the *.dxf files. + +To manage parameters of the DXFPLUGIN use \subpage dxfplugin_importexport_page. + +Also all DXFPLUGIN functionalities are accessible via +\subpage dxfplugin_python_interface_page "DXFPLUGIN Python interface". + +*/ diff --git a/doc/salome/gui/DXFPLUGIN/static/footer.html b/doc/salome/gui/DXFPLUGIN/static/footer.html new file mode 100755 index 0000000..e21ab0c --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/static/footer.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/doc/salome/gui/DXFPLUGIN/static/header.html.in b/doc/salome/gui/DXFPLUGIN/static/header.html.in new file mode 100755 index 0000000..6b8c8ff --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/static/header.html.in @@ -0,0 +1,23 @@ + + + + + + + +$projectname: $title +$title + + + +$treeview +$search +$mathjax + +$extrastylesheet + + +
+ +
Version: @SALOMEDXFPLUGIN_VERSION@
+ diff --git a/doc/salome/gui/DXFPLUGIN/static/header_py.html.in b/doc/salome/gui/DXFPLUGIN/static/header_py.html.in new file mode 100644 index 0000000..0c37666 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/static/header_py.html.in @@ -0,0 +1,24 @@ + + + + + + + +$projectname: $title +$title + + + +$treeview +$search +$mathjax + +$extrastylesheet + + +
+ +
Version: @SALOMEDXFPLUGIN_VERSION@
+
Home
+ diff --git a/doc/salome/gui/DXFPLUGIN/static/salome_extra.css b/doc/salome/gui/DXFPLUGIN/static/salome_extra.css new file mode 100644 index 0000000..3e8b838 --- /dev/null +++ b/doc/salome/gui/DXFPLUGIN/static/salome_extra.css @@ -0,0 +1,29 @@ +/* The extra CSS for doxygen 1.8.3.1 */ + +#titlearea { + background-image:url('head.png'); + background-color: #175783; + border: 1px solid; + height: 80px; + background-repeat: no-repeat; + padding: 0px; + margin: 0px; + width: 99.9%; + border-bottom: 1px solid #5373B4; +} + +div.version { + border:1px solid #0000FF; + color: #CCCCCC; + font-family: Arial, Helvetica, sans-serif; + font-size: 9pt; + text-align: center; + width:100px; + -moz-border-radius: 8px; + margin: 5px; +} + +.navpath li.footer { + line-height:15px; + text-align: right; +} \ No newline at end of file diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt new file mode 100755 index 0000000..8b33338 --- /dev/null +++ b/idl/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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(UseOmniORB) + +INCLUDE_DIRECTORIES( + ${KERNEL_INCLUDE_DIRS} + ${GEOM_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) + +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + +SET(SalomeIDLDXFPlugin_IDLSOURCES + DXFPlugin_Gen.idl +) + +SET(IDL_INCLUDE_DIRS + ${KERNEL_ROOT_DIR}/idl/salome + ${GEOM_ROOT_DIR}/idl/salome + ${CMAKE_CURRENT_SOURCE_DIR} +) +SET(IDL_LINK_FLAGS + ${KERNEL_SalomeIDLKernel} + ${GEOM_SalomeIDLGEOM} +) + +OMNIORB_ADD_MODULE(SalomeIDLDXFPlugin "${SalomeIDLDXFPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLDXFPlugin ${GEOM_SalomeIDLGEOM}) +INSTALL(TARGETS SalomeIDLDXFPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) diff --git a/idl/DXFPlugin_Gen.idl b/idl/DXFPlugin_Gen.idl new file mode 100644 index 0000000..bec926e --- /dev/null +++ b/idl/DXFPlugin_Gen.idl @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef __DXFPlugin_GEN__ +#define __DXFPlugin_GEN__ + +#include "GEOM_Gen.idl" + +module DXFPlugin { + + /*! + * \brief Interface for DXFPlugin modeling functions. + */ + interface GEOM_IDXFPluginOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in DXF format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + */ + void ExportDXF( in GEOM::GEOM_Object theObject, + in string theFileName ); + + /*! + * \brief Import a shape from the DXF file. + * + * \param theFileName The file, containing the shape. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportDXF( in string theFileName ); + }; +}; + +#endif diff --git a/resources/DXFPlugin.xml b/resources/DXFPlugin.xml new file mode 100644 index 0000000..258e9fe --- /dev/null +++ b/resources/DXFPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml new file mode 100644 index 0000000..466c936 --- /dev/null +++ b/resources/SalomeApp.xml @@ -0,0 +1,32 @@ + + +
+ +
+
+ + +
+
+ +
+
diff --git a/src/DXFPluginBuilder.py b/src/DXFPluginBuilder.py new file mode 100644 index 0000000..72b5c73 --- /dev/null +++ b/src/DXFPluginBuilder.py @@ -0,0 +1,89 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +from DXFPlugin import GEOM_IDXFPluginOperations + +# Engine Library Name +__libraryName__ = "DXFPluginEngine" + +def GetDXFPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(GEOM_IDXFPluginOperations) + +## Export the given shape into a file with given name in DXF format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +def ExportDXF(self, theObject, theFileName): + """ + Export the given shape into a file with given name in DXF format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + """ + anOp = GetDXFPluginOperations(self) + anOp.ExportDXF(theObject, theFileName) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + + +## Import a shape from the DXF file +# @param theFileName The file, containing the shape. +# @param theName Object name; when specified, this parameter is used +# for result publication in the study. Otherwise, if automatic +# publication is switched on, default value is used for result name. +# +# @return New GEOM.GEOM_Object, containing the imported shape. +# If material names are imported it returns the list of +# objects. The first one is the imported object followed by +# material groups. +# @note Auto publishing is allowed for the shape itself. Imported +# material groups are not automatically published. +def ImportDXF(self, theFileName, theName=None): + """ + Import a shape from the DXF file + + Parameters: + theFileName The file, containing the shape. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the imported shape. + If material names are imported it returns the list of + objects. The first one is the imported object followed by + material groups. + Note: + Auto publishing is allowed for the shape itself. Imported + material groups are not automatically published. + """ + from salome.geom.geomBuilder import RaiseIfFailed + anOp = GetDXFPluginOperations(self) + aListObj = anOp.ImportDXF(theFileName) + RaiseIfFailed("ImportDXF", anOp) + aNbObj = len(aListObj) + if aNbObj > 0: + self._autoPublish(aListObj[0], theName, "imported") + if aNbObj == 1: + return aListObj[0] + return aListObj diff --git a/src/DXFPluginEngine.cxx b/src/DXFPluginEngine.cxx new file mode 100644 index 0000000..1c380c2 --- /dev/null +++ b/src/DXFPluginEngine.cxx @@ -0,0 +1,32 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_Engine.hxx" +#include "DXFPlugin_OperationsCreator.hh" + +extern "C" +{ +DXFPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + DXFPlugin_OperationsCreator* aCreator = new DXFPlugin_OperationsCreator(); + return aCreator; + } +} diff --git a/src/DXFPluginGUI.cxx b/src/DXFPluginGUI.cxx new file mode 100644 index 0000000..21e41f8 --- /dev/null +++ b/src/DXFPluginGUI.cxx @@ -0,0 +1,127 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPluginGUI.h" +#include "DXFPlugin_ExportDlg.h" +#include "DXFPlugin_ImportDlg.h" + +// GUI includes +#include +#include +#include +#include +#include + +// GEOM includes +#include + +//======================================================================= +// function : DXFPluginGUI() +// purpose : Constructor +//======================================================================= +DXFPluginGUI::DXFPluginGUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~DXFPluginGUI +// purpose : Destructor +//======================================================================= +DXFPluginGUI::~DXFPluginGUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool DXFPluginGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + switch ( theCommandID ) { + case 1: + return OnGUIEvent("Export_DXF", parent); + case 2: + return OnGUIEvent("Import_DXF", parent); + default: + return OnGUIEvent("", parent); + } + return false; +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool DXFPluginGUI::OnGUIEvent( const QString& theCommandID, SUIT_Desktop* parent ) +{ + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if (!app) return false; + + getGeometryGUI()->EmitSignalDeactivateDialog(); + + SUIT_FileDlg* dialog = NULL; + if( theCommandID == "Export_DXF" ) { + // Get selected objects + LightApp_SelectionMgr* sm = app->selectionMgr(); + if( !sm ) return false; + SALOME_ListIO selectedObjects; + sm->selectedObjects( selectedObjects ); + if( selectedObjects.Extent() == 0 ) { + SUIT_MessageBox::warning( app->desktop(), + QObject::tr("WRN_WARNING"), + QObject::tr("GEOM_WRN_NO_APPROPRIATE_SELECTION") ); + } + else { + SALOME_ListIteratorOfListIO It( selectedObjects ); + for( ; It.More(); It.Next() ) { + Handle(SALOME_InteractiveObject) IObject = It.Value(); + dialog = new DXFPlugin_ExportDlg( IObject, parent ); + if( dialog->exec() == QDialog::Accepted ) + delete dialog; + } + } + } + else if (theCommandID == "Import_DXF") { + dialog = new DXFPlugin_ImportDlg( parent ); + if (dialog != NULL) + dialog->show(); + if( dialog->exec() == QDialog::Accepted ) + delete dialog; + } + else { + app->putInfo( tr("GEOM_PRP_COMMAND").arg( theCommandID ) ); + } + + return true; +} + +//===================================================================================== +// EXPORTED METHODS +//===================================================================================== +extern "C" +{ +#ifdef WIN32 + __declspec( dllexport ) +#endif + GEOMGUI* GetLibGUI( GeometryGUI* parent ) + { + return new DXFPluginGUI( parent ); + } +} diff --git a/src/DXFPluginGUI.h b/src/DXFPluginGUI.h new file mode 100644 index 0000000..1e4419b --- /dev/null +++ b/src/DXFPluginGUI.h @@ -0,0 +1,35 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef DXFPluginGUI_H +#define DXFPluginGUI_H + +#include + +class DXFPluginGUI: public GEOMPluginGUI +{ +public: + DXFPluginGUI( GeometryGUI* parent ); + ~DXFPluginGUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); +}; + +#endif // DXFPluginGUI_H diff --git a/src/DXFPlugin_Engine.hxx b/src/DXFPlugin_Engine.hxx old mode 100644 new mode 100755 index 87680c1..0274c57 --- a/src/DXFPlugin_Engine.hxx +++ b/src/DXFPlugin_Engine.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2014 OPEN CASCADE +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -17,17 +17,17 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#if !defined (__DXFPLUGIN_EXPORTS_H) -#define __DXFPLUGIN_EXPORTS_H +#ifndef _DXFPLUGIN_ENGINE_HXX_ +#define _DXFPLUGIN_ENGINE_HXX_ #ifdef WIN32 -# if defined DXFExport_EXPORTS || defined DXFXPORTS_EXPORTS || defined DXFImport_EXPORTS || defined DXFIMPORT_EXPORTS -# define DXFPLUGIN_EXPORT __declspec(dllexport) -# else -# define DXFPLUGIN_EXPORT __declspec(dllimport) -# endif -#else // WIN32 -# define DXFPLUGIN_EXPORT -#endif // WIN32 + #if defined DXFPLUGINENGINE_EXPORTS || defined DXFPLUGINENGINE_EXPORTS + #define DXFPLUGINENGINE_EXPORT __declspec( dllexport ) + #else + #define DXFPLUGINENGINE_EXPORT __declspec( dllimport ) + #endif +#else + #define DXFPLUGINENGINE_EXPORT +#endif -#endif // __DXFPLUGIN_EXPORTS_H +#endif diff --git a/src/DXFPlugin_ExportDlg.cxx b/src/DXFPlugin_ExportDlg.cxx new file mode 100644 index 0000000..e999d79 --- /dev/null +++ b/src/DXFPlugin_ExportDlg.cxx @@ -0,0 +1,132 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_ExportDlg.h" +#include "DXFPlugin_Operations_i.hh" + +// GUI includes +#include +#include +#include +#include +#include + +#include + +// GEOM includes +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +DXFPlugin_ExportDlg::DXFPlugin_ExportDlg( Handle(SALOME_InteractiveObject)& object, QWidget* parent ) +: SUIT_FileDlg( parent, false, true, true ), + GEOMBase_Helper( dynamic_cast( parent ) ) +{ + setWindowTitle( tr( "DXFPLUGIN_EXPORT_TITLE" ) ); + setNameFilter( tr( "DXFPLUGIN_DXF_FILES" ) ); + + myObject = object; + const char* objectName = myObject->getName(); + selectFile( QString( objectName ) ); +} + +//================================================================================= +// Destructor +//================================================================================= +DXFPlugin_ExportDlg::~DXFPlugin_ExportDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr DXFPlugin_ExportDlg::createOperation() +{ + return getGeomEngine()->GetPluginOperations( getStudyId(), "DXFPluginEngine" ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool DXFPlugin_ExportDlg::isValid( QString& msg ) +{ + bool ok = true; + //@@ add custom validation actions here @@// + return ok; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool DXFPlugin_ExportDlg::execute( ObjectList& objects ) +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if (!app) return false; + + DXFPlugin::GEOM_IDXFPluginOperations_var aDXFOp = DXFPlugin::GEOM_IDXFPluginOperations::_narrow( getOperation() ); + if ( aDXFOp->_is_nil() ) return false; + + GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( myObject ); + if ( anObj->_is_nil() ) return false; + + QString aFile = selectedFile(); + + // User has pressed "Cancel" --> stop the operation + if ( aFile.isEmpty() ) + return false; + + GEOM_Operation* anOp = new GEOM_Operation( app, aDXFOp.in() ); + try { + SUIT_OverrideCursor wc; + app->putInfo( tr("GEOM_PRP_EXPORT").arg(SUIT_Tools::file( aFile, /*withExten=*/true )) ); + anOp->start(); + aDXFOp->ExportDXF( anObj, aFile.toUtf8().constData() ); + if( aDXFOp->IsDone() ) + anOp->commit(); + else { + anOp->abort(); + wc.suspend(); + SUIT_MessageBox::critical( app->desktop(), + QObject::tr("GEOM_ERROR"), + QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr( aDXFOp->GetErrorCode() ) ); + return false; + } + } + catch( const SALOME::SALOME_Exception& S_ex ) { + anOp->abort(); + return false; + } + + objects.push_back( anObj._retn() ); + return true; +} + +void DXFPlugin_ExportDlg::accept() +{ + SUIT_FileDlg::accept(); + onAccept(false); +} diff --git a/src/DXFPlugin_ExportDlg.h b/src/DXFPlugin_ExportDlg.h new file mode 100644 index 0000000..426d9a8 --- /dev/null +++ b/src/DXFPlugin_ExportDlg.h @@ -0,0 +1,52 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef DXFPlugin_ExportDlg_H +#define DXFPlugin_ExportDlg_H + +// GUI includes +#include + +// GEOM includes +#include +#include + + +class DXFPlugin_ExportDlg: public SUIT_FileDlg, public GEOMBase_Helper +{ + Q_OBJECT + +public: + DXFPlugin_ExportDlg( Handle(SALOME_InteractiveObject)&, QWidget* = 0 ); + ~DXFPlugin_ExportDlg(); + +protected: + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid( QString& ); + virtual bool execute( ObjectList& ); + +protected slots: + void accept(); + +private: + Handle(SALOME_InteractiveObject) myObject; +}; + +#endif // DXFPlugin_ExportDlg_H diff --git a/src/DXFPlugin_ExportDriver.cxx b/src/DXFPlugin_ExportDriver.cxx index 4727f53..e0275e7 100644 --- a/src/DXFPlugin_ExportDriver.cxx +++ b/src/DXFPlugin_ExportDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2014 OPEN CASCADE +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -17,82 +17,117 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include +// internal includes +#include "DXFPlugin_ExportDriver.hxx" +#include "DXFPlugin_IExport.hxx" +#include "DXFPlugin_Engine.hxx" +// KERNEL includes #include +#include -#include +// GEOM includes +#include + +// OOCT includes #include +#include #include #include #ifdef DXF_HASLICENSE -#include +#include "DXFPlugin_license.h" -#include #include +#include #endif // DXF_HASLICENSE -extern "C" +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& DXFPlugin_ExportDriver::GetID() { - /*! - \brief Get version of the plugin. - \return the version of the plugin - */ - DXFPLUGIN_EXPORT - int GetVersion() - { - return DXFPLUGIN_VERSION; - } + static Standard_GUID aGUID("5bad3191-8af9-4b90-9e95-31f5fdb65304"); + return aGUID; +} - /*! - \brief Get version of the plugin. - \return the string representation of the plugin's version - */ - DXFPLUGIN_EXPORT - char* GetVersionStr() - { - return (char*)DXFPLUGIN_VERSION_STR; - } +//======================================================================= +//function : DXFPlugin_ExportDriver +//purpose : +//======================================================================= +DXFPlugin_ExportDriver::DXFPlugin_ExportDriver() +{ +} - /*! - \brief Export shape to the DXF format. - \param theShape shape being exported - \param theFileName file path - \param theFormatName file format signature - \return error status (0 in case of success) - */ - DXFPLUGIN_EXPORT - int Export(const TopoDS_Shape& theShape, - const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName) - { +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer DXFPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const +{ #ifdef DXF_HASLICENSE - try { - OCCLicense_Activate("DXF-W-"OCC_VERSION_STRING, DXF_WRITE_LICENSE); - } - catch (Standard_LicenseError) { - return 1; - } + try { + OCCLicense_Activate("DXF-W-"OCC_VERSION_STRING, DXF_WRITE_LICENSE); + } + catch (Standard_LicenseError) { + return 1; + } #endif // DXF_HASLICENSE - - // Set "C" numeric locale to save numbers correctly - Kernel_Utils::Localizer loc; - - DxfControl_Writer aWriter; - - try { - IFSelect_ReturnStatus status ; - status = aWriter.TransferShape(theShape); - if ( status == IFSelect_RetDone ) - status = aWriter.WriteFile( theFileName.ToCString() ) ; - if ( status == IFSelect_RetDone ) + + if (Label().IsNull()) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + DXFPlugin_IExport aData (aFunction); + + // retrieve the being exported shape + TopoDS_Shape aShape; + Handle(GEOM_Function) aRefFunction = aData.GetOriginal(); + if( aRefFunction.IsNull() ) return 0; + aShape = aRefFunction->GetValue(); + if( aShape.IsNull() ) return 0; + // set the result of function to be used by next operations + aFunction->SetValue( aShape ); + + TCollection_AsciiString aFileName = aData.GetFileName(); + + MESSAGE("Export DXF into file " << aFileName.ToCString()); + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + DxfControl_Writer aWriter; + + IFSelect_ReturnStatus status ; + status = aWriter.TransferShape( aShape ); + if ( status == IFSelect_RetDone ) + status = aWriter.WriteFile( aFileName.ToCString() ) ; + if ( status == IFSelect_RetDone ) return 1; - } - catch(Standard_Failure) { - return 1; - } + else return 0; - } -} // end of extern "C" +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean DXFPlugin_ExportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ +bool DXFPlugin_ExportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + return false; +} + +IMPLEMENT_STANDARD_HANDLE( DXFPlugin_ExportDriver,GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( DXFPlugin_ExportDriver,GEOM_BaseDriver ); diff --git a/src/DXFPlugin_ExportDriver.hxx b/src/DXFPlugin_ExportDriver.hxx new file mode 100644 index 0000000..05c6eaf --- /dev/null +++ b/src/DXFPlugin_ExportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_ExportDriver_HXX +#define _DXFPlugin_ExportDriver_HXX + +// GEOM includes +#include + +// OCCT includes +#ifndef _TFunction_Logbook_HeaderFile +#include +#endif + +DEFINE_STANDARD_HANDLE( DXFPlugin_ExportDriver, GEOM_BaseDriver ); + +class DXFPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + Standard_EXPORT DXFPlugin_ExportDriver(); + Standard_EXPORT ~DXFPlugin_ExportDriver() {}; + + Standard_EXPORT static const Standard_GUID& GetID(); + Standard_EXPORT virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_EXPORT Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + Standard_EXPORT virtual void Validate( TFunction_Logbook& ) const {} + + Standard_EXPORT virtual + bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( DXFPlugin_ExportDriver ) +}; + +#endif // _DXFPlugin_ExportDriver_HXX diff --git a/src/DXFPlugin_IECallBack.cxx b/src/DXFPlugin_IECallBack.cxx new file mode 100755 index 0000000..e66c3f7 --- /dev/null +++ b/src/DXFPlugin_IECallBack.cxx @@ -0,0 +1,67 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_IECallBack.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +DXFPlugin_IECallBack::DXFPlugin_IECallBack( DXFPlugin_IOperations* theOperations ) +: GEOMImpl_IECallBack() +{ + myPluginOperations = theOperations; +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +DXFPlugin_IECallBack::~DXFPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool DXFPlugin_IECallBack::Export( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + myPluginOperations->ExportDXF( theOriginal, theFileName ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +DXFPlugin_IECallBack::Import( const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + return myPluginOperations->ImportDXF( theFileName ); +} + diff --git a/src/DXFPlugin_IECallBack.hxx b/src/DXFPlugin_IECallBack.hxx new file mode 100644 index 0000000..92e0265 --- /dev/null +++ b/src/DXFPlugin_IECallBack.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_IECallBack_HXX_ +#define _DXFPlugin_IECallBack_HXX_ + +// internal includes +#include "DXFPlugin_IOperations.hxx" + +// GEOM includes +#include +#include + +// OCC includes +#include + +class DXFPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + Standard_EXPORT DXFPlugin_IECallBack( DXFPlugin_IOperations* theOperations ); + Standard_EXPORT ~DXFPlugin_IECallBack(); + + Standard_EXPORT virtual bool Export( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ); + + Standard_EXPORT virtual + Handle(TColStd_HSequenceOfTransient) Import( const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ); + +private: + DXFPlugin_IOperations* myPluginOperations; +}; + +#endif diff --git a/src/DXFPlugin_IExport.hxx b/src/DXFPlugin_IExport.hxx new file mode 100644 index 0000000..860cf24 --- /dev/null +++ b/src/DXFPlugin_IExport.hxx @@ -0,0 +1,48 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_IExport_HXX_ +#define _DXFPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTDXF_ARG_ORIGINAL 1 +#define EXPORTDXF_ARG_FILENAME 2 + +class DXFPlugin_IExport +{ +public: + DXFPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTDXF_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTDXF_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTDXF_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTDXF_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _DXFPlugin_IExport_HXX_ diff --git a/src/DXFPlugin_IImport.hxx b/src/DXFPlugin_IImport.hxx new file mode 100644 index 0000000..e33c410 --- /dev/null +++ b/src/DXFPlugin_IImport.hxx @@ -0,0 +1,42 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_IImport_HXX_ +#define _DXFPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTDXF_ARG_FILENAME 1 + +class DXFPlugin_IImport +{ +public: + DXFPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTDXF_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTDXF_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _DXFPlugin_IImport_HXX_ diff --git a/src/DXFPlugin_IOperations.cxx b/src/DXFPlugin_IOperations.cxx new file mode 100644 index 0000000..752c164 --- /dev/null +++ b/src/DXFPlugin_IOperations.cxx @@ -0,0 +1,171 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_IOperations.hxx" +#include "DXFPlugin_ExportDriver.hxx" +#include "DXFPlugin_ImportDriver.hxx" +#include "DXFPlugin_IExport.hxx" +#include "DXFPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include +#include + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +DXFPlugin_IOperations::DXFPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "DXFPlugin_IOperations::DXFPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +DXFPlugin_IOperations::~DXFPlugin_IOperations() +{ + MESSAGE( "DXFPlugin_IOperations::~DXFPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportDXF + * Export a shape to DXF format + * \param theOriginal The shape to export + * \param theFileName The name of the file to exported + * \param theIsASCII The format of the exported file (ASCII or Binary) + * \param theDeflection The deflection of the shape to exported + */ +//============================================================================= +void DXFPlugin_IOperations::ExportDXF( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theOriginal.IsNull() ) return; + + Handle(GEOM_Function) aRefFunction = theOriginal->GetLastFunction(); + if( aRefFunction.IsNull() ) return; //There is no function which creates an object to be exported + + //Add a new result object + Handle(GEOM_Object) result = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT); + + //Add an Export function + Handle(GEOM_Function) aFunction = result->AddFunction( DXFPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != DXFPlugin_ExportDriver::GetID() ) return; + + //Set parameters + DXFPlugin_IExport aCI( aFunction ); + aCI.SetOriginal( aRefFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Export + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Not enough space on disk, or you haven't permissions to write this directory" ); + return; + } + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << "geompy.ExportDXF(" << theOriginal << ", \"" + << theFileName.ToCString() << "\" )"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportDXF + * Import a shape from DXF format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +DXFPlugin_IOperations::ImportDXF( const TCollection_AsciiString& theFileName ) +{ + SetErrorCode(KO); + if( theFileName.IsEmpty() ) return NULL; + + //Add a new result object + Handle(GEOM_Object) anImported = GetEngine()->AddObject( GetDocID(), GEOM_IMPORT ); + + //Add an Import function + Handle(GEOM_Function) aFunction = + anImported->AddFunction( DXFPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != DXFPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + DXFPlugin_IImport aCI( aFunction ); + aCI.SetFileName( theFileName ); + + //Perform the Import + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if( !GetSolver()->ComputeFunction( aFunction ) ) { + SetErrorCode( "Import driver failed" ); + return NULL; + } + aSeq->Append(anImported); + + // Greate material groups. + //MakeMaterialGroups( anImported, aSeq ); + } + catch( Standard_Failure ) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode( aFail->GetMessageString() ); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump pd (aFunction); + pd << aSeq << " = geompy.ImportDXF(\"" << theFileName.ToCString() << "\" )"; + SetErrorCode(OK); + + return aSeq; +} diff --git a/src/DXFPlugin_IOperations.hxx b/src/DXFPlugin_IOperations.hxx new file mode 100644 index 0000000..40cea1e --- /dev/null +++ b/src/DXFPlugin_IOperations.hxx @@ -0,0 +1,39 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// +// File : DXFPlugin_IOperations.hxx + +#ifndef _DXFPlugin_IOperations_HXX_ +#define _DXFPlugin_IOperations_HXX_ + +// GEOM includes +#include + +class DXFPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + Standard_EXPORT DXFPlugin_IOperations( GEOM_Engine*, int ); + Standard_EXPORT ~DXFPlugin_IOperations(); + + Standard_EXPORT void ExportDXF( const Handle(GEOM_Object), + const TCollection_AsciiString& ); + + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) ImportDXF( const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/DXFPlugin_ImportDlg.cxx b/src/DXFPlugin_ImportDlg.cxx new file mode 100644 index 0000000..ba69e45 --- /dev/null +++ b/src/DXFPlugin_ImportDlg.cxx @@ -0,0 +1,142 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_ImportDlg.h" +#include "DXFPlugin_Operations_i.hh" + +// GUI includes +#include +#include +#include +#include +#include + +// GEOM includes +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +DXFPlugin_ImportDlg::DXFPlugin_ImportDlg( QWidget* parent ) +: SUIT_FileDlg( parent, true, true, true ), + GEOMBase_Helper( dynamic_cast( parent ) ) +{ + setWindowTitle( tr( "DXFPLUGIN_IMPORT_TITLE" ) ); + setAcceptMode( AcceptOpen ); + setNameFilter( tr( "DXFPLUGIN_DXF_FILES" ) ); + setFileMode( QFileDialog::ExistingFiles ); +} + +//================================================================================= +// Destructor +//================================================================================= +DXFPlugin_ImportDlg::~DXFPlugin_ImportDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr DXFPlugin_ImportDlg::createOperation() +{ + return getGeomEngine()->GetPluginOperations(getStudyId(), "DXFPluginEngine"); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool DXFPlugin_ImportDlg::isValid (QString& msg) +{ + bool ok = true; + //@@ add custom validation actions here @@// + return ok; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool DXFPlugin_ImportDlg::execute( ObjectList& objects ) +{ + bool res = false; + GEOM::GEOM_Object_var anObj; + DXFPlugin::GEOM_IDXFPluginOperations_var anOper = DXFPlugin::GEOM_IDXFPluginOperations::_narrow( getOperation() ); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + + QStringList fileNames = selectedFiles(); + if ( fileNames.count() == 0 ) + return false; // nothing selected, return + + for( int i = 0; i < fileNames.size(); i++ ) { + QString aFileName = fileNames.at( i ); + if ( aFileName.isEmpty() ) + continue; + GEOM_Operation* anOp = new GEOM_Operation( app, anOper.in() ); + try { + app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( aFileName.toUtf8().constData(), /*withExten=*/true ) ) ); + anOp->start(); + GEOM::ListOfGO_var anObj = anOper->ImportDXF( aFileName.toUtf8().constData() ); + if( anObj->length() > 0 && anOper->IsDone() ) { + GEOM::GEOM_Object_ptr anObjPtr = anObj[0]._retn(); + objects.push_back( anObjPtr ); + QString aPublishObjName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileNames.at( i ), + /*withExten=*/true ) ); + anObjPtr->SetName( aPublishObjName.toStdString().c_str() ); + anOp->commit(); + } + else { + anOp->abort(); + SUIT_MessageBox::critical( app->desktop(), + QObject::tr("GEOM_ERROR"), + QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr( anOper->GetErrorCode() ) ); + } + } + catch( const SALOME::SALOME_Exception& S_ex ) { + anOp->abort(); + } + } + return true; +} + +//================================================================================= +// function : accept +// purpose : +//================================================================================= +void DXFPlugin_ImportDlg::accept() +{ + SUIT_FileDlg::accept(); + onAccept(); +} + +//================================================================================= +// function : getObjectName +// purpose : +//================================================================================= +QString DXFPlugin_ImportDlg::getObjectName( GEOM::GEOM_Object_ptr object ) const +{ + if( object->_is_nil() ) + return QString::null; + return object->GetName(); +} diff --git a/src/DXFPlugin_ImportDlg.h b/src/DXFPlugin_ImportDlg.h new file mode 100644 index 0000000..48bdbf4 --- /dev/null +++ b/src/DXFPlugin_ImportDlg.h @@ -0,0 +1,49 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef DXFPlugin_IMPORTDLG_H +#define DXFPlugin_IMPORTDLG_H + +// GUI includes +#include + +// GEOM includes +#include +#include + +class DXFPlugin_ImportDlg: public SUIT_FileDlg, public GEOMBase_Helper +{ + Q_OBJECT + +public: + DXFPlugin_ImportDlg( QWidget* = 0 ); + ~DXFPlugin_ImportDlg(); + +protected: + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid( QString& ); + virtual bool execute( ObjectList& ); + virtual QString getObjectName( GEOM::GEOM_Object_ptr object ) const; + +protected slots: + void accept(); +}; + +#endif // DXFPlugin_IMPORTDLG_H diff --git a/src/DXFPlugin_ImportDriver.cxx b/src/DXFPlugin_ImportDriver.cxx index 39ca9ae..ae700d0 100644 --- a/src/DXFPlugin_ImportDriver.cxx +++ b/src/DXFPlugin_ImportDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2014 OPEN CASCADE +// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -17,11 +17,20 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include -#include +// internal includes +#include "DXFPlugin_ImportDriver.hxx" +#include "DXFPlugin_IImport.hxx" +#include "DXFPlugin_Engine.hxx" +// KERNEL includes #include +#include +// GEOM includes +#include +#include + +// OOCT includes #include #include #include @@ -41,71 +50,69 @@ #include #include +#include + #ifdef DXF_HASLICENSE -#include +#include "DXFPlugin_license.h" -#include #include +#include #endif // DXF_HASLICENSE -extern "C" +//======================================================================= +//function : GetID +//purpose : +//======================================================================= +const Standard_GUID& DXFPlugin_ImportDriver::GetID() { - /*! - \brief Get version of the plugin. - \return the version of the plugin - */ - DXFPLUGIN_EXPORT - int GetVersion() - { - return DXFPLUGIN_VERSION; - } + static Standard_GUID aGUID("dc74f282-3542-419f-a755-c5ab6aba17c5"); + return aGUID; +} - /*! - \brief Get version of the plugin. - \return the string representation of the plugin's version - */ - DXFPLUGIN_EXPORT - char* GetVersionStr() - { - return (char*)DXFPLUGIN_VERSION_STR; - } +//======================================================================= +//function : DXFPlugin_ImportDriver +//purpose : +//======================================================================= +DXFPlugin_ImportDriver::DXFPlugin_ImportDriver() +{ +} + +//======================================================================= +//function : Execute +//purpose : +//======================================================================= +Standard_Integer DXFPlugin_ImportDriver::Execute( TFunction_Logbook& log ) const +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() ); + + DXFPlugin_IImport aData( aFunction ); + + TCollection_AsciiString aFileName = aData.GetFileName().ToCString(); + + MESSAGE("Import DXF from file " << aFileName); + + TopoDS_Shape aResShape; - /*! - \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; - } + 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) { + + // Set "C" numeric locale to save numbers correctly + Kernel_Utils::Localizer loc; + + DxfControl_Reader aReader; + + IFSelect_ReturnStatus status = aReader.ReadFile( aFileName.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) @@ -124,48 +131,86 @@ extern "C" 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); + if( !aBlocks.IsNull() ) { + Handle(DxfSection_HSequenceOfObject) anObjects = aBlocks->GetObjects(); + 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(aFunction->GetNamingEntry()); + 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" + else { + TCollection_AsciiString anError = "Wrong format of the imported file. Can't import file."; + StdFail_NotDone::Raise( anError.ToCString() ); + aResShape.Nullify(); + } + + if( aResShape.IsNull() ) return 0; + + aFunction->SetValue( aResShape ); + + log.SetTouched( Label() ); + + return 1; +} + +//======================================================================= +//function : MustExecute +//purpose : +//======================================================================= +Standard_Boolean DXFPlugin_ImportDriver::MustExecute( const TFunction_Logbook& ) const +{ + return Standard_True; +} + +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ + +bool DXFPlugin_ImportDriver:: +GetCreationInformation( std::string& theOperationName, + std::vector& theParams ) +{ + if( Label().IsNull() ) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction( Label() ); + + DXFPlugin_IImport aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "ImportDXF"; + + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + break; + default: + return false; + } + return true; +} +IMPLEMENT_STANDARD_HANDLE( DXFPlugin_ImportDriver, GEOM_BaseDriver ); +IMPLEMENT_STANDARD_RTTIEXT( DXFPlugin_ImportDriver, GEOM_BaseDriver ); diff --git a/src/DXFPlugin_ImportDriver.hxx b/src/DXFPlugin_ImportDriver.hxx new file mode 100644 index 0000000..2128c2b --- /dev/null +++ b/src/DXFPlugin_ImportDriver.hxx @@ -0,0 +1,51 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_ImportDriver_HXX +#define _DXFPlugin_ImportDriver_HXX + +// GEOM includes +#include + +// OCCT includes +#ifndef _TFunction_Logbook_HeaderFile +#include +#endif + +DEFINE_STANDARD_HANDLE( DXFPlugin_ImportDriver, GEOM_BaseDriver ); + +class DXFPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + Standard_EXPORT DXFPlugin_ImportDriver(); + Standard_EXPORT ~DXFPlugin_ImportDriver() {}; + + Standard_EXPORT static const Standard_GUID& GetID(); + Standard_EXPORT virtual Standard_Integer Execute( TFunction_Logbook& log ) const; + Standard_EXPORT Standard_Boolean MustExecute( const TFunction_Logbook& ) const; + Standard_EXPORT virtual void Validate( TFunction_Logbook& ) const {} + + Standard_EXPORT virtual + bool GetCreationInformation( std::string& theOperationName, + std::vector& params ); + +DEFINE_STANDARD_RTTI( DXFPlugin_ImportDriver ) +}; + +#endif // _DXFPlugin_ImportDriver_HXX diff --git a/src/DXFPlugin_OperationsCreator.cc b/src/DXFPlugin_OperationsCreator.cc new file mode 100644 index 0000000..41705b0 --- /dev/null +++ b/src/DXFPlugin_OperationsCreator.cc @@ -0,0 +1,67 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_OperationsCreator.hh" +#include "DXFPlugin_Operations_i.hh" +#include "DXFPlugin_ExportDriver.hxx" +#include "DXFPlugin_ImportDriver.hxx" +#include "DXFPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include + +// OCCT includes +#include + +//============================================================================ +// function : Create +// purpose : +//============================================================================ +GEOM_IOperations_i* DXFPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "DXFPlugin_OperationsCreator::Create" ); + + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) { + DXFPlugin_IOperations* anOper = new DXFPlugin_IOperations( theGenImpl, theStudyId ); + _mapOfOperations[theStudyId] = anOper; + + // Import/Export DXF + TFunction_DriverTable::Get()->AddDriver( DXFPlugin_ExportDriver::GetID(), + new DXFPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( DXFPlugin_ImportDriver::GetID(), + new DXFPlugin_ImportDriver() ); + + DXFPlugin_IECallBack* DXFCallBack = new DXFPlugin_IECallBack( anOper ); + GEOMImpl_IECallBack::Register( "DXF", DXFCallBack ); + } + + DXFPlugin_Operations_i* aServant = + new DXFPlugin_Operations_i( thePOA, theEngine, _mapOfOperations[theStudyId] ); + + return aServant; +} diff --git a/src/DXFPlugin_OperationsCreator.hh b/src/DXFPlugin_OperationsCreator.hh new file mode 100755 index 0000000..c3ca1ab --- /dev/null +++ b/src/DXFPlugin_OperationsCreator.hh @@ -0,0 +1,47 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _GEOM_DXFPlugin_OperationsCreator_HXX_ +#define _GEOM_DXFPlugin_OperationsCreator_HXX_ + +// internal includes +#include "DXFPlugin_Engine.hxx" +#include "DXFPlugin_IOperations.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +//===================================================================== +// Operations creator +//===================================================================== +class DXFPLUGINENGINE_EXPORT DXFPlugin_OperationsCreator : public GEOM_GenericOperationsCreator +{ +public: + virtual GEOM_IOperations_i* Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ); + private: + std::map _mapOfOperations; +}; + +#endif diff --git a/src/DXFPlugin_Operations_i.cc b/src/DXFPlugin_Operations_i.cc new file mode 100644 index 0000000..115daf0 --- /dev/null +++ b/src/DXFPlugin_Operations_i.cc @@ -0,0 +1,134 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +// internal includes +#include "DXFPlugin_Operations_i.hh" +#include + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +DXFPlugin_Operations_i::DXFPlugin_Operations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + ::DXFPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "DXFPlugin_Operations_i::DXFPlugin_Operations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +DXFPlugin_Operations_i::~DXFPlugin_Operations_i() +{ + MESSAGE( "DXFPlugin_Operations_i::~DXFPlugin_Operations_i" ); +} + +//============================================================================= +/*! + * ExportDXF + * Export a shape to DXF format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + */ +//============================================================================= +void DXFPlugin_Operations_i::ExportDXF( GEOM::GEOM_Object_ptr theOriginal, + const char* theFileName ) +{ + // duplicate the original shape + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal ); + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference shape + Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal ); + if (anOriginal.IsNull()) return; + + //Export the shape to the file + char* aFileName = strdup( theFileName ); + + GetOperations()->ExportDXF( anOriginal, aFileName ); + free( aFileName ); +} + +//============================================================================= +/*! + * ImportDXF + * Import a shape from DXF format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* DXFPlugin_Operations_i::ImportDXF( const char* theFileName ) +{ + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Import the shape from the file + char* aFileName = strdup( theFileName ); + TCollection_AsciiString fileName( aFileName ); + + //Import the shape from the file + Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->ImportDXF( fileName ); + + free( aFileName ); + if( !GetOperations()->IsDone() || aHSeq.IsNull() ) + return aSeq._retn(); + + // Copy created objects. + Standard_Integer aLength = aHSeq->Length(); + aSeq->length( aLength ); + for( Standard_Integer i = 1; i <= aLength; i++ ) + aSeq[i-1] = GetObject( Handle(GEOM_Object)::DownCast( aHSeq->Value(i) ) ); + + return aSeq._retn(); +} + +//============================================================================= +/*! + * \brief Get version of the plugin. + * \return the version of the plugin +*/ +//============================================================================= + +int DXFPlugin_Operations_i::GetVersion() +{ + return DXFPLUGIN_VERSION; +} +//============================================================================= +/*! + * \brief Get version of the plugin. + * \return the string representation of the plugin's version +*/ +//============================================================================= + +char* DXFPlugin_Operations_i::GetVersionStr() +{ + return (char*)DXFPLUGIN_VERSION_STR; +} diff --git a/src/DXFPlugin_Operations_i.hh b/src/DXFPlugin_Operations_i.hh new file mode 100644 index 0000000..21488b2 --- /dev/null +++ b/src/DXFPlugin_Operations_i.hh @@ -0,0 +1,56 @@ +// Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +// + +#ifndef _DXFPlugin_Operations_i_HeaderFile +#define _DXFPlugin_Operations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( DXFPlugin_Gen ) + +// internal includes +#include "DXFPlugin_Engine.hxx" +#include "DXFPlugin_IOperations.hxx" + +// GEOM includes +#include + +class DXFPLUGINENGINE_EXPORT DXFPlugin_Operations_i : + public virtual POA_DXFPlugin::GEOM_IDXFPluginOperations, + public virtual GEOM_IOperations_i +{ +public: + DXFPlugin_Operations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + ::DXFPlugin_IOperations* theImpl ); + ~DXFPlugin_Operations_i(); + + void ExportDXF( GEOM::GEOM_Object_ptr, const char* ); + GEOM::ListOfGO* ImportDXF( const char* ); + + // Version information + virtual int GetVersion(); + virtual char* GetVersionStr(); + + ::DXFPlugin_IOperations* GetOperations() + { return (::DXFPlugin_IOperations*)GetImpl(); } +}; + +#endif diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..f97508b --- /dev/null +++ b/src/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2014 CEA/DEN, EDF R&D, 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 +# + +# DXFPLUGIN : binding of C++ implementation with Python +# File : __init__.py +# diff --git a/src/resources/DXFPlugin_msg_en.ts b/src/resources/DXFPlugin_msg_en.ts new file mode 100644 index 0000000..24fc2b3 --- /dev/null +++ b/src/resources/DXFPlugin_msg_en.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTDXF + DXF + + + TOP_EXPORTDXF + Export DXF + + + STB_EXPORTDXF + Export DXF + + + MEN_IMPORTDXF + DXF + + + TOP_IMPORTDXF + Import DXF + + + STB_IMPORTDXF + Import DXF + + + DXFPLUGIN_DXF_FILES + DXF files( *.dxf ) + + + + DXFPlugin_ExportDlg + + DXFPLUGIN_EXPORT_TITLE + Export DXF + + + + DXFPlugin_ImportDlg + + DXFPLUGIN_IMPORT_TITLE + Import DXF + + + diff --git a/src/resources/DXFPlugin_msg_fr.ts b/src/resources/DXFPlugin_msg_fr.ts new file mode 100644 index 0000000..9f66bda --- /dev/null +++ b/src/resources/DXFPlugin_msg_fr.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTDXF + DXF + + + TOP_EXPORTDXF + Exporter DXF + + + STB_EXPORTDXF + Exporter DXF + + + MEN_IMPORTDXF + DXF + + + TOP_IMPORTDXF + Importer DXF + + + STB_IMPORTDXF + Importer DXF + + + DXFPLUGIN_DXF_FILES + DXF Fichiers( *.dxf ) + + + + DXFPlugin_ExportDlg + + DXFPLUGIN_EXPORT_TITLE + Exporter DXF + + + + DXFPlugin_ImportDlg + + DXFPLUGIN_IMPORT_TITLE + Importer DXF + + + \ No newline at end of file diff --git a/src/resources/DXFPlugin_msg_ja.ts b/src/resources/DXFPlugin_msg_ja.ts new file mode 100644 index 0000000..859d770 --- /dev/null +++ b/src/resources/DXFPlugin_msg_ja.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTDXF + DXF + + + TOP_EXPORTDXF + Export DXF + + + STB_EXPORTDXF + Export DXF + + + MEN_IMPORTDXF + DXF + + + TOP_IMPORTDXF + Import DXF + + + STB_IMPORTDXF + Import DXF + + + DXFPLUGIN_DXF_FILES + DXF files( *.dxf ) + + + + DXFPlugin_ExportDlg + + DXFPLUGIN_EXPORT_TITLE + Export DXF + + + + DXFPlugin_ImportDlg + + DXFPLUGIN_IMPORT_TITLE + Import DXF + + + \ No newline at end of file