Skip to main content

This Python API provides a high-level interface to interact with the NDTkit desktop application. It allows developers to script and automate NDTkit features remotely, leveraging the full power of the underlying Java application through a simple and pythonic library.

Project description

NDTkit Python API

Python API for NDTkit License

This Python API provides a high-level interface to interact with the NDTkit desktop application. It allows developers to script and automate NDTkit features remotely, leveraging the full power of the underlying Java application through a simple and pythonic library.

📋 Prerequisites

Before using this API, you must have:

  1. Python 3.11+ installed.
  2. The NDTkit 4.1+ installed.
  3. [OPTIONAL] For developers that want to add user interface directly in NDTkit (side panel or new menu), Open JDK 21 must be installed.

⬇️ Installation & Configuration

  1. Install the library
pip install ndtkit-api
  1. Configure the connection: This library needs to connect to NDTkit's socket server. No change is needed unless you explicitly changed the NDTkit's socket server configuration. If the NDTkit software needs to be launched from this library, set NDTKIT_FILEPATH, this will automatically launch NDTkit if no socket server is detected. Here is an example on how to configure these variables:

    from ndtkit_api.config import config
    
    config.SERVER_HOST = "127.0.0.1"          # default value
    config.SERVER_PORT = 32146                # default value
    config.SERVER_CONNECTION_TIMEOUT = 120    # default value
    config.NDTKIT_FILEPATH = "C:/Users/admin/NDTkit/NDTkit.vbs"
    
    • SERVER_HOST: The IP address of the machine running NDTkit. Use 127.0.0.1 if it's on the same machine.
    • SERVER_PORT: The port for the socket communication. This must match the port of the NDTkit socket server.
    • SERVER_CONNECTION_TIMEOUT: After this timeout (in seconds), the API will stop attempting to connect to NDTkit's socket server.
    • NDTKIT_FILEPATH: Your Python source code will try to launch NDTkit, using this path, if no socket server is detected.

📝 Usage Example

Here is a simple example showing how to open a C-Scan, modify a pixel, and save it to a new file.

# examples.py

from ndtkit_api import NDTKitCScanInterface, ndtkit_socket_connection
from ndtkit_api.model.frame.NICartographyFrameCScan import NICartographyFrameCScan


def change_pixel_value(input_file: str, output_file: str):
    """
    Opens a C-Scan, modifies the value of the first pixel, saves it,
    and re-opens it for display.
    """
    print(f"Opening C-Scan: {input_file}")
    # The server is launched automatically if not running
    cscan: NICartographyFrameCScan = NDTKitCScanInterface.open_cscan(input_file)

    if not cscan:
        print("Failed to open C-Scan.")
        return

    print(f"C-Scan opened successfully with UUID: {cscan.get_uuid()}")

    print("Retrieving data matrix...")
    data: list[list[float]] = cscan.get_data()
    print(f"Original value at [0][0]: {data[0][0]}")

    # Modify the data
    data[0][0] = 12.0
    print(f"Setting new value at [0][0] to 12.0")
    cscan.set_data(data)

    print(f"Saving modified C-Scan to: {output_file}")
    NDTKitCScanInterface.save_cscan(cscan, output_file)

    print("Re-opening the saved C-Scan to verify.")
    NDTKitCScanInterface.open_cscan(output_file, displayResult=True)
    print("Done.")


if __name__ == "__main__":
    ndtkit_socket_connection.launch_ndtkit() # Launch NDTkit if it is not already done
    # Make sure to use paths that are valid on your system
    input_cscan_path = "C:/Users/admin/Documents/Data/dd_carto.nkc"
    output_cscan_path = "C:/Users/admin/Documents/Data/result.nkc"
    change_pixel_value(input_cscan_path, output_cscan_path)

You can find practical usage examples for this API on the dedicated Github page.

✨ A class/method is available in the Java API but it is not appearing in this Python API

It can be reachable anyway, it's just the auto-completion of your IDE that is not working. Actually this Python API is using py4j that allows to access any Java API function. Here's an example on how to access to agi.ndtkit.api.NDTKitCScanInterface.openCScan(String) without using directly the API:

from ndtkit_api.ndtkit_socket_connection import gateway

gateway.jvm.agi.ndtkit.api.NDTKitCScanInterface.openCScan("path/to/my/cscan") # type: ignore

So please refer to the NDTkit Javadoc to have an exhaustive look at all the available actions and call them using this solution if they are not available directly in this Python API.

🛠️ CLI workflow (create / modify / deploy)

This library comes with several command lines that help you to create a new plugin. Here are the different commands that can be called:

  • ndtkit create: start a prompt that guide you for creating a new plugin

  • ndtkit modify: allows to change some configurations of the plugin (eg: ndtkit modify --port 1212)

  • ndtkit deploy: deploys your plugin so it is loaded by NDTkit. Don't forget to restart NDTkit to take the changes into account.

Note: If a .spec file matching the plugin name or the target script is detected, the script will prioritize it. This allows you to define complex build rules (like custom data inclusions, specific binary bundles, or advanced hooks) directly in the .spec file.

Note: On subsequent runs, the script will reuse the settings from build_config.json. If you need to change your configuration (e.g., to target a new version), you can simply delete this file and run ndtkit_deploy again to be re-prompted.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ndtkit_api-0.0.30.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ndtkit_api-0.0.30-py3-none-any.whl (73.1 kB view details)

Uploaded Python 3

File details

Details for the file ndtkit_api-0.0.30.tar.gz.

File metadata

  • Download URL: ndtkit_api-0.0.30.tar.gz
  • Upload date:
  • Size: 55.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for ndtkit_api-0.0.30.tar.gz
Algorithm Hash digest
SHA256 852e8a77c3a54da4c98e7565d50810e1528d9729c040b03f26349229b953bc6a
MD5 1b40e42b86209a43ee915c5bf7f507fa
BLAKE2b-256 b59959faed1aed32a805602a4bba54aa776b1f874aa9538f1d0fb994ce3c9dff

See more details on using hashes here.

File details

Details for the file ndtkit_api-0.0.30-py3-none-any.whl.

File metadata

  • Download URL: ndtkit_api-0.0.30-py3-none-any.whl
  • Upload date:
  • Size: 73.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for ndtkit_api-0.0.30-py3-none-any.whl
Algorithm Hash digest
SHA256 c7250007642685cabed2c5a435cc2ad00f8692e8d99ba5a103b13302d128f227
MD5 baa70a8cbbd2fb46d45bc8c3158fef2f
BLAKE2b-256 e934944c41fe24fac87114fea40fdbf97085fc41cbca86b81beb1727e1e8c2fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page