Hey forum,
I am trying to use a DLL inside a cura plugin but for some reason it wil not load the DLL for me.
i have a DLL set up that gives coordinates comming from our eye tracker and sends them to the python script.
i have a python script (Script A) that calls this DLL and has a few easy calls for other python scripts to use.
Calling Script A from command line (going through __main__) it loads the DLL and starts outputting coords in a while loop on my cmd window.
When trying to use this Script A in another Script B it does not seem to load the DLL.
Error Message:
2020-08-06 13:45:26,268 - ERROR - [MainThread] UM.Logger.logException [84]: Exception: Error loading plugin PrepareStageSR:
2020-08-06 13:45:26,271 - ERROR - [MainThread] UM.Logger.logException [88]: Traceback (most recent call last):
2020-08-06 13:45:26,273 - ERROR - [MainThread] UM.Logger.logException [88]: File "D:\Git\Cura Project\Uranium\UM\PluginRegistry.py", line 379, in loadPlugin
2020-08-06 13:45:26,274 - ERROR - [MainThread] UM.Logger.logException [88]: to_register = plugin.register(self._application) # type: ignore # We catch AttributeError on this in case register() doesn't exist.
2020-08-06 13:45:26,276 - ERROR - [MainThread] UM.Logger.logException [88]: File "D:\Git\Cura Project\Cura\cura\..\plugins\PrepareStageSR\__init__.py", line 19, in register
2020-08-06 13:45:26,278 - ERROR - [MainThread] UM.Logger.logException [88]: "stage": PrepareStage.PrepareStage()
2020-08-06 13:45:26,280 - ERROR - [MainThread] UM.Logger.logException [88]: File "D:\Git\Cura Project\Cura\cura\..\plugins\PrepareStageSR\PrepareStage.py", line 14, in __init__
2020-08-06 13:45:26,281 - ERROR - [MainThread] UM.Logger.logException [88]: sr = SR()
2020-08-06 13:45:26,282 - ERROR - [MainThread] UM.Logger.logException [88]: File "D:\Git\Cura Project\Cura\cura\..\plugins\PrepareStageSR\SR_EyeCoords.py", line 36, in __init__
2020-08-06 13:45:26,283 - ERROR - [MainThread] UM.Logger.logException [88]: self.c_lib = ctypes.CDLL("SRPython")
2020-08-06 13:45:26,284 - ERROR - [MainThread] UM.Logger.logException [88]: File "C:\Users\tom.hendriks\AppData\Local\Programs\Python\Python35\lib\ctypes\__init__.py", line 351, in __init__
2020-08-06 13:45:26,286 - ERROR - [MainThread] UM.Logger.logException [88]: self._handle = _dlopen(self._name, mode)
2020-08-06 13:45:26,287 - ERROR - [MainThread] UM.Logger.logException [88]: OSError: [WinError 126] The specified module could not be found
my "SR_EyeCoords.py" (calling __main__ does work!)
import ctypes
import pathlib
import time
class SR_Eye:
__slots__ = ["x", "y", "z"]
def __init__(self, x=0, y=0, z=0):
self.x = x
self.y = y
self.z = z
def __str__(self):
return (str(self.x) + ", " + str(self.y) + ", " + str(self.z))
class SR_EyePair:
__slots__ = ["left", "right"]
def __init__(self, left, right):
self.left = left
self.right = right
def __str__(self):
return (str(self.left) + " : " + str(self.right))
class SR:
def __init__(self):
self.c_lib = ctypes.CDLL("SRPython")
self.c_lib.Setup()
self.c_lib.GetEyeValue.restype = ctypes.c_float
def GetCurrentEyePair(self):
lx = self.c_lib.GetEyeValue(0,0)
ly = self.c_lib.GetEyeValue(0,1)
lz = self.c_lib.GetEyeValue(0,2)
rx = self.c_lib.GetEyeValue(1,0)
ry = self.c_lib.GetEyeValue(1,1)
rz = self.c_lib.GetEyeValue(1,2)
eyeL = SR_Eye(lx,ly,lz)
eyeR = SR_Eye(rx,ry,rz)
eyePair = SR_EyePair(eyeL, eyeR)
return eyePair
if __name__ == '__main__':
# SR_EyeCoords.py executed as script outputs eye Coord every second
sr = SR()
while 1:
print(sr.GetCurrentEyePair())
time.sleep(1) #sleep for 1 second
Snippet of the PrepareStage.py (using a coppy of the normal preparestage as a base since i'm not that familiar with the plugin development yet)
from cura.Stages.CuraStage import CuraStage
from PrepareStageSR.SR_EyeCoords import *
## Stage for preparing model (slicing).
class PrepareStage(CuraStage):
def __init__(self, parent = None):
sr = SR() #crash on this line
eyePair = sr.GetCurrentEyePair()