研究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