Studio API 2022  v1.0.0
2022R3 Build 2208.0412.923

Introduction


Moldex3D Studio is a Microsoft Windows application which includes COM technology(Component Object Model).
COM objects can be created with a variety of programming languages.

Setup


Register Moldex3D Studio as COM server

To use Moldex3D Studio as a COM server, the application must be registered in the Windows registry.

  1. Open the Command Prompt (cmd.exe) as administrator
  2. Register Studio via the following command:
    C:\Moldex3D\2022\Bin\MDXStudio.exe /regserver
    
    If the message box pops up and shows “Studio registered”, it means that the Studio is registered successfully.

The information about Moldex3D Studio COM server

  • The uuid of type library: {3D9C4644-FC4E-478C-8D61-C86EAA45AB94}
  • The external name of the application: Moldex3DStudio2022.App

Required Licenses

  • Moldex3D Tools - API is necessary license to use Studio API.
  • Moldex3D - STUDIO is necessary license to use Studio application.
  • Depending on modules or functions, other licenses may be required.

Getting Started with Studio APIs


In this tutorial, you can know how to automate Moldex3D Studio with Python.
There are two ways to do automation with the Studio application:

  • Create a program to manipulate Studio applications.
  • Directly run a script in the Studio application to manipulate it.

NOTE
You need to register the Studio application before using Studio API.
If you don't know how to do, you can refer to the section Register Moldex3D Studio as COM server.

Prerequisites

To successfully automate Moldex3D Studio with Python, you need to first set up your Python development environment. It requires:

  • Python 3
  • Python extension: pywin32

If they are already installed on your computer, you can jump to the section Create a program to manipulate Studio application.

Install Python 3

  1. Install Python for Windows and add Python to PATH
    Python Executable installer is available on Python official website.
  2. Verify the Python installation
    If your computer only installs one version of Python, run the following command:
    python --version
    
    If your computer installs more than one version of Python, run the following command:
    py -3 --version
    

Install the Python extension pywin32

  1. Check if pip is already installed via the following command:
    py -3 -m pip --version
    
    If pip is not installed, you can follow the tutorials on python.org to deal with it.
  2. Use pip to install packages
    py -3 -m pip install pywin32
    
  3. Verify the pywin32 installation
    py -3 -m pip list
    

Create a program to manipulate Studio application

1. Generate Python COM support files for a type library

To use a COM object from Python, the module for type library needs to be generated first.

import win32com.client
typelib_uuid = '{3D9C4644-FC4E-478C-8D61-C86EAA45AB94}'
win32com.client.gencache.MakeModuleForTypelib(typelib_uuid, 0, 1, 0)

2. Get a Studio COM object from Python

Before calling Studio API functions, you need to get a Studio COM object.
There are three ways to get a COM object with win32com module:

  • win32com.client.DispatchEx(program_id)
  • win32com.client.Dispatch(program_id)
  • win32com.client.GetObject(instance_id)

If you are using Moldex3D Studio 2021 or earlier versions, the methods mentioned above are not supported.
You can refer to the section 2-4. Connect to an existing Studio application (Before Moldex3D Studio 2022) for more information.

2-1. Launch a new Studio application

To launch a new Studio application always, you can use the following codes:

import win32com.client
program_id = 'Moldex3DStudio2022.App'
studio = win32com.client.DispatchEx(program_id)

2-2. Connect to an existing Studio application

If there is an existing Studio application and you want to get a COM object connecting to the application, you can use the following codes:

import win32com.client
program_id = 'Moldex3DStudio2022.App'
studio = win32com.client.Dispatch(program_id)

NOTE
If there is no open Studio application, a new Studio application will be launched.
If there are multiple existing Studio applications, you can get a COM object connecting to the Studio application that is launched first.

2-3. Connect to an specific Studio application

If there are one or more existing Studio applications and you want to get a COM object connecting to a specific one, you can use the following codes:

import win32com.client
instance_id = '' # replace it with the instance ID gotten from About dialog in Studio
studio = win32com.client.GetObject(instance_id)

NOTE
The instance ID can be gotten from About dialog in Studio.
It is a string like '{46122917-DF2F-4DDF-A291-18BB78804A51}'.

2-4. Connect to an existing Studio application (Before Moldex3D Studio 2022)

In earlier versions of Moldex3D Studio, you can only manipulate a Studio application via API at a time.
To get a COM object, you can use the following codes:

import win32com.client
program_id = 'Moldex3DStudio2021.App'
studio_class = win32com.client.gencache.GetClassForProgID(program_id)
if studio_class is None:
print('[Error] win32com.client.gencache.GetClassForProgID() failed!')
studio = None
else:
studio = studio_class()

NOTE
If there is no open Studio application, a new Studio application will be launched.
Otherwise, you will get a COM object connecting to the Studio application that is launched first.

3. Add a new run for Injection Molding via API

Here is a sample script to automate Moldex3d Studio with Python.
It shows you how to do the following actions via API:

  1. Launch a new Studio application
  2. Open an existing project
  3. Add a new run in the project
  4. Configure run settings
  5. Close the Studio application
# -*- coding: UTF-8 -*-
import os
import sys
import win32com.client
#---
"""
What to learn:
(1) how to open a project file
(2) how to add a new run
(3) how to specify mesh file
(4) how to specify material file for part and then generate default run settings automatically
"""
def main():
#---------------------------------------------
# Setup
#---------------------------------------------
typelib_uuid = '{3D9C4644-FC4E-478C-8D61-C86EAA45AB94}'
program_id = 'Moldex3DStudio2022.App'
print('1.Generate support for a type library: %s' %typelib_uuid)
win32com.client.gencache.MakeModuleForTypelib(typelib_uuid, 0, 1, 0)
#---------------------------------------------
# Launch Studio
#---------------------------------------------
print('2.Launch a new Studio application by DispatchEx(): %s' %program_id)
studio = win32com.client.DispatchEx(program_id)
#---------------------------------------------
#
#---------------------------------------------
print('3.Start to manipulate Studio with API...')
proj_file = 'C:\\Moldex3D\\2022\\Samples\\Solid\\Injection\\Gear\\Gear.mrm'
mesh_file = 'C:\\Moldex3D\\2022\\Samples\\Solid\\Injection\\Gear\\Mesh\\Gear_Part.mfe'
material_file = 'C:\\Moldex3D\\2022\\Samples\\Solid\\Injection\\Gear\\Material\\ABS_STYLACVA29_1.mtr'
#---------------------------------------------
# Open a project file
#---------------------------------------------
b_continue = True
print(' -Open a project file: %s' %proj_file)
run_ref = studio.OpenFile(proj_file, 'mm')
if run_ref == '':
print(' OpenFile() failed: %s' %studio.error_msg)
b_continue = False
else:
print(' OpenFile(): get Run %s' %run_ref)
#---------------------------------------------
# Add a new run
#---------------------------------------------
new_run_ref = ''
if b_continue:
new_run_ref = studio.AddRun('IM')
if new_run_ref == '':
print(' -AddRun() failed!')
b_continue = False
else:
print(' -Add a new run for Injection molding: Run %s' %new_run_ref)
#---------------------------------------------
# Set mesh file
#---------------------------------------------
if b_continue:
print(' -Specify mesh file: %s' %mesh_file)
studio.SetMeshFile(new_run_ref, mesh_file)
if studio.error_msg != '':
print(' SetMeshFile() failed: %s' %studio.error_msg)
b_continue = False
#---------------------------------------------
# Set material file
#---------------------------------------------
if b_continue:
print(' -Specify material file for part and then create default process, computation parameters and analysis sequence')
studio.SetMaterialFile(new_run_ref, material_file, '-EM -id 1 -createdefault')
if studio.error_msg != '':
print(' SetMaterialFile() failed: %s' %studio.error_msg)
b_continue = False
#---------------------------------------------
# Close Studio
#---------------------------------------------
os.system("PAUSE")
print(' -Close Studio')
studio.Close()
if __name__=="__main__":
main()

See Examples to learn more.

Run a script in Studio application

Moldex3D Studio 2022 supports a new function Run Script command.
You can use a Python script to specify a batch of actions via API.
This script must be written in Python 3 and contain the specific function run_script(studio).
Here is a sample script:

#! python3
def run_script(studio):
# make Studio do something here ...
return 0

1. Create a script for Run Script command

Let us modify the sample script provided in the section Create a program to manipulate Studio application. Then, Create a script to do the following actions:

  1. Check whether a project is open in the Studio
  2. Add a new run to the open project
  3. Configure run settings
#! python3
# -*- coding: UTF-8 -*-
def run_script(studio):
print('Start to manipulate Studio with API...')
#---------------------------------------------
# Check project is open or not
#---------------------------------------------
b_continue = True
run_ref = studio.GetCurrentRunRef()
if run_ref == '':
print(' [ERROR] There is no open project.')
b_continue = False
else:
print('Current Run: %s' %run_ref)
#---------------------------------------------
# Add a new run
#---------------------------------------------
sub_step = 1
new_run_ref = ''
if b_continue:
print('(%d) Add a new run for Injection Molding ...' %sub_step)
sub_step += 1
new_run_ref = studio.AddRun('IM')
if new_run_ref == '':
print(' -AddRun() failed!')
b_continue = False
else:
print(' -AddRun() succeeded: get Run %s' %new_run_ref)
#---------------------------------------------
# configure run setting
#---------------------------------------------
mesh_file = 'C:\\Moldex3D\\2022\\Samples\\Solid\\Injection\\Gear\\Mesh\\Gear_Part.mfe'
material_file = 'C:\\Moldex3D\\2022\\Samples\\Solid\\Injection\\Gear\\Material\\ABS_STYLACVA29_1.mtr'
if new_run_ref != '':
# specify mesh by file
if mesh_file != '':
print('(%d) Specify mesh: %s ...' %(sub_step, mesh_file))
sub_step += 1
studio.SetMeshFile(new_run_ref, mesh_file)
print(' -SetMeshFile(): done')
# specify material by file
if material_file != '':
print('(%d) Specify material file for part and then create default run settings: %s ...' %(sub_step, material_file))
studio.SetMaterialFile(new_run_ref, material_file, '-EM -id 1 -createdefault')
if studio.error_msg != '':
print(' -SetMaterialFile() failed: %s' %(studio.error_msg))
else:
print(' -SetMaterialFile() succeeded')
pro_file, iret = studio.GetProcessFile(new_run_ref)
print(' -Auto-generated process file: %s' %(pro_file))
return 0
if __name__=="__main__":
pass

2. Call Run Script command

Here is a step-by-step to use Run Script Command in Studio:

  1. Luanch a Studio application.
  2. Open a project.
  3. Input "RUNSCRIPT" to call Run Script command in Studio.
  4. Select a Python file to run. Or you can use the Python file created in the previous section.
  5. If the script is executed successfully, the return value will be 0.