From 77903c15949d06de2258c1a1e3f6f97a5632c251 Mon Sep 17 00:00:00 2001 From: mpa Date: Wed, 3 Sep 2014 13:49:27 +0400 Subject: [PATCH] Implementation of ACISPLUGIN as a GEOM plugin (added files) --- doc/CMakeLists.txt | 20 ++ doc/salome/CMakeLists.txt | 21 +++ doc/salome/examples/ACISPlugindemo.py | 23 +++ doc/salome/examples/CMakeLists.txt | 21 +++ doc/salome/gui/ACISPLUGIN/CMakeLists.txt | 45 +++++ doc/salome/gui/ACISPLUGIN/doxyfile.in | 114 ++++++++++++ doc/salome/gui/ACISPLUGIN/doxyfile_py.in | 160 ++++++++++++++++ .../gui/ACISPLUGIN/images/export_acis.png | Bin 0 -> 30545 bytes .../gui/ACISPLUGIN/images/group_acis.png | Bin 0 -> 11224 bytes doc/salome/gui/ACISPLUGIN/images/head.png | Bin 0 -> 78545 bytes .../gui/ACISPLUGIN/images/import_acis.png | Bin 0 -> 29722 bytes .../gui/ACISPLUGIN/images/reopen_acis.png | Bin 0 -> 11051 bytes .../input/acisplugin_importexport_page.doc | 37 ++++ .../acisplugin_python_interface_page.doc | 19 ++ doc/salome/gui/ACISPLUGIN/input/index.doc | 17 ++ doc/salome/gui/ACISPLUGIN/static/footer.html | 13 ++ .../gui/ACISPLUGIN/static/header.html.in | 23 +++ .../gui/ACISPLUGIN/static/header_py.html.in | 24 +++ .../gui/ACISPLUGIN/static/salome_extra.css | 29 +++ doc/salome/gui/CMakeLists.txt | 20 ++ idl/ACISPlugin_Gen.idl | 51 ++++++ idl/CMakeLists.txt | 49 +++++ resources/ACISPlugin.xml | 43 +++++ resources/SalomeApp.xml | 32 ++++ src/ACISPluginBuilder.py | 89 +++++++++ src/ACISPluginEngine.cxx | 32 ++++ src/ACISPluginGUI.cxx | 127 +++++++++++++ src/ACISPluginGUI.h | 35 ++++ src/ACISPlugin_ExportDlg.cxx | 132 +++++++++++++ src/ACISPlugin_ExportDlg.h | 52 ++++++ src/ACISPlugin_ExportDriver.hxx | 51 ++++++ src/ACISPlugin_IECallBack.cxx | 67 +++++++ src/ACISPlugin_IECallBack.hxx | 51 ++++++ src/ACISPlugin_IExport.hxx | 48 +++++ src/ACISPlugin_IImport.hxx | 42 +++++ src/ACISPlugin_IOperations.cxx | 171 +++++++++++++++++ src/ACISPlugin_IOperations.hxx | 39 ++++ src/ACISPlugin_ImportDlg.cxx | 173 ++++++++++++++++++ src/ACISPlugin_ImportDlg.h | 49 +++++ src/ACISPlugin_ImportDriver.hxx | 51 ++++++ src/ACISPlugin_OperationsCreator.cc | 67 +++++++ src/ACISPlugin_OperationsCreator.hh | 47 +++++ src/ACISPlugin_Operations_i.cc | 134 ++++++++++++++ src/ACISPlugin_Operations_i.hh | 56 ++++++ src/__init__.py | 23 +++ src/resources/ACISPlugin_msg_en.ts | 49 +++++ src/resources/ACISPlugin_msg_fr.ts | 49 +++++ src/resources/ACISPlugin_msg_ja.ts | 49 +++++ 48 files changed, 2444 insertions(+) create mode 100755 doc/CMakeLists.txt create mode 100755 doc/salome/CMakeLists.txt create mode 100644 doc/salome/examples/ACISPlugindemo.py create mode 100644 doc/salome/examples/CMakeLists.txt create mode 100755 doc/salome/gui/ACISPLUGIN/CMakeLists.txt create mode 100755 doc/salome/gui/ACISPLUGIN/doxyfile.in create mode 100755 doc/salome/gui/ACISPLUGIN/doxyfile_py.in create mode 100644 doc/salome/gui/ACISPLUGIN/images/export_acis.png create mode 100644 doc/salome/gui/ACISPLUGIN/images/group_acis.png create mode 100755 doc/salome/gui/ACISPLUGIN/images/head.png create mode 100644 doc/salome/gui/ACISPLUGIN/images/import_acis.png create mode 100644 doc/salome/gui/ACISPLUGIN/images/reopen_acis.png create mode 100644 doc/salome/gui/ACISPLUGIN/input/acisplugin_importexport_page.doc create mode 100644 doc/salome/gui/ACISPLUGIN/input/acisplugin_python_interface_page.doc create mode 100644 doc/salome/gui/ACISPLUGIN/input/index.doc create mode 100755 doc/salome/gui/ACISPLUGIN/static/footer.html create mode 100755 doc/salome/gui/ACISPLUGIN/static/header.html.in create mode 100644 doc/salome/gui/ACISPLUGIN/static/header_py.html.in create mode 100644 doc/salome/gui/ACISPLUGIN/static/salome_extra.css create mode 100755 doc/salome/gui/CMakeLists.txt create mode 100644 idl/ACISPlugin_Gen.idl create mode 100755 idl/CMakeLists.txt create mode 100644 resources/ACISPlugin.xml create mode 100644 resources/SalomeApp.xml create mode 100644 src/ACISPluginBuilder.py create mode 100644 src/ACISPluginEngine.cxx create mode 100644 src/ACISPluginGUI.cxx create mode 100644 src/ACISPluginGUI.h create mode 100644 src/ACISPlugin_ExportDlg.cxx create mode 100644 src/ACISPlugin_ExportDlg.h create mode 100644 src/ACISPlugin_ExportDriver.hxx create mode 100755 src/ACISPlugin_IECallBack.cxx create mode 100644 src/ACISPlugin_IECallBack.hxx create mode 100644 src/ACISPlugin_IExport.hxx create mode 100644 src/ACISPlugin_IImport.hxx create mode 100644 src/ACISPlugin_IOperations.cxx create mode 100644 src/ACISPlugin_IOperations.hxx create mode 100644 src/ACISPlugin_ImportDlg.cxx create mode 100644 src/ACISPlugin_ImportDlg.h create mode 100644 src/ACISPlugin_ImportDriver.hxx create mode 100644 src/ACISPlugin_OperationsCreator.cc create mode 100755 src/ACISPlugin_OperationsCreator.hh create mode 100644 src/ACISPlugin_Operations_i.cc create mode 100644 src/ACISPlugin_Operations_i.hh create mode 100644 src/__init__.py create mode 100644 src/resources/ACISPlugin_msg_en.ts create mode 100644 src/resources/ACISPlugin_msg_fr.ts create mode 100644 src/resources/ACISPlugin_msg_ja.ts 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/ACISPlugindemo.py b/doc/salome/examples/ACISPlugindemo.py new file mode 100644 index 0000000..09ee7a0 --- /dev/null +++ b/doc/salome/examples/ACISPlugindemo.py @@ -0,0 +1,23 @@ +# Import/Export ACIS + +import salome +salome.salome_init() +import GEOM +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) + +# Example of import from ACIS + +# get a path to SAMPLES_SRC +import os +thePath = os.getenv("DATA_DIR") +# create filenames +theFileName = thePath + "/Shapes/Sat/Bug841_Robot01_ACIS_15_Volumique.sat" + +# import shape +Shape1 = geompy.ImportACIS(theFileName) +geompy.addToStudy(Shape1, "Robot01_1") + +# It is possible also to use next format of importing and publishing in study + +Shape2 = geompy.ImportACIS(theFileName,"Robot01_2") diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt new file mode 100644 index 0000000..0943ad6 --- /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/ACISPLUGIN) diff --git a/doc/salome/gui/ACISPLUGIN/CMakeLists.txt b/doc/salome/gui/ACISPLUGIN/CMakeLists.txt new file mode 100755 index 0000000..743e277 --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/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/ACISPluginBuilder.py ${CMAKE_SOURCE_DIR}/src/ACISPluginBuilder.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}/ACISPLUGIN DESTINATION ${SALOME_INSTALL_DOC}/gui) +INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/ACISPLUGIN) +INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/gui/ACISPLUGIN/acispluginpy_doc) + +SET(make_clean_files ACISPLUGIN acispluginpy_doc.tag) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}") diff --git a/doc/salome/gui/ACISPLUGIN/doxyfile.in b/doc/salome/gui/ACISPLUGIN/doxyfile.in new file mode 100755 index 0000000..b46013d --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/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 ACISPLUGIN User's Guide" +OUTPUT_DIRECTORY = ACISPLUGIN +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 = acispluginpy_doc.tag=../ACISPLUGIN/acispluginpy_doc +SEARCHENGINE = YES + +#--------------------------------------------------------------------------- +#Custom commands +#--------------------------------------------------------------------------- +ALIASES += tui_script{1}="\include \1 Download this script" diff --git a/doc/salome/gui/ACISPLUGIN/doxyfile_py.in b/doc/salome/gui/ACISPLUGIN/doxyfile_py.in new file mode 100755 index 0000000..f542a25 --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/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 ACISPLUGIN User's Guide" +OUTPUT_DIRECTORY = ACISPLUGIN +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/ACISPlugin_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 = acispluginpy_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 = acispluginpy_doc.tag +SEARCHENGINE = YES diff --git a/doc/salome/gui/ACISPLUGIN/images/export_acis.png b/doc/salome/gui/ACISPLUGIN/images/export_acis.png new file mode 100644 index 0000000000000000000000000000000000000000..4cdb1f6e2960a5a9d8035bacaa4438af510b4621 GIT binary patch literal 30545 zcmeFZWl)@5)GgS=g9Hf>AXspR;7$mQ1Ofzi2<~pd6O!N(q#?LFjW;eKxI2xzySvQE zcfUJRQ&(#4%%7>L>B`%@bo%K&&yl^?UTf_Hev*^KKqW$jKp+?&q@aor$OC-{1f}-b z1Mtd#-xF)_!uj8SC^d!(><|b!e!=73@|s!CBk&Wwd^=YP*6Xv+1;%wD8837T z?`9=blVH(2Dw-1E*Pm#>7-E1xzWSZFUCqPQB29(QBTvdGC|@zVo!8hK2GZ4))W6Ys z3W0ngLk;Rls{hpU7d33mqvmBqikvKzvGGDN=!40+!eJ8izA%r?&Z_4z+>#Lj`D3m0 zNn2OlK-lZEBy&$yNZq_z4$L4jpy+q+2LYd}b4OPC0I6LvS!g<)su~J-e^P2mYoslM zfQQ-oEv67L$(EAgzpLCkw3ITQCcEttpU zC^2;$XuM~?avybwU0yFAAe|yaI==ferc-t-b3b*L^xplOFckzcLqgye(7CbQjE3mr z{$9MULE)Dd?^hH8m3n}Med~5%WIj3H-)G6WwP$Z_+maTZ#P6DwN;hFy~fY zWFFH*wKSKbXDAeSc{QZ}O_=FEe`=Rdq9}#)T#dtFB+LuSd2qK^#EvYAa4C%R!y}}> z@nWXc43wh65tqPqqc&WYI$)YHQ?05jXd!vf6O1~fyYxnzrm?pu5SQ!C>GcZ~qSkMe zwCgl8ud#2cUJ~#bWOT(F9Wk=4 z;e-G=?M@HZzHbwi%vrKEYN)|Sj{avMHm}S_JPK4n6hpou!#dSHqSL(cS4T%^^$kwD zdx3L43%~npFfq7e;(CH*q+!y=>SmvQ4ZVZD@IN+im+=19wdh0#lNKS{H_=aH$np({ zyyLehpHA?50*j8pi;b>r9D_!~JgC>Dy^C$^RW#es-Ye)U6uaQPdOQEpW{@s##$Y6O zHYiAjQ0wri(siB+s=ty{qw>Pa&ysihPX#1vU|=DOJ6!GaVl7$!^$r9QZoxF|xbcSlusz%n}}%XhQQA3@KmHl+L(j5Kdsko`UMVZ5+naDaY1?D^V%Wp{u8yZhBh@vS z?H;Gxxvw}!PDct2<2iq<=U!c-h`R>AGp>1VKP*4!R!_Me1A?9WSr^pU3 z$rxw8@$V+ZW@-Pu*RSSySY{S+NxgPENOc5MZFFsPMXR{q>{%GgiE5~NoBMD4@lN{d zN;-gMOB9*ta2NIJsz4=Z$G1!^cE5~|Fl?DA=18?K1iLRjx#_p=rce-m0d;m>asYne zlQeA4Oyn3{i3?+O zKr-gbj3hMuj{vUFKu+O&ld;;z&Y@p+Z&{nDHp5@Wer%Mj6)_LlOLK6f-uSrgJP+FEvH`7 z`cBqNL!~J0Ev)Ql_ zce3Ja6y3YIJ!pl=^#@k6riFJ8u>;f9H7&;7Ebhfta$>&REBdgxADgL#lgk}@Xol6B zv5MpMd9v2k@Yg|zPJ+qRcT>mAh8M|wng`C2;j#Tj443CGb-?U&#iBM|o`%H6s*Mb$ zcI$l%ZrfVU3ozg6KwIh;%gb6lOIIui.ujs9>B!W<8s!RQtF;?fIY{}{JRPWM~ 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 D4zrO! literal 0 HcmV?d00001 diff --git a/doc/salome/gui/ACISPLUGIN/images/import_acis.png b/doc/salome/gui/ACISPLUGIN/images/import_acis.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ab32bb6402943412f209903b579c722b902aef GIT binary patch literal 29722 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 y-L>V!4%-Q5ENupWgt=?L;eL*%BMI0 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/ACISPLUGIN/input/acisplugin_importexport_page.doc b/doc/salome/gui/ACISPLUGIN/input/acisplugin_importexport_page.doc new file mode 100644 index 0000000..74b17fe --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/input/acisplugin_importexport_page.doc @@ -0,0 +1,37 @@ +/*! + +\page acisplugin_importexport_page Import/Export ACIS + +For using ACISPLUGIN functionalities in SALOME: + +- Run SALOME and activate Geometry module. + +- Import the ACIS file from menu File/Import/ACIS. + + \image html import_acis.png + + Browse and select the file and click "Open" button. New object (shape) + will appears in the SALOME object browser. + + \note If a plugin supports import of named shapes, it will be asked whether + to group or not these shapes corresponding to the type (see the picture below). + + \image html group_acis.png + + \par + + \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_acis.png + +- Export to the ACIS file selecting a shape in the SALOME object browser and + calling menu File/Export/ACIS. + + \image html export_acis.png + + Enter the file name and click "Save" button. + +*/ diff --git a/doc/salome/gui/ACISPLUGIN/input/acisplugin_python_interface_page.doc b/doc/salome/gui/ACISPLUGIN/input/acisplugin_python_interface_page.doc new file mode 100644 index 0000000..9a349dc --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/input/acisplugin_python_interface_page.doc @@ -0,0 +1,19 @@ +/*! + +\page acisplugin_python_interface_page Python Interface + +Python package ACISPluginBuilder defines several classes, destined for +import and export CAD models in ACIS format (*.sat files). + +ACISPLUGIN dynamically adds several methods to the geomBuilder. + +Below you can see an example of usage of the ACISPluginBuilder package for +import and export CAD models: + +\anchor example_ACISPlugin +

Example of import CAD model stored in ACIS format (*.sat files) with ACISPLUGIN:

+\tui_script{ACISPlugindemo.py} + +*/ + + diff --git a/doc/salome/gui/ACISPLUGIN/input/index.doc b/doc/salome/gui/ACISPLUGIN/input/index.doc new file mode 100644 index 0000000..58eb48c --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/input/index.doc @@ -0,0 +1,17 @@ +/*! + +\mainpage Introduction to ACISPLUGIN + + ACIS SAT interface to be used as plugin for SALOME Geometry +module. +It is destined for: +- Importing CAD models stored in ACIS format (*.sat files) into +SALOME study; +- Exporting CAD models from SALOME to the *.sat files. + +To manage parameters of the ACISPLUGIN use \subpage acisplugin_importexport_page. + +Also all ACISPLUGIN functionalities are accessible via +\subpage acisplugin_python_interface_page "ACISPLUGIN Python interface". + +*/ diff --git a/doc/salome/gui/ACISPLUGIN/static/footer.html b/doc/salome/gui/ACISPLUGIN/static/footer.html new file mode 100755 index 0000000..e21ab0c --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/static/footer.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/doc/salome/gui/ACISPLUGIN/static/header.html.in b/doc/salome/gui/ACISPLUGIN/static/header.html.in new file mode 100755 index 0000000..126dc75 --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/static/header.html.in @@ -0,0 +1,23 @@ + + + + + + + +$projectname: $title +$title + + + +$treeview +$search +$mathjax + +$extrastylesheet + + +
+ +
Version: @SALOMEACISPLUGIN_VERSION@
+ diff --git a/doc/salome/gui/ACISPLUGIN/static/header_py.html.in b/doc/salome/gui/ACISPLUGIN/static/header_py.html.in new file mode 100644 index 0000000..70d378b --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/static/header_py.html.in @@ -0,0 +1,24 @@ + + + + + + + +$projectname: $title +$title + + + +$treeview +$search +$mathjax + +$extrastylesheet + + +
+ +
Version: @SALOMEACISPLUGIN_VERSION@
+
+ diff --git a/doc/salome/gui/ACISPLUGIN/static/salome_extra.css b/doc/salome/gui/ACISPLUGIN/static/salome_extra.css new file mode 100644 index 0000000..3e8b838 --- /dev/null +++ b/doc/salome/gui/ACISPLUGIN/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/doc/salome/gui/CMakeLists.txt b/doc/salome/gui/CMakeLists.txt new file mode 100755 index 0000000..1a2a012 --- /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(ACISPLUGIN) diff --git a/idl/ACISPlugin_Gen.idl b/idl/ACISPlugin_Gen.idl new file mode 100644 index 0000000..0fd7d0d --- /dev/null +++ b/idl/ACISPlugin_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 __ACISPlugin_GEN__ +#define __ACISPlugin_GEN__ + +#include "GEOM_Gen.idl" + +module ACISPlugin { + + /*! + * \brief Interface for ACISPlugin modeling functions. + */ + interface GEOM_IACISPluginOperations : GEOM::GEOM_IOperations + { + /*! + * \brief Export the given shape into a file with given name in ACIS format. + * + * \param theObject Shape to be stored in the file. + * \param theFileName Name of the file to store the given shape in. + */ + void ExportACIS( in GEOM::GEOM_Object theObject, + in string theFileName ); + + /*! + * \brief Import a shape from the ACIS file. + * + * \param theFileName The file, containing the shape. + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ + GEOM::ListOfGO ImportACIS( in string theFileName ); + }; +}; + +#endif diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt new file mode 100755 index 0000000..e462ebb --- /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(SalomeIDLACISPlugin_IDLSOURCES + ACISPlugin_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(SalomeIDLACISPlugin "${SalomeIDLACISPlugin_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" "${IDL_LINK_FLAGS}") +ADD_DEPENDENCIES(SalomeIDLACISPlugin ${GEOM_SalomeIDLGEOM}) +INSTALL(TARGETS SalomeIDLACISPlugin EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) diff --git a/resources/ACISPlugin.xml b/resources/ACISPlugin.xml new file mode 100644 index 0000000..e23fe28 --- /dev/null +++ b/resources/ACISPlugin.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml new file mode 100644 index 0000000..0c841e3 --- /dev/null +++ b/resources/SalomeApp.xml @@ -0,0 +1,32 @@ + + +
+ +
+
+ + +
+
+ +
+
diff --git a/src/ACISPluginBuilder.py b/src/ACISPluginBuilder.py new file mode 100644 index 0000000..cf4e037 --- /dev/null +++ b/src/ACISPluginBuilder.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 ACISPlugin import GEOM_IACISPluginOperations + +# Engine Library Name +__libraryName__ = "ACISPluginEngine" + +def GetACISPluginOperations(self): + anOp = self.GetPluginOperations(self.myStudyId, __libraryName__) + return anOp._narrow(GEOM_IACISPluginOperations) + +## Export the given shape into a file with given name in ACIS format. +# @param theObject Shape to be stored in the file. +# @param theFileName Name of the file to store the given shape in. +def ExportACIS(self, theObject, theFileName): + """ + Export the given shape into a file with given name in ACIS format. + + Parameters: + theObject Shape to be stored in the file. + theFileName Name of the file to store the given shape in. + """ + anOp = GetACISPluginOperations(self) + anOp.ExportACIS(theObject, theFileName) + if anOp.IsDone() == 0: + raise RuntimeError, "Export : " + anOp.GetErrorCode() + pass + pass + + +## Import a shape from the ACIS 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 ImportACIS(self, theFileName, theName=None): + """ + Import a shape from the ACIS 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 = GetACISPluginOperations(self) + aListObj = anOp.ImportACIS(theFileName) + RaiseIfFailed("ImportACIS", 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/ACISPluginEngine.cxx b/src/ACISPluginEngine.cxx new file mode 100644 index 0000000..63da1ac --- /dev/null +++ b/src/ACISPluginEngine.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 "ACISPlugin_Engine.hxx" +#include "ACISPlugin_OperationsCreator.hh" + +extern "C" +{ +ACISPLUGINENGINE_EXPORT + GEOM_GenericOperationsCreator* GetOperationsCreator() + { + ACISPlugin_OperationsCreator* aCreator = new ACISPlugin_OperationsCreator(); + return aCreator; + } +} diff --git a/src/ACISPluginGUI.cxx b/src/ACISPluginGUI.cxx new file mode 100644 index 0000000..08fb2b6 --- /dev/null +++ b/src/ACISPluginGUI.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 "ACISPluginGUI.h" +#include "ACISPlugin_ExportDlg.h" +#include "ACISPlugin_ImportDlg.h" + +// GUI includes +#include +#include +#include +#include +#include + +// GEOM includes +#include + +//======================================================================= +// function : ACISPluginGUI() +// purpose : Constructor +//======================================================================= +ACISPluginGUI::ACISPluginGUI( GeometryGUI* parent ) : GEOMPluginGUI( parent ) +{ +} + +//======================================================================= +// function : ~ACISPluginGUI +// purpose : Destructor +//======================================================================= +ACISPluginGUI::~ACISPluginGUI() +{ +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool ACISPluginGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) +{ + switch ( theCommandID ) { + case 1: + return OnGUIEvent("Export_ACIS", parent); + case 2: + return OnGUIEvent("Import_ACIS", parent); + default: + return OnGUIEvent("", parent); + } + return false; +} + +//======================================================================= +// function : OnGUIEvent() +// purpose : +//======================================================================= +bool ACISPluginGUI::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_ACIS" ) { + // 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 ACISPlugin_ExportDlg( IObject, parent ); + if( dialog->exec() == QDialog::Accepted ) + delete dialog; + } + } + } + else if (theCommandID == "Import_ACIS") { + dialog = new ACISPlugin_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 ACISPluginGUI( parent ); + } +} diff --git a/src/ACISPluginGUI.h b/src/ACISPluginGUI.h new file mode 100644 index 0000000..f61093c --- /dev/null +++ b/src/ACISPluginGUI.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 ACISPluginGUI_H +#define ACISPluginGUI_H + +#include + +class ACISPluginGUI: public GEOMPluginGUI +{ +public: + ACISPluginGUI( GeometryGUI* parent ); + ~ACISPluginGUI(); + + bool OnGUIEvent( int commandId, SUIT_Desktop* ); + bool OnGUIEvent( const QString&, SUIT_Desktop* ); +}; + +#endif // ACISPluginGUI_H diff --git a/src/ACISPlugin_ExportDlg.cxx b/src/ACISPlugin_ExportDlg.cxx new file mode 100644 index 0000000..ae96e9d --- /dev/null +++ b/src/ACISPlugin_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 "ACISPlugin_ExportDlg.h" +#include "ACISPlugin_Operations_i.hh" + +// GUI includes +#include +#include +#include +#include +#include + +#include + +// GEOM includes +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +ACISPlugin_ExportDlg::ACISPlugin_ExportDlg( Handle(SALOME_InteractiveObject)& object, QWidget* parent ) +: SUIT_FileDlg( parent, false, true, true ), + GEOMBase_Helper( dynamic_cast( parent ) ) +{ + setWindowTitle( tr( "ACISPLUGIN_EXPORT_TITLE" ) ); + setNameFilter( tr( "ACISPLUGIN_ACIS_FILES" ) ); + + myObject = object; + const char* objectName = myObject->getName(); + selectFile( QString( objectName ) ); +} + +//================================================================================= +// Destructor +//================================================================================= +ACISPlugin_ExportDlg::~ACISPlugin_ExportDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr ACISPlugin_ExportDlg::createOperation() +{ + return getGeomEngine()->GetPluginOperations( getStudyId(), "ACISPluginEngine" ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool ACISPlugin_ExportDlg::isValid( QString& msg ) +{ + bool ok = true; + //@@ add custom validation actions here @@// + return ok; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool ACISPlugin_ExportDlg::execute( ObjectList& objects ) +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if (!app) return false; + + ACISPlugin::GEOM_IACISPluginOperations_var aACISOp = ACISPlugin::GEOM_IACISPluginOperations::_narrow( getOperation() ); + if ( aACISOp->_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, aACISOp.in() ); + try { + SUIT_OverrideCursor wc; + app->putInfo( tr("GEOM_PRP_EXPORT").arg(SUIT_Tools::file( aFile, /*withExten=*/true )) ); + anOp->start(); + aACISOp->ExportACIS( anObj, aFile.toUtf8().constData() ); + if( aACISOp->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( aACISOp->GetErrorCode() ) ); + return false; + } + } + catch( const SALOME::SALOME_Exception& S_ex ) { + anOp->abort(); + return false; + } + + objects.push_back( anObj._retn() ); + return true; +} + +void ACISPlugin_ExportDlg::accept() +{ + SUIT_FileDlg::accept(); + onAccept(false); +} diff --git a/src/ACISPlugin_ExportDlg.h b/src/ACISPlugin_ExportDlg.h new file mode 100644 index 0000000..5c346a9 --- /dev/null +++ b/src/ACISPlugin_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 ACISPlugin_ExportDlg_H +#define ACISPlugin_ExportDlg_H + +// GUI includes +#include + +// GEOM includes +#include +#include + + +class ACISPlugin_ExportDlg: public SUIT_FileDlg, public GEOMBase_Helper +{ + Q_OBJECT + +public: + ACISPlugin_ExportDlg( Handle(SALOME_InteractiveObject)&, QWidget* = 0 ); + ~ACISPlugin_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 // ACISPlugin_ExportDlg_H diff --git a/src/ACISPlugin_ExportDriver.hxx b/src/ACISPlugin_ExportDriver.hxx new file mode 100644 index 0000000..f4a79fa --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_ExportDriver_HXX +#define _ACISPlugin_ExportDriver_HXX + +// GEOM includes +#include + +// OCCT includes +#ifndef _TFunction_Logbook_HeaderFile +#include +#endif + +DEFINE_STANDARD_HANDLE( ACISPlugin_ExportDriver, GEOM_BaseDriver ); + +class ACISPlugin_ExportDriver : public GEOM_BaseDriver +{ +public: + Standard_EXPORT ACISPlugin_ExportDriver(); + Standard_EXPORT ~ACISPlugin_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( ACISPlugin_ExportDriver ) +}; + +#endif // _ACISPlugin_ExportDriver_HXX diff --git a/src/ACISPlugin_IECallBack.cxx b/src/ACISPlugin_IECallBack.cxx new file mode 100755 index 0000000..5d21b00 --- /dev/null +++ b/src/ACISPlugin_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 "ACISPlugin_IECallBack.hxx" + +//============================================================================= +/*! + * constructor + */ +//============================================================================= +ACISPlugin_IECallBack::ACISPlugin_IECallBack( ACISPlugin_IOperations* theOperations ) +: GEOMImpl_IECallBack() +{ + myPluginOperations = theOperations; +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +ACISPlugin_IECallBack::~ACISPlugin_IECallBack() +{ +} + +//============================================================================= +/*! + * Export + */ +//============================================================================= +bool ACISPlugin_IECallBack::Export( const Handle(GEOM_Object) theOriginal, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName ) +{ + myPluginOperations->ExportACIS( theOriginal, theFileName ); + return true; +} + +//============================================================================= +/*! + * Import + */ +//============================================================================= +Handle(TColStd_HSequenceOfTransient) +ACISPlugin_IECallBack::Import( const TCollection_AsciiString& theFormatName, + const TCollection_AsciiString& theFileName ) +{ + return myPluginOperations->ImportACIS( theFileName ); +} + diff --git a/src/ACISPlugin_IECallBack.hxx b/src/ACISPlugin_IECallBack.hxx new file mode 100644 index 0000000..cc6b08f --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_IECallBack_HXX_ +#define _ACISPlugin_IECallBack_HXX_ + +// internal includes +#include "ACISPlugin_IOperations.hxx" + +// GEOM includes +#include +#include + +// OCC includes +#include + +class ACISPlugin_IECallBack : public GEOMImpl_IECallBack +{ +public: + Standard_EXPORT ACISPlugin_IECallBack( ACISPlugin_IOperations* theOperations ); + Standard_EXPORT ~ACISPlugin_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: + ACISPlugin_IOperations* myPluginOperations; +}; + +#endif diff --git a/src/ACISPlugin_IExport.hxx b/src/ACISPlugin_IExport.hxx new file mode 100644 index 0000000..6bdc0af --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_IExport_HXX_ +#define _ACISPlugin_IExport_HXX_ + +#include "GEOM_Function.hxx" + +#define EXPORTACIS_ARG_ORIGINAL 1 +#define EXPORTACIS_ARG_FILENAME 2 + +class ACISPlugin_IExport +{ +public: + ACISPlugin_IExport( Handle(GEOM_Function) theFunction ) + : _func(theFunction) {} + + void SetOriginal( Handle( GEOM_Function ) theOriginal) + { _func->SetReference( EXPORTACIS_ARG_ORIGINAL, theOriginal ); } + Handle( GEOM_Function ) GetOriginal() + { return _func->GetReference( EXPORTACIS_ARG_ORIGINAL ); } + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( EXPORTACIS_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( EXPORTACIS_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _ACISPlugin_IExport_HXX_ diff --git a/src/ACISPlugin_IImport.hxx b/src/ACISPlugin_IImport.hxx new file mode 100644 index 0000000..79c4d77 --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_IImport_HXX_ +#define _ACISPlugin_IImport_HXX_ + +#include "GEOM_Function.hxx" + +#define IMPORTACIS_ARG_FILENAME 1 + +class ACISPlugin_IImport +{ +public: + ACISPlugin_IImport( Handle(GEOM_Function) theFunction) + : _func(theFunction) {} + + void SetFileName( const TCollection_AsciiString& theFileName ) + { _func->SetString( IMPORTACIS_ARG_FILENAME, theFileName ); } + TCollection_AsciiString GetFileName() + { return _func->GetString( IMPORTACIS_ARG_FILENAME ); } + +private: + Handle(GEOM_Function) _func; +}; + +#endif // _ACISPlugin_IImport_HXX_ diff --git a/src/ACISPlugin_IOperations.cxx b/src/ACISPlugin_IOperations.cxx new file mode 100644 index 0000000..051b085 --- /dev/null +++ b/src/ACISPlugin_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 "ACISPlugin_IOperations.hxx" +#include "ACISPlugin_ExportDriver.hxx" +#include "ACISPlugin_ImportDriver.hxx" +#include "ACISPlugin_IExport.hxx" +#include "ACISPlugin_IImport.hxx" + +// KERNEL includes +#include + +// GEOM includes +#include +#include + +#include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC + +//============================================================================= +/*! + * Constructor + */ +//============================================================================= +ACISPlugin_IOperations::ACISPlugin_IOperations( GEOM_Engine* theEngine, int theDocID ) +: GEOMImpl_IBaseIEOperations( theEngine, theDocID ) +{ + MESSAGE( "ACISPlugin_IOperations::ACISPlugin_IOperations" ); +} + +//============================================================================= +/*! + * Destructor + */ +//============================================================================= +ACISPlugin_IOperations::~ACISPlugin_IOperations() +{ + MESSAGE( "ACISPlugin_IOperations::~ACISPlugin_IOperations" ); +} + +//============================================================================= +/*! + * ExportACIS + * Export a shape to ACIS 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 ACISPlugin_IOperations::ExportACIS( 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( ACISPlugin_ExportDriver::GetID(), EXPORT_SHAPE ); + if( aFunction.IsNull() ) return; + + //Check if the function is set correctly + if( aFunction->GetDriverGUID() != ACISPlugin_ExportDriver::GetID() ) return; + + //Set parameters + ACISPlugin_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.ExportACIS(" << theOriginal << ", \"" + << theFileName.ToCString() << "\" )"; + + SetErrorCode(OK); +} + +//============================================================================= +/*! + * ImportACIS + * Import a shape from ACIS 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) +ACISPlugin_IOperations::ImportACIS( 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( ACISPlugin_ImportDriver::GetID(), IMPORT_SHAPE); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != ACISPlugin_ImportDriver::GetID()) return NULL; + + //Set parameters + ACISPlugin_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.ImportACIS(\"" << theFileName.ToCString() << "\" )"; + SetErrorCode(OK); + + return aSeq; +} diff --git a/src/ACISPlugin_IOperations.hxx b/src/ACISPlugin_IOperations.hxx new file mode 100644 index 0000000..9a6c367 --- /dev/null +++ b/src/ACISPlugin_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 : ACISPlugin_IOperations.hxx + +#ifndef _ACISPlugin_IOperations_HXX_ +#define _ACISPlugin_IOperations_HXX_ + +// GEOM includes +#include + +class ACISPlugin_IOperations: public GEOMImpl_IBaseIEOperations +{ +public: + Standard_EXPORT ACISPlugin_IOperations( GEOM_Engine*, int ); + Standard_EXPORT ~ACISPlugin_IOperations(); + + Standard_EXPORT void ExportACIS( const Handle(GEOM_Object), + const TCollection_AsciiString& ); + + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) ImportACIS( const TCollection_AsciiString& ); +}; + +#endif diff --git a/src/ACISPlugin_ImportDlg.cxx b/src/ACISPlugin_ImportDlg.cxx new file mode 100644 index 0000000..79e5000 --- /dev/null +++ b/src/ACISPlugin_ImportDlg.cxx @@ -0,0 +1,173 @@ +// 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 "ACISPlugin_ImportDlg.h" +#include "ACISPlugin_Operations_i.hh" + +// GUI includes +#include +#include +#include +#include +#include +#include + +// GEOM includes +#include +#include +#include + +//================================================================================= +// Constructor +//================================================================================= +ACISPlugin_ImportDlg::ACISPlugin_ImportDlg( QWidget* parent ) +: SUIT_FileDlg( parent, true, true, true ), + GEOMBase_Helper( dynamic_cast( parent ) ) +{ + setWindowTitle( tr( "ACISPLUGIN_IMPORT_TITLE" ) ); + setAcceptMode( AcceptOpen ); + setNameFilter( tr( "ACISPLUGIN_ACIS_FILES" ) ); + setFileMode( QFileDialog::ExistingFiles ); +} + +//================================================================================= +// Destructor +//================================================================================= +ACISPlugin_ImportDlg::~ACISPlugin_ImportDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr ACISPlugin_ImportDlg::createOperation() +{ + return getGeomEngine()->GetPluginOperations(getStudyId(), "ACISPluginEngine"); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool ACISPlugin_ImportDlg::isValid (QString& msg) +{ + bool ok = true; + //@@ add custom validation actions here @@// + return ok; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool ACISPlugin_ImportDlg::execute( ObjectList& objects ) +{ + bool res = false; + GEOM::GEOM_Object_var anObj; + ACISPlugin::GEOM_IACISPluginOperations_var anOper = ACISPlugin::GEOM_IACISPluginOperations::_narrow( getOperation() ); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + _PTR(Study) aStudy = dynamic_cast ( app->activeStudy() )->studyDS(); + SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy ); + + QStringList fileNames = selectedFiles(); + if ( fileNames.count() == 0 ) + return false; // nothing selected, return + + SUIT_MessageBox::StandardButton acisAnswer = SUIT_MessageBox::NoButton; + + 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(); + + if ( acisAnswer != SUIT_MessageBox::YesToAll && acisAnswer != SUIT_MessageBox::NoToAll ) { + SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; + if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; + acisAnswer = SUIT_MessageBox::question( app->desktop(), + "Question",//tr("WRN_WARNING"), + tr("GEOM_PUBLISH_NAMED_SHAPES"), + btns | SUIT_MessageBox::Cancel, + SUIT_MessageBox::No ); + if ( acisAnswer == SUIT_MessageBox::Cancel ) { + anOper->SetErrorCode(OK); + return true; // cancel (break) import operation + } + } + + GEOM::ListOfGO_var anObj = anOper->ImportACIS( 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( aFileName, /*withExten=*/true ) ); + anObjPtr->SetName( aPublishObjName.toStdString().c_str() ); + + SALOMEDS::SObject_var aSO = + GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy, + SALOMEDS::SObject::_nil(), + anObjPtr, + aPublishObjName.toLatin1().constData() ); + if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll ) + GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, anObjPtr ); + + 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 ACISPlugin_ImportDlg::accept() +{ + SUIT_FileDlg::accept(); + onAccept( false ); +} + +//================================================================================= +// function : getObjectName +// purpose : +//================================================================================= +QString ACISPlugin_ImportDlg::getObjectName( GEOM::GEOM_Object_ptr object ) const +{ + if( object->_is_nil() ) + return QString::null; + return object->GetName(); +} diff --git a/src/ACISPlugin_ImportDlg.h b/src/ACISPlugin_ImportDlg.h new file mode 100644 index 0000000..c1583ac --- /dev/null +++ b/src/ACISPlugin_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 ACISPlugin_IMPORTDLG_H +#define ACISPlugin_IMPORTDLG_H + +// GUI includes +#include + +// GEOM includes +#include +#include + +class ACISPlugin_ImportDlg: public SUIT_FileDlg, public GEOMBase_Helper +{ + Q_OBJECT + +public: + ACISPlugin_ImportDlg( QWidget* = 0 ); + ~ACISPlugin_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 // ACISPlugin_IMPORTDLG_H diff --git a/src/ACISPlugin_ImportDriver.hxx b/src/ACISPlugin_ImportDriver.hxx new file mode 100644 index 0000000..120db15 --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_ImportDriver_HXX +#define _ACISPlugin_ImportDriver_HXX + +// GEOM includes +#include + +// OCCT includes +#ifndef _TFunction_Logbook_HeaderFile +#include +#endif + +DEFINE_STANDARD_HANDLE( ACISPlugin_ImportDriver, GEOM_BaseDriver ); + +class ACISPlugin_ImportDriver : public GEOM_BaseDriver +{ +public: + Standard_EXPORT ACISPlugin_ImportDriver(); + Standard_EXPORT ~ACISPlugin_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( ACISPlugin_ImportDriver ) +}; + +#endif // _ACISPlugin_ImportDriver_HXX diff --git a/src/ACISPlugin_OperationsCreator.cc b/src/ACISPlugin_OperationsCreator.cc new file mode 100644 index 0000000..95d01fe --- /dev/null +++ b/src/ACISPlugin_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 "ACISPlugin_OperationsCreator.hh" +#include "ACISPlugin_Operations_i.hh" +#include "ACISPlugin_ExportDriver.hxx" +#include "ACISPlugin_ImportDriver.hxx" +#include "ACISPlugin_IECallBack.hxx" + +// KERNEL includes +#include +#include + +// GEOM includes +#include + +// OCCT includes +#include + +//============================================================================ +// function : Create +// purpose : +//============================================================================ +GEOM_IOperations_i* ACISPlugin_OperationsCreator::Create( PortableServer::POA_ptr thePOA, + int theStudyId, + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_Gen* theGenImpl ) +{ + Unexpect aCatch( SALOME_SalomeException ); + MESSAGE( "ACISPlugin_OperationsCreator::Create" ); + + if (_mapOfOperations.find( theStudyId ) == _mapOfOperations.end() ) { + ACISPlugin_IOperations* anOper = new ACISPlugin_IOperations( theGenImpl, theStudyId ); + _mapOfOperations[theStudyId] = anOper; + + // Import/Export ACIS + TFunction_DriverTable::Get()->AddDriver( ACISPlugin_ExportDriver::GetID(), + new ACISPlugin_ExportDriver() ); + TFunction_DriverTable::Get()->AddDriver( ACISPlugin_ImportDriver::GetID(), + new ACISPlugin_ImportDriver() ); + + ACISPlugin_IECallBack* ACISCallBack = new ACISPlugin_IECallBack( anOper ); + GEOMImpl_IECallBack::Register( "ACIS", ACISCallBack ); + } + + ACISPlugin_Operations_i* aServant = + new ACISPlugin_Operations_i( thePOA, theEngine, _mapOfOperations[theStudyId] ); + + return aServant; +} diff --git a/src/ACISPlugin_OperationsCreator.hh b/src/ACISPlugin_OperationsCreator.hh new file mode 100755 index 0000000..1d803d8 --- /dev/null +++ b/src/ACISPlugin_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_ACISPlugin_OperationsCreator_HXX_ +#define _GEOM_ACISPlugin_OperationsCreator_HXX_ + +// internal includes +#include "ACISPlugin_Engine.hxx" +#include "ACISPlugin_IOperations.hxx" + +// GEOM includes +#include "GEOM_Gen_i.hh" + +// C++ includes +#include + +//===================================================================== +// Operations creator +//===================================================================== +class ACISPLUGINENGINE_EXPORT ACISPlugin_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/ACISPlugin_Operations_i.cc b/src/ACISPlugin_Operations_i.cc new file mode 100644 index 0000000..34d14cc --- /dev/null +++ b/src/ACISPlugin_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 "ACISPlugin_Operations_i.hh" +#include + +// KERNEL includes +#include + +//============================================================================= +/*! + * constructor: + */ +//============================================================================= +ACISPlugin_Operations_i::ACISPlugin_Operations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + ::ACISPlugin_IOperations* theImpl ) +:GEOM_IOperations_i( thePOA, theEngine, theImpl ) +{ + MESSAGE( "ACISPlugin_Operations_i::ACISPlugin_Operations_i" ); +} + +//============================================================================= +/*! + * destructor + */ +//============================================================================= +ACISPlugin_Operations_i::~ACISPlugin_Operations_i() +{ + MESSAGE( "ACISPlugin_Operations_i::~ACISPlugin_Operations_i" ); +} + +//============================================================================= +/*! + * ExportACIS + * Export a shape to ACIS format + * \param theOriginal The shape to export + * \param theFileName The name of the exported file + */ +//============================================================================= +void ACISPlugin_Operations_i::ExportACIS( 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()->ExportACIS( anOriginal, aFileName ); + free( aFileName ); +} + +//============================================================================= +/*! + * ImportACIS + * Import a shape from ACIS format + * \param theFileName The name of the file to import + * \return List of GEOM_Objects, containing the created shape and propagation groups. + */ +//============================================================================= +GEOM::ListOfGO* ACISPlugin_Operations_i::ImportACIS( 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()->ImportACIS( 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 ACISPlugin_Operations_i::GetVersion() +{ + return ACISPLUGIN_VERSION; +} +//============================================================================= +/*! + * \brief Get version of the plugin. + * \return the string representation of the plugin's version +*/ +//============================================================================= + +char* ACISPlugin_Operations_i::GetVersionStr() +{ + return (char*)ACISPLUGIN_VERSION_STR; +} diff --git a/src/ACISPlugin_Operations_i.hh b/src/ACISPlugin_Operations_i.hh new file mode 100644 index 0000000..bb378ea --- /dev/null +++ b/src/ACISPlugin_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 _ACISPlugin_Operations_i_HeaderFile +#define _ACISPlugin_Operations_i_HeaderFile + +// idl includes +#include +#include CORBA_SERVER_HEADER( GEOM_Gen ) +#include CORBA_SERVER_HEADER( ACISPlugin_Gen ) + +// internal includes +#include "ACISPlugin_Engine.hxx" +#include "ACISPlugin_IOperations.hxx" + +// GEOM includes +#include + +class ACISPLUGINENGINE_EXPORT ACISPlugin_Operations_i : + public virtual POA_ACISPlugin::GEOM_IACISPluginOperations, + public virtual GEOM_IOperations_i +{ +public: + ACISPlugin_Operations_i( PortableServer::POA_ptr thePOA, + GEOM::GEOM_Gen_ptr theEngine, + ::ACISPlugin_IOperations* theImpl ); + ~ACISPlugin_Operations_i(); + + void ExportACIS( GEOM::GEOM_Object_ptr, const char* ); + GEOM::ListOfGO* ImportACIS( const char* ); + + // Version information + virtual int GetVersion(); + virtual char* GetVersionStr(); + + ::ACISPlugin_IOperations* GetOperations() + { return (::ACISPlugin_IOperations*)GetImpl(); } +}; + +#endif diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..11efe78 --- /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 +# + +# ACISPLUGIN : binding of C++ implementation with Python +# File : __init__.py +# diff --git a/src/resources/ACISPlugin_msg_en.ts b/src/resources/ACISPlugin_msg_en.ts new file mode 100644 index 0000000..523c0db --- /dev/null +++ b/src/resources/ACISPlugin_msg_en.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTACIS + ACIS + + + TOP_EXPORTACIS + Export ACIS + + + STB_EXPORTACIS + Export ACIS + + + MEN_IMPORTACIS + ACIS + + + TOP_IMPORTACIS + Import ACIS + + + STB_IMPORTACIS + Import ACIS + + + ACISPLUGIN_ACIS_FILES + ACIS files( *.sat ) + + + + ACISPlugin_ExportDlg + + ACISPLUGIN_EXPORT_TITLE + Export ACIS + + + + ACISPlugin_ImportDlg + + ACISPLUGIN_IMPORT_TITLE + Import ACIS + + + diff --git a/src/resources/ACISPlugin_msg_fr.ts b/src/resources/ACISPlugin_msg_fr.ts new file mode 100644 index 0000000..d6f7345 --- /dev/null +++ b/src/resources/ACISPlugin_msg_fr.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTACIS + ACIS + + + TOP_EXPORTACIS + Exporter ACIS + + + STB_EXPORTACIS + Exporter ACIS + + + MEN_IMPORTACIS + ACIS + + + TOP_IMPORTACIS + Importer ACIS + + + STB_IMPORTACIS + Importer ACIS + + + ACISPLUGIN_ACIS_FILES + ACIS Fichiers( *.sat ) + + + + ACISPlugin_ExportDlg + + ACISPLUGIN_EXPORT_TITLE + Exporter ACIS + + + + ACISPlugin_ImportDlg + + ACISPLUGIN_IMPORT_TITLE + Importer ACIS + + + \ No newline at end of file diff --git a/src/resources/ACISPlugin_msg_ja.ts b/src/resources/ACISPlugin_msg_ja.ts new file mode 100644 index 0000000..8b1b675 --- /dev/null +++ b/src/resources/ACISPlugin_msg_ja.ts @@ -0,0 +1,49 @@ + + + + + @default + + MEN_EXPORTACIS + ACIS + + + TOP_EXPORTACIS + Export ACIS + + + STB_EXPORTACIS + Export ACIS + + + MEN_IMPORTACIS + ACIS + + + TOP_IMPORTACIS + Import ACIS + + + STB_IMPORTACIS + Import ACIS + + + ACISPLUGIN_ACIS_FILES + ACIS files( *.sat ) + + + + ACISPlugin_ExportDlg + + ACISPLUGIN_EXPORT_TITLE + Export ACIS + + + + ACISPlugin_ImportDlg + + ACISPLUGIN_IMPORT_TITLE + Import ACIS + + + \ No newline at end of file -- 2.39.2