【VC++＆STEP CADデータ】STEPCodeをVS2019環境に移植する


以前紹介したCADデータのライブラリについて。
元々はLinux用途に設計されたライブラリ「**STEPCode**」について、それなりに調査をし始めている。

https://qiita.com/belre/items/d5d8168f68f8cb062c06

相当マニアックな内容でありながらも、意外と需要ありそうで、独自性のあるテーマでもあるので、改めてインストールの方法から整理して記事にする
でも、メカ設計者や部品業者を含めても、実はSTEPを取り扱うのはハードルが高いと言われている。それは、その仕様が複雑なだけでなく、STEPファイルの読み取りは基本有償のものが多いためでもある。

**と言っても、STLデータは計算しやすく扱いは容易だが、互換性には苦労させられる。**
製造業全体の課題でもあるのだ。

STEPCodeは無償でありながらもBSDライセンスであり、企業が商用利用しても妨げにならないようなライブラリだ。
ただし、コードは全体的にレガシーなものが多く、一癖あるので使い慣れるには結構大変な部分もある。

ある程度私も使ってきたが、色々これで遊んでみたいのでこのQiitaなどで記事として紹介したい


# 環境

## 言語

- C++
 - 言語: Visual C++ (ISO C++ 14 Standard)
 - IDE: Visual Studio 2019 Professional (Version 16.11.3)
 - cmake gui 3.19.0-rc3

cmake guiはちょっと古いもの使っていますが、最新版が出ているようです(3.21.1)

https://cmake.org/download/


## ライブラリ

STEPCode **v0.8.1**
つい先日、python3への対応が出来るようになったようだ。

https://github.com/stepcode/stepcode

# VC++移植

## 1. Githubからリポジトリをクローン

※自分用に色々アレンジする場合は、事前に自分のアカウントでgitリポジトリをforkするなりして、
　管理出来るようにしておきましょう。

```
git clone https://github.com/stepcode/stepcode
```

## 2. cmake

cmakeの作業は結構時間がかかるので、
他のタスクをするなど余裕があるときにやると良いです

### Visual Studio 2019を使用する方法

単純ですが、ちょっと進捗が分かりにくい方法.

Visual Studio 2019を開いてOpen a local folder(ローカルフォルダを開く)をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/20d6653d-af34-15b5-7924-4d98a59697f1.png)

ファイルディレクトリが開くので、クローンしたディレクトリを指定してフォルダを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/4fbe5629-1aea-9473-270e-61441df7b072.png)

するとVisual Studioの方で勝手にcmakeをしてくれるので、あとは待つだけ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/45611c75-f70c-d352-db58-8d36914d7d68.png)

### CMake guiを使用する方法

しかし実際のところエラーメッセージなどが出たりして、
VSの画面では情報量が多すぎて、「きついなあ」と思ったときはこちらの方法を適用する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/a2b362d6-4b7e-9c36-dd34-015e4914ba3e.png)

Configureを押すと、C++ Generatorの種類やプラットフォームを選択するように指示が出るので、欲しいものを使う
とりあえず特にこだわりがなければそのまま実行しても良い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/7c525e4e-7a5e-35ae-7a75-2608326d3852.png)

Finishを押すとCMakeのConfigureが行なわれ、"Where to build the binaries"にConfigureされた状態でディレクトリデータが生成される。


メッセージのところに「Configuring Done」と表示されたら、Configureが終了した状態になる。
画面が変わったら「Generate」を指定してビルドデータを生成しよう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/c116c495-324d-1e2d-dd3d-4b83614e1510.png)

そして、「Generate」を押したら、エラーがなければ「Generating Done」と表示される。
インストール完了。

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/5aaa6c99-d91b-0659-b512-c3745a709c9d.png)


## 3. テストプログラムの作成＆cmake


exampleフォルダのプログラムは正常に動きますが、注意点がいくつか必要のようです。


### ディレクトリ構成

StepCodeのインストール先に"example"フォルダがあるので、「ap203min」というファイルを新規で作成する。
構成は以下のようにする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/252a7a0c-d7bc-71df-38ed-31d9e679f068.png)

どうやら、includeフォルダを追加して、その中にconfig.h.inを入れないと、
cmakeが正常にConfigurationしてくれない。


### プログラム

CMakeLists.txtは原本のものを使うが、一点注意が必要で、
cmakeをすると

```cmake:CMakeLists.txt
message(FATAL_ERROR "STEPCODE_ROOT_DIR is not defined! Set via cmake-gui or on command line:\n    cmake .. -DSTEPCODE_ROOT_DIR=/path/to/sc")
```

の行でエラーが出てしまう。

これを回避するためには、cmakeを展開するときにSTEPCODE_ROOT_DIRを指定する必要があり

```cmake:CMakeLists.txt
set(STEPCODE_ROOT_DIR "C:/StepCode/")
```

などと書く必要がある。私はWindowsの環境変数を使って

```cmake:CMakeLists.txt
set(STEPCODE_ROOT_DIR "$ENV{STEPCODE_INSTALL_DIR}")
```
と書いておいた。こちらの方が何かと都合が良い。

main.cppは

```C++:main.cpp
instance_list->DeleteInstances();
```
の行でメモリエラーが発生したのでこの部分をコメントアウト。

### ビルド

exampleフォルダに対して、cmakeを実施すると、以下のようなフォルダ構成になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/d59eb8b8-65cf-cb68-b047-79a3122d3106.png)

buildがcmakeによって新しくできたフォルダで、
中身は次のようになっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/59d1d03b-c576-c65b-ca58-572e766cc0f8.png)

AP203Minimum.slnを開いてビルドする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/7c352089-17cc-96ff-2e23-252863711648.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/d8336259-5669-b975-ee2b-fc570edf773f.png)

実行成功だ。おめでとう。