SOFA——C++項目“hello world”

   既安裝SOFA後,發現在F:\SOFA_v19.12\source\examples有它自帶的已經編譯的例子,但其中並沒有C++項目,也不包含源碼(個人認爲是XML寫的),運行就是直接在runSofa.exe那個界面點打開那些.scn項目即可,你可以用Qt打開這些.scn項目,發現就是一堆XML代碼了。那條蛇就是默認打開的caduceus.scn項目。
在這裏插入圖片描述
   在F:\SOFA_v19.12\source\applications\tutorials這個目錄下有幾個C++項目的源碼,如ChainHybrid、 oneParticle等。
  那麼問題來了,明明一個以C++爲根基的庫,怎麼從C++變到runSofa所出現的那個界面呢(RunSofa.exe這個東西是有C++源碼的在:F:\SOFA_v19.12\source\applications\projects\runSofa,如果你以後用C++寫,那麼這個東西將是你除上面tutorials中那幾個C++小項目外唯一的參考了)
  本文“hello world”所用的是ChainHybrid項目:原因有兩個,第一個是這個項目在F:\SOFA_v19.12\source\examples\Demos\ChainHybrid.scn 中有這個scn項目,第二是其他項目我也試了,都已失敗告終(在他論壇找到一些聲音說有幾個項目其實本來就有bug而且SOFA庫在更新,這幾個項目好像並沒跟着改)。
最終生成ChainHybrid.exe,效果:
在這裏插入圖片描述官方ChainHybrid.scn 效果:
在這裏插入圖片描述從C++代碼到上見運行效果流程就三步:

Cmake編譯—VS生成—運行。

  解決這三步中遇到的“大部分”致命錯誤就能行了。下面就我生成這個項目過程中所遇到的問題進行說明,大部分沒有錯誤截圖了,反正不同項目遇到的問題估計也是千奇百怪。

一、Cmake編譯

1.1 Cmake—Configure

1.1.1 找不到GLEW

在這裏插入圖片描述

  • 解決:如圖添加GLEW_INCLUDE_DIR目錄

1.1.2 找不到Qt

在這裏插入圖片描述

  • 解決:如圖添加CAMKE_PREFIX_PATH Qt目錄

1.1.3 找不到如NewmatTargets.cmake這類target cmake文件

注:從這裏開始大量用到磁盤文件搜索,請提前準備如 Everything 之類的Windows文件搜索工具

  • 解決:搜索找到目標 .cmake 文件,複製粘貼到F:\SOFA_v19.12\build\cmake目錄下

1.2 Cmake—Generate

1.2.1 INTERFACE_INCLUDE_DIRECTORIES問題

generate階段會報錯1.1.3小節中複製過去的 cmake 文件中INCLUDE_DIRECTORIES這個路徑找不到所需頭文件

  • 解決:用Notepad++打開這些cmake 文件,找到這裏(注意一個cmake文件中不止一處)
    在這裏插入圖片描述
    更改爲:
    在這裏插入圖片描述其實就是將相對路徑更改爲絕對路徑,那怎麼知道這個絕對路徑在哪:
    他需要的是相關.h 頭文件,直接去搜索這個頭文件在哪, 如上面這個頭文件名就是SceneCreator.h找到目錄 替換
    大部分其實可以根據父目錄快速定位:如
    原始:
    在這裏插入圖片描述更改:
    在這裏插入圖片描述

二、VS生成

2.1 直接無法打開頭文件

原因在於沒有包含頭文件所在目錄,去這裏添加
在這裏插入圖片描述
發現越添加錯誤越多?我添加着添加着報錯四五千了, 原因在於這些頭文件是找到了,但是頭文件中也include了大量了其他頭文件,所以報錯越來越多

  • 解決:打開F:\SOFA_v19.12\build\applications\projects\runSofa\runSofa.sln直接去把這個工程所包含的頭文件路徑複製過來(這肯定不是正道方法,有同志知道怎麼解決這個頭文件路徑問題請求賜教)

2.2 LNK_118錯誤

如圖報錯打不開 什麼什麼文件
在這裏插入圖片描述原因:lib或dll文件沒找到

  • 解決:添加lib所在

報該錯誤時,這個地方綠框可能不是.lib 是sceneCreator NOTFOUND其他同理
第一步:進去把這些都改成 xxx.lib
ps:爲什麼是 lib 不是 dll 呢,因爲我改成dll沒解決問題
在這裏插入圖片描述第二步:
添加這些lib所在的目錄
在這裏插入圖片描述

2.3 LNK_2019錯誤

無法解析外部符號,原因調用了某些函數但是沒包含這些函數對應的庫(好像是,有點忘了)
在這裏插入圖片描述
-解決:根據錯誤提示找是缺了哪個lib, 如上圖這個報錯可以看出這個錯誤大致發生在調用sofa::simulation:: 什麼什麼的時候發生錯誤, 所以去找
在這裏插入圖片描述
通配符使用後找到相關lib 然後按照 2.2 小節方法添加解決

PS:還有另一個情況可能引發LNK_2019這個問題 ,既平臺:
在這裏插入圖片描述可以試一下把這個32改成64 或反過來,反正哪個能不報錯用哪個唄,可以看到我是編譯的64位Relase版本,但是紅框這裏需要是win32, 改寫成64會報錯2019,這我不清楚了

三、ChainHybrid.exe運行

生成的exe文件在C:\Users\pc\Desktop\chainHyb\build\Release

3.1 找不到 dll

  • 解決:去找到這個dll文件 複製到 relese 這個目錄下
  • 其實都在F:\SOFA_v19.12\build\bin\Release這裏,既RunSofa.exe所在目錄下
  • 建議直接複製所有該目錄下所有dll文件過去,因爲真的很多很多(淚目 😤)

3.2 找不到qt環境

報錯:last Used GUI.ini not found: SOFA qt.qpa.plugin: could not find the qt platform pugin windows in "

  • 解決:去把F:\SOFA_v19.12\build\bin\Release這個目錄下的 platforms這個文件夾複製到 Relese目錄下
    然後就可以打開窗口了

3.3 少插件

如圖報錯,可以看出需要SofaOpenglVisual這個插件
在這裏插入圖片描述

  • 解決:回到VS 打開源碼添加後重新生成
    在這裏插入圖片描述

3.4 mesh或obj路徑找不到文件

  • 解決:去源碼找到添加mesh obj 的地方,相對路徑改絕對路徑
    在這裏插入圖片描述

3.5 找不到背景圖,圖標

在這裏插入圖片描述

  • 解決:找到再寫圖標或貼圖,在Release目錄下創建 icons textures config 這些目錄放進去就不報錯了

在這裏插入圖片描述

  • icon圖標是幫助那裏的前進 主界面
    在這裏插入圖片描述
  • textures是運行背景圖,我現在不報錯 但是有warring顯示不出,原因不詳(見下圖,並沒有SOFA字樣背景,對比文章開頭 ChainHybrid.scn運行效果)
    在這裏插入圖片描述

四、其他

  如我前面所說,解決致命錯誤就能行了,現在運行仍然有報錯,有warring,但已經不影響演示效果了, 包括在VS生成階段,即使不報錯正確生成 也是有將近一千個warring的。
最後一個warring就是沒能顯示背景圖的問題,我也去看了相關源碼,但是不知道它爲啥沒正確收到圖片,報這個warring的原因是圖片爲空 即 if(! image) warring
在這裏插入圖片描述  最後附上一張開始運行後的形變效果瞬間截圖
在這裏插入圖片描述

五、感慨

一句話:難走的路,從不擁擠
一張圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章