diff --git a/CMakeLists.txt b/CMakeLists.txt index 11273322898c5b58a7922c8fecf716bfee42b954..d38e06c3e7725263375a16abab15afe881254c92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,14 +67,15 @@ endif() # SWIG option(${PROJECT_NAME}_WRAP_CSHARP "Build iMSTK-C# wrapper code and lib" OFF) +option(${PROJECT_NAME}_SWIG_PINNED_ARRAY "Managed C# arrays using pinning" ON) +mark_as_advanced(${PROJECT_NAME}_SWIG_PINNED_ARRAY) if (${PROJECT_NAME}_WRAP_CSHARP) find_package(SWIG REQUIRED) set(CMAKE_POSITION_INDEPENDENT_CODE ON) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - set(CMAKE_SWIG_FLAGS "") - set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_SOURCE_DIR}/newton_out) + set(cmAKE_SWIG_FLAGS "") endif() # CUDA diff --git a/Source/CSWrapper/CMakeLists.txt b/Source/CSWrapper/CMakeLists.txt index 521a10b1dc785f4813bcc71aee7160888c4f9302..fd4eed26f35d49f14df5d6ff86d1608d06788a9c 100644 --- a/Source/CSWrapper/CMakeLists.txt +++ b/Source/CSWrapper/CMakeLists.txt @@ -10,6 +10,9 @@ swig_add_library(iMSTKCWrapper SOURCES imstkCWrapper.i) set_target_properties(iMSTKCWrapper PROPERTIES SWIG_COMPILE_OPTIONS "-namespace;imstk") +if(iMSTK_SWIG_PINNED_ARRAY) + set_target_properties(iMSTKCWrapper PROPERTIES SWIG_COMPILE_DEFINITIONS "SWIG_PINNED_ARRAY") +endif() if(iMSTK_USE_OpenHaptics) set_target_properties(iMSTKCWrapper PROPERTIES SWIG_COMPILE_DEFINITIONS "iMSTK_USE_OpenHaptics") target_compile_definitions(iMSTKCWrapper PRIVATE iMSTK_USE_OpenHaptics) diff --git a/Source/CSWrapper/ignored.i b/Source/CSWrapper/ignored.i index 7f846fd543b991fda6f43416a5d17cb3e83f17fd..4f30dc2f8e4157e93ee9a0709e03d4eaa10ebb02 100644 --- a/Source/CSWrapper/ignored.i +++ b/Source/CSWrapper/ignored.i @@ -17,6 +17,7 @@ %ignore imstk::VecDataArray::cbegin() const; /* fix the multiple-definition problem. */ %ignore imstk::VecDataArray::end(); /* fix the multiple-definition problem. */ %ignore imstk::VecDataArray::cend() const; /* fix the multiple-definition problem. */ +%ignore imstk::VecDataArray::setData(); %ignore imstk::stdSink; %ignore imstk::LogManager; %ignore imstk::Logger::Logger(); diff --git a/Source/CSWrapper/imstkCWrapper.i b/Source/CSWrapper/imstkCWrapper.i index 13168ec1eb188b68707f477099d510ab552280a6..59400fbacb3d5809109891709a31bbd99682112e 100644 --- a/Source/CSWrapper/imstkCWrapper.i +++ b/Source/CSWrapper/imstkCWrapper.i @@ -186,16 +186,32 @@ namespace std { %template(ModuleDriverWeakPtr) std::weak_ptr<imstk::ModuleDriver>; %template(SimulationManagerWeakPtr) std::weak_ptr<imstk::SimulationManager>; +#ifdef SWIG_PINNED_ARRAY + %csmethodmodifiers imstk::VecDataArray::setValues "public unsafe"; + %csmethodmodifiers imstk::VecDataArray::getValues "public unsafe"; +#endif + %include "cpointer.i" %include "arrays_csharp.i" -%apply unsigned char INPUT[] {const unsigned char* val} -%apply int INPUT[] {const int* val} -%apply float INPUT[] {const float * val} -%apply double INPUT[] {const double* val} -%apply unsigned char OUTPUT[] {unsigned char* val} -%apply int OUTPUT[] {int* val} -%apply float OUTPUT[] {float * val} -%apply double OUTPUT[] {double* val} +#ifdef SWIG_PINNED_ARRAY + %apply unsigned char FIXED[] {unsigned char* val} + %apply unsigned char FIXED[] {const unsigned char* val} + %apply int FIXED[] {int* val} + %apply int FIXED[] {const int* val} + %apply float FIXED[] {float * val} + %apply float FIXED[] {const float * val} + %apply double FIXED[] {double* val} + %apply double FIXED[] {const double* val} +#else + %apply unsigned char INPUT[] {const unsigned char* val} + %apply unsigned char OUTPUT[] {unsigned char* val} + %apply int INPUT[] {const int* val} + %apply int OUTPUT[] {int* val} + %apply float INPUT[] {const float * val} + %apply float OUTPUT[] {float * val} + %apply double INPUT[] {const double* val} + %apply double OUTPUT[] {double* val} +#endif %include "ignored.i" %include "modifiers.i" %include "type_cast.i"