Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


devel:vtk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
devel:vtk [2015/02/24 11:22] wauteletdevel:vtk [2017/05/15 11:55] (current) – removed boman
Line 1: Line 1:
-====== Compiler VTK pour Metafor ====== 
- 
-memo comment compiler vtk (5.10.1) pour les Libs  
- 
- 
-===== Windows : Release & Debug / Wrapper vtk-python (r&d) / Luc (version 140109) ===== 
- 
-   * Détarer les sources : VTK\vtk-5.10.1 
-   * Créer le répertoire de compilation : VTK\VTKBuild 
-   * Modifier les sources VTK :  
-     * VTK Debug : ajout du postfix "_d" aux DLL's : modifier "VTK\vtk-5.10.1\CMakeLists.txt ligne 107"  
- 
-<code> 
-  # Append the library version information to the library target 
-  # properties.  A parent project may set its own properties and/or may 
-  # block this. 
-  IF(NOT VTK_NO_LIBRARY_VERSION) 
-    SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES} 
-      VERSION "${VTK_VERSION}" 
-      SOVERSION "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" 
-      )     
-     ENDIF(NOT VTK_NO_LIBRARY_VERSION) 
- 
-  SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES} DEBUG_POSTFIX _d ) 
-</code> 
-  
-      * Wrappers Python debug : postfix "_d" aux "pyd" : "VTK\vtk-5.10.1\Cmake\KitCommonPythonWrapBlock.cmake" 
-<code> 
-  # Python extension modules on Windows must have the extension ".pyd" 
-  # instead of ".dll" as of Python 2.5.  Older python versions do support 
-  # this suffix. 
-  IF(WIN32 AND NOT CYGWIN) 
-    SET_TARGET_PROPERTIES(vtk${KIT}Python PROPERTIES SUFFIX ".pyd") 
-    SET_TARGET_PROPERTIES(vtk${KIT}Python PROPERTIES DEBUG_POSTFIX "_d") 
-  ENDIF(WIN32 AND NOT CYGWIN) 
-</code> 
- 
-  * installation des wrappers python_d : modifier VTK\vtk-5.10.1\Wrapping\Python\setup.py.in             
- 
-lignes 85-100 : 
-<code> 
-  def get_libs(): 
-      """Returns a list of libraries to be installed.  """ 
-      libs = [] 
- 
-      # Select platform-specific components of the module file names. 
-      if os.name == 'posix': 
-          dir = vtk_lib_dir 
-          prefix = 'vtk' 
-          suffix = get_config_var('SO') 
-      else: 
-          dir = vtk_bin_dir.replace('/', '\\') 
-          prefix = 'vtk' 
-          if vtk_build_type == 'Debug': 
-              suffix = '_d.pyd' 
-          else: 
-              suffix = '.pyd' 
-</code> 
- 
-  * patcher vtktclutil.cxx pour utilisation tcltk8.6: 
-http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sci-libs/vtk/files/vtk-5.10.1-tcl8.6.patch 
-    "/VTK/vtk-5.10.1/Common/vtkTclUtil.cxx" 
-<code> 
-ligne 21 - 24 : 
-  #include <string> 
-  #include <vtksys/SystemTools.hxx> 
- 
-  extern "C" 
- 
-devient 21-30 :  
-  #include <string> 
-  #include <vtksys/SystemTools.hxx> 
- 
-  #if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION < 6) 
-  #define vtkTclGetErrorLine(m) (m->errorLine) 
-  #else 
-  #define vtkTclGetErrorLine(m) (Tcl_GetErrorLine(m)) 
-  #endif 
- 
-  extern "C" 
- 
-ligne 488-500 : 
-    if (Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0) << 
-                             " at line number " << arg2->interp->errorLine); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             " at line number " << arg2->interp->errorLine); 
-      } 
-       
-devient 494-506: 
- 
-    if (Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0) << 
-                             " at line number " << vtkTclGetErrorLine(arg2->interp)); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             " at line number " << vtkTclGetErrorLine(arg2->interp)); 
-      } 
-  
-ligne 721-732 :  
-    if (Tcl_GetVar(this->Interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << this->Interp->errorLine); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             " at line number " << this->Interp->errorLine); 
-      } 
-    } 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << this->Interp->errorLine); 
-devient 727-739: 
-    if (Tcl_GetVar(this->Interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << vtkTclGetErrorLine(this->Interp)); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             " at line number " <<  vtkTclGetErrorLine(this->Interp)); 
-      } 
-    }             
-</code>     
- 
-  * Executer CMake : modifier les options suivante  
-     * BUILD_SHARED_LIBS : ON 
-     * CMAKE_INSTALL_PREFIX : ''../VTKInstall'' (attention "../" pas "..\") 
-     * CMAKE_CXX_MP_FLAG : ON (permet de compiler en parallele en local) 
-     * VTK_DEBUG_LEAKS : OFF (pour une version à distribuer, peut-être ON pour developpement) 
-     * VTK_USE_GL2PS : ON (advanced option) 
-     * VTK_USE_QT : ON 
-     * VTK_WRAP_PYTHON : ON 
-     * VTK_WRAP_TCL : ON 
-     * Les autres options doivent "suivre" : (qt (definir qmake suffit généralement), python (PYTHON_DEBUG_LIBRARY, PYTHON_LIBRARY, PYTHON_EXECUTABLE, PYTHON_INCLUDE_DIR),  tcl/tk (include, lib, exe)) 
- 
- 
-   * Compiler ALL_BUILD (Debug) (Commencer par debug) 
-   * Installer  
-   * Compiler ALL_BUILD (Release) 
-   * Installer  
- 
-<note warning> Attention : certains fichiers debug seront écrasés par leur version release, mais normalement c'est les même ... raison pour laquelle on démarre par la version debug </note> 
- 
-<note important> 
-Lors de la génération de l'installer en Release et en Debug, il est normal d'observer ce message d'erreur. Ce sera fixé plus tard lors du setup python. 
-<code>  
-running install 
-  
-Checking .pth file support in ..\VTKINSTALL\Lib\site-packages\ 
-21>   
-21>  F:\LibsVS2012\Python\bin\pythonw.exe -E -c pass 
-21>   
-21>  TEST FAILED: ..\VTKINSTALL\Lib\site-packages\ does NOT support .pth files 
-21>   
-21>EXEC : error : bad install directory or PYTHONPATH 
-21>   
-21>   
-21>   
-21>  You are attempting to install a package to a directory that is not 
-21>   
-21>  on PYTHONPATH and which Python does not read ".pth" files from.  The 
-21>   
-21>  installation directory you specified (via --install-dir, --prefix, or 
-21>   
-21>  the distutils default setting) was: 
-21>   
-21>   
-21>   
-21>      ..\VTKINSTALL\Lib\site-packages\ 
-21>   
-21>   
-21>   
-21>  and your PYTHONPATH environment variable currently contains: 
-21>   
-21>   
-21>   
-21>      '' 
-21>   
-21>   
-21>   
-21>  Here are some of your options for correcting the problem: 
-21>   
-21>   
-21>   
-21>  * You can choose a different installation directory, i.e., one that is 
-21>   
-21>    on PYTHONPATH or supports .pth files 
-21>   
-21>   
-21>   
-21>  * You can add the installation directory to the PYTHONPATH environment 
-21>   
-21>    variable.  (It must then also be on PYTHONPATH whenever you run 
-21>   
-21>    Python and want to use the package(s) you are installing.) 
-21>   
-21>   
-21>   
-21>  * You can set up the installation directory to support ".pth" files by 
-21>   
-21>    using one of the approaches described here: 
-21>   
-21>   
-21>   
-21>    https://pythonhosted.org/setuptools/easy_install.html#custom-installation-locations 
-21>   
-21>   
-21>   
-21>  Please make the appropriate changes for your system and try again.  
-</code>  
-</note> 
- 
-   * Modifier les chemins relatifs des librairies en variables d'environnement : VTK conserve les chemins absolus vers les librairies utilisées lors de la compilation (qt, ...) ce qui est incompatible avec les Libs déplaçables. 
-     * remplacer le lieu d'installation ''E:\Dev64\...'' par ''$ENV{METAFORLIBS}'' dans les fichiers :  
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKConfig.cmake'' 
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKConfigQt.cmake'' 
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKTargets-release.cmake'' 
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKTargets-debug.cmake'' 
-     * idem pour les chemins vers tcl/tk,  
-       * ''$ENV{METAFORLIBS}/TclTk-8.5.15/...'' 
-     * includes de  vtk_freetype,  vtk_libproj4, vtk_dhf5 dans les même fichiers 
-       * ''SET(VTK_FREETYPE_INCLUDE_DIR "$ENV{METAFORLIBS}/Vtk-5.10.1_tcltk85/include/vtk-5.10/vtkfreetype/include")'' 
-       * ''SET(VTK_LIBPROJ4_INCLUDE_DIR "$ENV{METAFORLIBS}/Vtk-5.10.1_tcltk85/include/vtk-5.10/vtklibproj4")'' 
-       * ''SET(VTK_HDF5_INCLUDE_DIR     "$ENV{METAFORLIBS}/Vtk-5.10.1_tcltk85/include/vtk-5.10/vtkhdf5")'' 
-     * enlever les chemins absolu vers "vtkMathConfigure.h" et "vtkConfigure.h" dans  
-        ''VTK\VTKInstall\lib\vtk-5.10.1\vtkCommonKit.cmake)'' 
-     * laisser le chemin absolu dans le fichier VTKConfig.cmake à la ligne 64 : SET(VTK_LOAD_CMAKE_EXTENSIONS_MACRO "F:/CompileVTKBis/VTK5.10.1/CMake/vtkLoadCMakeExtensions.cmake"). 
-   * Copier le répertoire ''VTK\VTKInstall'' dans le répertoire de Libs : ''LibsVS2012\vtk-5.10.1'' 
-   * Installer les wrappers python (crée le répertoire LibsVS2012\Python\Lib\site_packages\VTK-5.10.1-py2.6.egg):  
-       * ouvrir une invite de commande et aller dans ''VTK\VTKBuild\Wrapping\Python''  
-       * ''python setup.py install BUILD_TYPE=Release'' 
-       * ''python_d setup.py install BUILD_TYPE=Debug''           
-       * Vérification: faire un import vtk dans python.exe & dans python_d.exe 
-<note important> 
-Lors de l'installation des wrappers python, il faut faire une copie du dossier vtk (LibsVS2012\Python\Lib\site_packages\VTK-5.10.1-py2.6.egg\vtk) dans un endroit à part sur le disque dur,  après le setup de la version Release. Ensuite, il faut effectuer le setup de la version Debug. Cette opération peut détruire le dossier vtk précédent et dès lors, il suffit de faire une copie du dossier vtk "Release" dans le dossier vtk "Debug" 
-</note> 
- 
- 
-===== Windows : Release & Debug / Wrapper vtk-python (r&d) / Marlène & Luc ===== 
- 
-   * Détarer les sources : VTK\vtk-5.10.1 
-   * Créer le répertoire de compilation : VTK\VTKBuild 
-   * Modifier les sources VTK : link_directories modifier "VTK\vtk-5.10.1\UseVTK.cmake.in"   
-<code> 
-ligne 28-29  : 
-  # Add include directories needed to use VTK. 
-  INCLUDE_DIRECTORIES(${VTK_INCLUDE_DIRS}) 
-devient 28-31:  
-  # Add include directories needed to use VTK. 
-  INCLUDE_DIRECTORIES(${VTK_INCLUDE_DIRS}) 
-  # Add link directories needed to use VTK. 
-  LINK_DIRECTORIES(${VTK_LIBRARY_DIRS})   
-</code> 
- 
-  * VTK Debug : ajout du postfix "_d" aux DLL's : modifier "VTK\vtk-5.10.1\CMakeLists.txt"  
-<code> 
-ligne 95-103 : 
- 
-  # Append the library version information to the library target 
-  # properties.  A parent project may set its own properties and/or may 
-  # block this. 
-  IF(NOT VTK_NO_LIBRARY_VERSION) 
-    SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES} 
-      VERSION "${VTK_VERSION}" 
-      SOVERSION "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" 
-      ) 
-  ENDIF(NOT VTK_NO_LIBRARY_VERSION) 
- 
-devient ligne 95-104: 
- 
-  # Append the library version information to the library target 
-  # properties.  A parent project may set its own properties and/or may 
-  # block this. 
-  IF(NOT VTK_NO_LIBRARY_VERSION) 
-    SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES} 
-      VERSION "${VTK_VERSION}" 
-      SOVERSION "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" 
-      )     
-    SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES} DEBUG_POSTFIX _d ) 
-  ENDIF(NOT VTK_NO_LIBRARY_VERSION) 
-</code> 
- 
-      * Wrappers Python debug : postfix "_d" aux "pyd" : "VTK\vtk-5.10.1\Cmake\KitCommonPythonWrapBlock.cmake" 
-<code> 
-ligne 58-63 
- 
-  # Python extension modules on Windows must have the extension ".pyd" 
-  # instead of ".dll" as of Python 2.5.  Older python versions do support 
-  # this suffix. 
-  IF(WIN32 AND NOT CYGWIN) 
-    SET_TARGET_PROPERTIES(vtk${KIT}Python PROPERTIES SUFFIX ".pyd") 
-  ENDIF(WIN32 AND NOT CYGWIN) 
- 
-devient 58-64: 
- 
-  # Python extension modules on Windows must have the extension ".pyd" 
-  # instead of ".dll" as of Python 2.5.  Older python versions do support 
-  # this suffix. 
-  IF(WIN32 AND NOT CYGWIN) 
-    SET_TARGET_PROPERTIES(vtk${KIT}Python PROPERTIES SUFFIX ".pyd") 
-    SET_TARGET_PROPERTIES(vtk${KIT}Python PROPERTIES DEBUG_POSTFIX "_d") 
-  ENDIF(WIN32 AND NOT CYGWIN) 
-</code> 
- 
-  * installation des wrappers python_d : modifier VTK\vtk-5.10.1\Wrapping\Python\setup.py.in 
-<code> 
-ligne 85-97 : 
- 
-  def get_libs(): 
-      """Returns a list of libraries to be installed.  """ 
-      libs = [] 
-   
-      # Select platform-specific components of the module file names. 
-      if os.name == 'posix': 
-          dir = vtk_lib_dir 
-          prefix = 'vtk' 
-          suffix = get_config_var('SO') 
-      else: 
-          dir = vtk_bin_dir.replace('/', '\\') 
-          prefix = 'vtk' 
-          suffix = '.pyd' 
-                      
-devient 85-100 : 
- 
-  def get_libs(): 
-      """Returns a list of libraries to be installed.  """ 
-      libs = [] 
- 
-      # Select platform-specific components of the module file names. 
-      if os.name == 'posix': 
-          dir = vtk_lib_dir 
-          prefix = 'vtk' 
-          suffix = get_config_var('SO') 
-      else: 
-          dir = vtk_bin_dir.replace('/', '\\') 
-          prefix = 'vtk' 
-          if vtk_build_type == 'Debug': 
-              suffix = '_d.pyd' 
-          else: 
-              suffix = '.pyd' 
- 
-</code> 
-  * patcher vtktclutil.cxx pour utilisation tcltk8.6: 
-http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sci-libs/vtk/files/vtk-5.10.1-tcl8.6.patch 
-    "/VTK/vtk-5.10.1/Common/vtkTclUtil.cxx" 
-<code> 
-ligne 21 - 24 : 
-  #include <string> 
-  #include <vtksys/SystemTools.hxx> 
- 
-  extern "C" 
- 
-devient 21-30 :  
-  #include <string> 
-  #include <vtksys/SystemTools.hxx> 
- 
-  #if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION < 6) 
-  #define vtkTclGetErrorLine(m) (m->errorLine) 
-  #else 
-  #define vtkTclGetErrorLine(m) (Tcl_GetErrorLine(m)) 
-  #endif 
- 
-  extern "C" 
- 
-ligne 488-500 : 
-    if (Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0) << 
-                             " at line number " << arg2->interp->errorLine); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             " at line number " << arg2->interp->errorLine); 
-      } 
-       
-devient 494-506: 
- 
-    if (Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             Tcl_GetVar(arg2->interp,(char *)("errorInfo"),0) << 
-                             " at line number " << vtkTclGetErrorLine(arg2->interp)); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             arg2->command << endl << 
-                             " at line number " << vtkTclGetErrorLine(arg2->interp)); 
-      } 
-  
-ligne 721-732 :  
-    if (Tcl_GetVar(this->Interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << this->Interp->errorLine); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             " at line number " << this->Interp->errorLine); 
-      } 
-    } 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << this->Interp->errorLine); 
-devient 727-739: 
-    if (Tcl_GetVar(this->Interp,(char *)("errorInfo"),0)) 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             Tcl_GetVar(this->Interp,(char *)("errorInfo"),0) << 
-                             " at line number " << vtkTclGetErrorLine(this->Interp)); 
-      } 
-    else 
-      { 
-      vtkGenericWarningMacro("Error returned from vtk/tcl callback:\n" << 
-                             this->StringCommand << endl << 
-                             " at line number " <<  vtkTclGetErrorLine(this->Interp)); 
-      } 
-    }             
-</code>     
- 
-  * Executer CMake : modifier les options suivante  
-     * BUILD_SHARED_LIBS : ON 
-     * CMAKE_INSTALL_PREFIX : ''../VTKInstall'' (attention "../" pas "..\") 
-     * CMAKE_CXX_MP_FLAG : ON (permet de compiler en parallele en local) 
-     * VTK_DEBUG_LEAKS : OFF (pour une version à distribuer, peut-être ON pour developpement) 
-     * VTK_USE_GL2PS : ON (advanced option) 
-     * VTK_USE_QT : ON 
-     * VTK_WRAP_PYTHON : ON 
-     * VTK_WRAP_TCL : ON 
-     * Les autres options doivent "suivre" : (qt (definir qmake suffit généralement), python (Include, lib, libdebug),  tcl/tk (include, lib, exe)) 
- 
- 
-   * Compiler ALL_BUILD (Debug) (Commencer par debug) 
-   * Installer  
-   * Compiler ALL_BUILD (Release) 
-   * Installer  
- 
-<note warning> Attention : certains fichiers debug seront écrasés par leur version release, mais normalement c'est les même ... raison pour laquelle on démarre par la version debug </note> 
- 
- 
-   * Modifier les chemins relatifs des librairies en variables d'environnement : VTK conserve les chemins absolus vers les librairies utilisées lors de la compilation (qt, ...) ce qui est incompatible avec les Libs déplaçables. 
-     * remplacer ''\VTK\VTKInstall'' par ''$ENV{METAFORLIBS}'' dans les fichiers :  
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKConfig.cmake'' 
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKConfigQt.cmake'' 
-       * ''VTK\VTKInstall\lib\vtk-5.10.1\VTKTargets-release.cmake'' 
-   * Copier le répertoire ''VTK\VTKInstall'' dans le répertoire de Libs : ''LibsVS2012\vtk-5.10.1'' 
-   * Installer les wrappers python (crée le répertoire LibsVS2012\Python\Lib\site_packages\VTK-5.10.1-py2.6.egg):  
-       * ouvrir une invite de commande et aller dans ''VTK\VTKBuild\Wrapping\Python''  
-       * ''python setup.py install BUILD_TYPE=Release'' 
-       * ''python setup.py install BUILD_TYPE=Debug''           
-       * Vérification: faire un import vtk dans python.exe & dans python_d.exe 
  
devel/vtk.1424773379.txt.gz · Last modified: 2016/03/30 15:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki