研究Python-Solvespace。
更新Anaconda3 :
從官方網站下載最新的Anaconda 3,配有Python 3.5.2。
https://www.continuum.io/downloads
使用Path指令檢查環境變數。
確定無誤後放入可攜式環境中,並把原本的Python 3.5移除,將start.bat的環境位置改成Anaconda的資料夾。
接著再檢查Anaconda程式的運作狀態。
安裝了其他工具,也包含Leo 5.3。
說明 :
Python-Solvespace是由BBBSnowball所開發的Solvespace函式庫,另外能調用Solid-python來協助運算。
Python-Solvespace最後一次更新是在2013年,所以使用的是Python 2,SWIG可能也是舊版的。
而根據協同者們留下的"VbDemo.vb"紀錄,應該是用VC來編譯它的。
若要使用Solid-python,必須用"git submodule update --init"指令額外下載它,不然只有空資料夾。
不過目前沒有要使用Solid-python,所以可以不用下載。
按照Readme的說明,要用make指令來編譯檔案。
但是在make的時候出錯了,顯示"missing separator. Stop."的錯誤,查了下面的網站,貌似是make.exe的新版本讀取舊的Makefile的問題,必須改寫他們的Makefile或使用舊版的MSYS。
http://www.crifan.com/error_missing_separator_stop_while_make_in_windows_cmd/
而顯示的錯誤如下圖:
與Whitequark的版本比較 :
不過Python-Solvespace有留下來interface的檔案,但是它的檔案結構已經跟Whitequark的版本不一樣了,所以也不能直接讓interface對應新版的檔案來創建。
好消息是SWIG的interface檔案改變不大,新版仍能使用。只要切換到\exposed資料夾,使用下列指令就能生成"slvs_wrap.cxx"。
swig -c++ -python -py3 slvs.i
新版有用到cmake來建置檔案,但是Python-Solvespace沒有,所以沒有CMakelist的清單。而CMakelist是要手動編寫的,視規模大小來分配。
Python-Solvespace似乎是只有原本Solvespace的"src"資料夾部分(不過外面原本就是給編譯器介紹用)。
並將"exposed"、"extlib"、"win32"等資料夾放了進來,並且將總標頭檔"slvs.h"和DLL的"lib.cpp"加入"exposed"中,讓CDemo成為主幹,調用Solvespace裡的約束函式。
但是"exposed"中除了原本的CDemo,還有一個h++的標頭檔"slvs_python.hpp"、一個"DOC.txt"說明Python要如何呼叫編譯好的函式列表,以及一些Python的小程式。
test.py :
py檔總共有3個,其中一個是使用Solid-python的呼叫工具,其他的"test.py"分別用"2.scad"和"3.scad"命名。
檢查了一下Python-Solvespace附上的py檔,最後作者做了3個測試,並寫下了一些註解。
第一個"test.py",展示了Python要如何取用slvs.dll的函式,長得跟原先的"CDemo.c"十分相似。
在這裡,可以注意到SWIG轉換後的函式名稱還是一樣,用法也極其相似。
第二個"test2.scad.py"匯入了slvs和solid。
由於Python只要在附近資料中尋找到宣告的項目就可運作,所以不太確定它們的副檔名究竟是DLL還是SO、PYD之類的連結庫或Python程式。
第三個"test3.scad.py"明顯使用了"slvs_solid.py"的內容,不過只有稍微閱讀過Solid-python的Readme,所以不太知道它的函式,但是看似比Solvespace更方便。
這次在Python-Solvespace碰上一些小瓶頸。
主要是MSYS的Makefile問題,論壇上滿多人討論它在編譯時的障礙,有時連參數前加個空格都會顯示錯誤,無法進行。
而Python-Solvespace應該是用不到cmake(因為原作者是用VC),如果需要用到Netbeams,就要自行撰寫一份CMakelist,或是在編譯器中捨棄它的功能。
至於需要Python 2轉Python 3的部分比較少,除非要動用Solid-python的內容。
Comments
comments powered by Disqus