This section describes how to download and configure Python with all the features required to work with the Cimatron API.
This section covers how to create a Application Manifest file and associate it with python.exe that will perform the side-by-side registration required by Cimatron API’s COM pointers.
This task requires the mt.exe tool, which is a part of Microsoft Windows Software Development Kit (SDK). This tool is found at:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\mt.exe
Note: If you do not have this file, you can manually install Windows kits from the following location:
https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/
Select Windows SDK for Desktop C++ x86 Apps.
Be aware that this process may install mt.exe in a different location to that stated in these instructions.
mt.exe -manifest "python.manifest" -updateresource:"python.exe;#1"
This section describes how to create a Cimatron API Application using Python. The following steps and snapshots are based on Visual Studio 2019. You can install Python development component for Visual Studio from Visual Studio Installer > Modify > Python Development.
In the subsequent screen, provide a Project name and click Create.
Note: If the option is not present, select Add Environment as shown below.
Interop dlls are imported in python script using clr module. This module can be imported from pythonnet package.
Note: If pythonnet is not available, perform the following steps to install it:
Click the Package Manger icon next to the python environment.
Search pythonnet in packages and select “Run command: pip install pythonnet” (as shown in image below)
Search pythonnet here
Select “Run command: pip install pythonnet”
#import clr module
import clr
#add reference to required interop dll
clr.AddReference("interop.CimAppAccess")
clr.AddReference("interop.CimatronE")
clr.AddReference("interop.CimServicesAPI")
clr.AddReference("interop.CimBaseAPI")
clr.AddReference("interop.CimMdlrAPI")
#import added references
import interop.CimAppAccess as CimAppAccess
import interop.CimatronE as CimatronE
import interop.CimServicesAPI as CimServicesAPI
import interop.CimBaseAPI as CimBaseAPI
import interop.CimMdlrAPI as CimMdlrAPI
Start your application using the code in one of the following options.
#AppAccess Object
aCimAppAccess = CimAppAccess.AppAccess()
#Cimatron Application Object
aCimApp = None
#Get Running instance of cimatron application
#If not running, launch cimatron and get its instance
while(aCimApp == None):
aCimApp = (CimatronE.IApplication)(aCimAppAccess.GetApplication())
#Create Main Cimatron Application object
CimUtilityApp = CimAppAccess.CimUtilityApp();
#Force start Cimatron Application
CimApp = None
while(CimApp == None):
cimAppp = (CimatronE.IApplication)(CimUtilityApp.GetIApplication())
If you have successfully compled all these steps, you are ready to use Cimatron API’s. Refer to the example in Example for a Code Example.
You can directly run this script from Visual Studio as long as it is being run using the python environment provided with Cimatron is being used
This is an optional step to bundle your .py file into an executable .exe file.
pyinstaller pythonextrudeapplication.py -F -m app.manifest --distpath <Cimatron Installation Directory>\Cimatron\Program
Replace <Cimatron Installation Directory> with path to your Cimatron installation directory.
Here’s an example to create a box using Cimatron API in python.
import clr
#Adding references of required interop dlls
clr.AddReference("interop.CimAppAccess")
clr.AddReference("interop.CimatronE")
clr.AddReference("interop.CimServicesAPI")
clr.AddReference("interop.CimBaseAPI")
clr.AddReference("interop.CimMdlrAPI")
#importing modules from interop dlls
import interop.CimAppAccess as CimAppAccess
import interop.CimatronE as CimatronE
import interop.CimServicesAPI as CimServicesAPI
import interop.CimBaseAPI as CimBaseAPI
import interop.CimMdlrAPI as CimMdlrAPI
#Getting AppAccess Object
aCimAppAccess = CimAppAccess.AppAccess()
#Getting instance of CimatronE Application
aCimApp = None
while(aCimApp == None):
aCimApp = (CimatronE.IApplication)(aCimAppAccess.GetApplication())
aPdm = aCimApp.GetPdm()
aDoc = (CimBaseAPI.ICimDocument)(aCimApp.GetActiveDoc())
aModelCont = (CimMdlrAPI.IModelContainer)(aDoc)
aMdlrModel = (CimMdlrAPI.MdlrModel)(aModelCont.Model)
#Creating Sketcher Procedure
aSketchProc = (CimMdlrAPI.MdSketcher)(aMdlrModel.CreateProcedure(CimMdlrAPI.MdProcedureType.cmSketcherProcedure))
aMdSketcher = (CimMdlrAPI.IMdSketcher)(aSketchProc)
aISketcher = (CimServicesAPI.ISketcher)(aMdSketcher.Sketcher)
#Setting rectangle co-ordinates
from System import Array, Double
myarray = Array[Double](4)
myarray[0] = -50
myarray[1] = -50
myarray[2] = 50
myarray[3] = 50
aISketcher.AddBox(myarray)
# Evaluate function to create the opened sketcher
aISketcher.Evaluate()
# Execute the Creation
aSketchProc.Execute()
#Getting sketcher body as entity using query and filter
aSqrSketch = None
aQuery = (CimMdlrAPI.IEntityQuery)(aSketchProc)
aFilter = (CimBaseAPI.FilterType)(aQuery.CreateFilter(CimMdlrAPI.EFilterEnumType.cmFilterEntityType))
aFilter.Add(CimBaseAPI.EntityEnumType.cmBody) # search for the single BODY created in the sketcher
aQuery.SetFilter((CimMdlrAPI.IEntityFilter)(aFilter))
aTmpEntList = aQuery.Select()
aSqrSketch=(CimMdlrAPI.ICimEntity)(aTmpEntList[1])
aProcExt = (CimMdlrAPI.MdSketcher)(aMdlrModel.CreateProcedure(CimMdlrAPI.MdProcedureType.cmExtrudeProcedure))
#Creating Extrude Procedure
IMdExtrude = (CimMdlrAPI.IMdExtrude)(aProcExt);
#setting necessary parameters
IMdExtrude.Contour = aSqrSketch
IMdExtrude.Delta = 50
IMdExtrude.Mode = CimMdlrAPI.ExtrudeSweepMode.cmExtrudeSweepModeNew
IMdExtrude.SideOption = CimMdlrAPI.ExtrudeSideOption.cmExtrudeBothSide
IMdExtrude.DraftAngle = 0
IMdExtrude.DraftSideOption = CimMdlrAPI.ExtrudeDraftSideOption.cmExtrudeDraftOutside
IMdExtrude.InvertOption = CimMdlrAPI.ExtrudeInvertOption.cmExtrudeForward
IMdExtrude.OpositDelta = 50
#Executing Extrude
aProcExt.Execute()