我想要一个对象,由现有的 MATLAB 脚本生成,在 FreeCAD 中建模。介绍的重要内容见粗体标题,Matlab 代码,python 代码,通过终端测试,Matlab 错误,注释(操作系统,版本)
介绍
我已经解决了这个过程的每一方面,但是我在通过 MATLAB 调用 python 脚本时遇到了问题。
我既有对象构造函数,又有一个在 FreeCAD 中构建东西的脚本;所以本质上,我有任何一端。我现在需要的是连接它们。
我的测试是基本的,但应该已经足够了,或者我假设。
MATLAB:
pyfile = '~/Desktop/FreeCADworkspace/testvec2.py';
filename = 'atestname';
call = "python " + pyfile + " " + filename;
[status,result] = system("sh ~/Desktop/FreeCADworkspace/freecad.sh")
Python:
# Import python roots
import sys
import os
sys.path.append('/usr/lib/freecad-python2/lib')
sys.path.append('/usr/lib/freecad/lib')
# Other imports
import numpy as np
import math
# Import FreeCAD and parts
import FreeCAD
from FreeCAD import Base
import Part, Sketcher, Draft
try:
filename = sys.argv[1]
except: # this should never be thrown, exists for testing and other integration
print('No arguments called into script.')
print('Please use format: python thisScript.py arg_filename')
quit() # exit script
print(filename) # checkmeplz
所以,基本上应该发生的是我应该在 MATLAB 中打印出文件名的定义。在这种情况下,我应该看到'atestname'
测试
如果我通过终端调用它:
python ~/Desktop/FreeCADworkspace/testvec2.py atestname
我得到:
FreeCAD 0.18.1, Libs: 0.18.1R
atestname
这完全符合预期。我的 MATLAB 也不能这样说
MATLAB 错误
Traceback (most recent call last):
File "/home/ashaiden/Desktop/FreeCADworkspace/testvec2.py", line 11, in <module>
import FreeCAD # no FreeCADGui??
ImportError: /usr/lib/freecad-python2/lib/libFreeCADBase.so: undefined symbol: _ZN11xercesc_3_111InputSource11setEncodingEPKt
我还尝试通过 bash 脚本从 MATLAB 执行 python 脚本。同样的错误。
让我感到困惑的是:为什么某些通过终端完美执行的命令在通过 MATLAB 调用时会失败?我觉得我误解了 MATLAB 系统调用的执行方式。我假设调用是发送到操作系统本身并由操作系统本身处理的。但是在这种情况下,出错是没有意义的。MATLAB 是否对其正在处理的文件进行一些解释?
笔记
- 操作系统:Ubuntu 16.04
- MATLAB 2018b
- Python 2.7 -> 这可能是问题吗?Python 2 似乎是我的特定 FreeCAD 安装的默认语言。
- 自由CAD 0.18.1
编辑
经过我和我的主管多次搜索,这似乎可以归结为二进制文件之间的冲突。
MATLAB在/bin/glnxa64/和另一个工具箱文件夹中定义了libxerces-c.so文件。
这些可能与 linux 二进制文件/usr/lib/x86_64-linux-gnu/libxerces-c.so冲突, 因此当通过 matlab 调用终端时,它使用 matlab 二进制文件而不是系统二进制文件。
我将继续进一步调查。