Sketchup二次開發入門


Sketchup提供了兩套API:

  • C API,主要用於讀寫SU文件。我們的SU文件導入功能就是用這套API做的

  • Ruby API,用於開發SU插件

這次我們主要關注Ruby API,因為它是實現更豐富的SU擴展功能的主要方式

不得不承認Sketchup的Ruby API開發文檔相對於React,或是Inventor/Revit這些都太不友好了。不過從這篇文檔開始我們還是能按圖索驥,找到門徑。

如果不想讀這篇文檔,那么也可以遵循如下步驟:

  1. 去Github把官方tutorial教程項目clone下來 

  2. clone下來之后,直接把tutorial里面的rb源文件拷貝到Sketchup的Plugins目錄(e.g. C:\Users\kzhan\AppData\Roaming\SketchUp\SketchUp 2018\SketchUp\Plugins),重啟SU,就可以執行tutorial里面的插件了

      ==》  

  3. 用VS code把官方tutorial項目打開,閱讀代碼。代碼里有詳細的注釋,解釋了插件代碼要怎么寫

    • 代碼全都是Ruby的,但我覺得也沒必要再專門去學Ruby語言了。對着代碼看,大部分還是能理解意思。遇到不熟悉的語法可以查Ruby官方文檔  以及SU的 Ruby API文檔  

    • 個人查閱過,覺得值得了解的Ruby語法知識點有:

      • Ruby的方法名可以包含!,?這些標點符號。包含!的方法名一般表示這是一個“危險”的操作,包含?的方法名一般表示它會return一個boolean。注意這些是coding convention而不是編譯要求

      • Ruby有unless語句,unless [condition] then 中,condition為false,then后面的語句才會執行。且 unless和if 都可以放到待執行表達式的后面,如 a += 1 if a.zero

      • Sketchup::InputPoint.new, Sketchup是module name,InputPoint是class name,此語句new了一個InputPoint對象

      • Ruby調用一個方法時,如果不帶參數,則方法后的括號可以省略。e.g. my_method()也可寫成my_method

      • 以$開頭的變量名是全局變量,以@開頭的變量名是類的成員變量(instance variable),以@@開頭的變量名是類的靜態成員變量(class variable)

  4. 可以先閱讀tut_hello_cube的代碼和注釋。這是一個Hello World級別的插件,執行插件命令后直接在世界坐標系原點處生成一個立方體

  5. 接下來閱讀tut_custom_tool,這是一個實現了和SU原生的“畫直線”命令相同功能的插件。這才是我們真正需要了解的東西

從tut_custom_tool的程序結構看,SU插件和Inventor/Revit插件的程序結構其實很相似。它要定義一個custom tool的類,然后實現activate/deactivate/onCancle/onMouseMove/onLButtonDown等方法,在這些方法里實現業務邏輯

從tut_custom_tool的調用的API來看,SU Ruby API還是提供了相當豐富的、封裝層次較高的基礎設施,包括:

  1. 交互操作工具類。如InputPoint類,可完成從屏幕上交互拾取一個點的功能。其pick方法的輸入參數還可打開“本次拾取的點與上次拾取的點的連線與坐標軸平行吸附“這樣的高級功能。打開后,我們的插件畫線工具和原生畫直線工具一樣,可以紅/綠/藍燈不同顏色的虛線,表示此時推斷的連線和哪個坐標軸平行。而這樣的交互能力的獲取,只需要在調用API時傳入一個參數即可

  2. 幾何造型工具類。如Sketchup.active_model.active_entities.add_line,根據拾取的點在模型上加邊;edge.find_faces,用於根據剛加好的邊生成面

  3. 實現undo/redo管理util,如start_operation/commit_opeation等

  4. 視圖操作util,如view.tool_tip, Sketchup.status_text, view.invalidate 等直接修改/更新視圖對象的方法

感覺按照這樣的API能力,SU Ruby API也和Onshape的FeatureScript一樣,可以將其原生的建模功能完全用API重寫一遍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM