Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

C# から Open CASCAD Technology (C++) を参照する【準備編】

0
Posted at

はじめに

C# から Open CASCAD Technology (C++) を参照する備忘録です。

改訂履歴

  • 2026/06/07 : 初版公開。

本文

1. 環境

  • .NET Framework 4.8.1
  • Open CASCADE Technology 8.0.0
  • Visual Studio Community 2022

2. 構成

大雑把ですが、こんなイメージです。

3. ダウンロード

以下の URL にアクセスします。

occt-combined-with-debug-no-pch.zip をダウンロードします。

4. 手順

4-1. C++/CLI プロジェクトの作成

.NET Framework の CLR クラスライブラリを選択します。見当たらない場合は Visual Studio Installer から追加してください。

プロジェクト名は「OcctLibrary」、ソリューション名は「OcctExample」で作成します。

occt-combined-with-debug-no-pch.zip を全て解凍し、opencascade-8.0.0 フォルダを以下の階層に配置します。

フォルダ
OcctExample
├─ OcctExample.sln
└─ OcctLibrary
   ├─ OcctLibrary.vcxproj
   └─ NativeOcct
      ├─ .gitignore ... 中身は !* のみ。同階層以下のファイルを Git に含めるために配置。
      └─ opencascade-8.0.0
         ├─ 3rdparty-vc14-64 ... Open CASCAD Technology が利用するサードパーティー製ライブラリ。
         └─ opencascade-8.0.0-vc14-64 ... Open CASCAD Technology 本体。
            ├─ cmake
            ├─ data
            ├─ inc
            ├─ src
            ├─ win64
            ├─ custom.bat
            ├─ custom_vc14_64.bat
            ├─ env.bat
            ├─ LICENSE_LGPL_21.txt
            └─ OCCT_LGPL_EXCEPTION.txt

補足
このままだと Git の 100MB 制限に引っかかるし、OcctExample 全体の容量(数ギガバイト)も削減したかったので、3rdparty-vc14-64 内にある以下のフォルダは、一旦 7z に圧縮しました。

  • doxygen-1.13.2-x64
  • draco-1.4.1-vc14-64
  • qt5.11.2-vc14-64
  • rapidjson-1.10

4-2. C++/CLI ビルド構成の設定

構成マネージャーを開き、OcctLibrary プロジェクトのビルド構成を x64 に設定します。Debug / Release 共に x64 にしてください。

4-3. C++/CLI 構成プロパティの設定

構成プロパティ は Debug と Release で 2 回、設定する必要があります。

OcctLibrary プロジェクトのプロパティから、出力ディレクトリと中間ディレクトリを以下のものに変更します。

出力ディレクトリ
$(ProjectDir)bin\$(Platform)\$(Configuration)\
中間ディレクトリ
$(ProjectDir)obj\$(Platform)\$(Configuration)\

C/C++ に移動し、追加のインクルードディレクトリに以下のパスを設定します。

追加のインクルードディレクトリ
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\inc

プリプロセッサの項目に移動し、定義を以下の値に変更します。

プリプロセッサの定義 ※ Debug
_DEBUG;WNT;OCC_CONVERT_SIGNALS;%(PreprocessorDefinitions)
プリプロセッサの定義 ※ Release
NDEBUG;WNT;OCC_CONVERT_SIGNALS;%(PreprocessorDefinitions)

言語の項目に移動し、C++ 言語標準で C++17 を選択します。

プリコンパイル済みヘッダーの項目に移動し「使用しない」に変更します。

リンカーに移動し、追加のライブラリディレクトリに以下のパスを設定します。

追加のライブラリディレクトリ ※ Debug
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\libd
追加のライブラリディレクトリ ※ Release
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\lib

入力の項目に移動し、追加の依存ファイルに以下の値を設定します。

追加の依存ファイル
TKBin.lib;TKBinL.lib;TKBinTObj.lib;TKBinXCAF.lib;TKBO.lib;TKBool.lib;TKBRep.lib;TKCAF.lib;TKCDF.lib;TKD3DHost.lib;TKD3DHostTest.lib;TKDCAF.lib;TKDE.lib;TKDECascade.lib;TKDEGLTF.lib;TKDEIGES.lib;TKDEOBJ.lib;TKDEPLY.lib;TKDESTEP.lib;TKDESTL.lib;TKDEVRML.lib;TKDraw.lib;TKernel.lib;TKExpress.lib;TKFeat.lib;TKFillet.lib;TKG2d.lib;TKG3d.lib;TKGeomAlgo.lib;TKGeomBase.lib;TKHelix.lib;TKHLR.lib;TKIVtk.lib;TKIVtkDraw.lib;TKLCAF.lib;TKMath.lib;TKMesh.lib;TKMeshVS.lib;TKOffset.lib;TKOpenGl.lib;TKOpenGles.lib;TKOpenGlesTest.lib;TKOpenGlTest.lib;TKPrim.lib;TKQADraw.lib;TKRWMesh.lib;TKService.lib;TKShHealing.lib;TKStd.lib;TKStdL.lib;TKTObj.lib;TKTObjDRAW.lib;TKTopAlgo.lib;TKTopTest.lib;TKV3d.lib;TKVCAF.lib;TKViewerTest.lib;TKXCAF.lib;TKXDEDRAW.lib;TKXMesh.lib;TKXml.lib;TKXmlL.lib;TKXmlTObj.lib;TKXmlXCAF.lib;TKXSBase.lib;TKXSDRAW.lib;TKXSDRAWDE.lib;TKXSDRAWGLTF.lib;TKXSDRAWIGES.lib;TKXSDRAWOBJ.lib;TKXSDRAWPLY.lib;TKXSDRAWSTEP.lib;TKXSDRAWSTL.lib;TKXSDRAWVRML.lib

ビルド前のイベントに移動し、コマンドラインに以下を設定します。

コマンドライン
set "OCCT_SRC=$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\bin"
xcopy /Y /D "%OCCT_SRC%\*.dll" "$(TargetDir)"

set "TP_DIR=$(ProjectDir)NativeOcct\opencascade-8.0.0\3rdparty-vc14-64"
for /d %%d in ("%TP_DIR%\*") do (
    if exist "%%d\bin" (
        xcopy /Y /D "%%d\bin\*.dll" "$(TargetDir)"
    )
    if exist "%%d\bin\win64" (
        xcopy /Y /D "%%d\bin\win64\*.dll" "$(TargetDir)"
    )
)

補足
コマンドラインは、以下の手順で値を変更してください。

① <編集...> をクリックします。

② 赤枠内にペーストしてください。

4-4. C# プロジェクトの作成

次に C# のプロジェクトを作っていきます。今回は安定と信頼(レガシー)の Windows Forms (.NET Framework) を選択します。

プロジェクト名は「OcctApp」で作成します。

OcctApp プロジェクトの参照マネージャーから OcctLibrary を追加します。

構成マネージャーを開き、OcctApp プロジェクトのビルド構成を x64 に設定します。Debug / Release 共に x64 にしてください。

OcctApp プロジェクトのプロパティからビルドイベントに移動し、ビルド後イベントのコマンドラインに以下を設定します。

ビルド後イベントのコマンドライン
xcopy /Y /D "$(SolutionDir)OcctLibrary\bin\$(Platform)\$(Configuration)\*.*" "$(TargetDir)"

5. 動作確認

Open CASCAD Technology のバージョン情報を取得する処理を実装して、動作確認してみます。OcctLibrary プロジェクトに OcctVersion クラスを追加します。

OcctVersion.h
#pragma once

using namespace System;

namespace OcctLibrary
{
    public ref class OcctVersion
    {
    public:
        static String^ Get();
    };
}
OcctVersion.cpp
#include "pch.h"
#include "OcctVersion.h"

#include <Standard_Version.hxx>

using namespace OcctLibrary;

String^ OcctVersion::Get()
{
    return gcnew String(OCC_VERSION_STRING);
}

OcctApp プロジェクトで、以下のように実装します。今回は Form 起動時にバージョン情報をメッセージボックスで表示するようにしています。

MainForm.cs
using System.Windows.Forms;
using OcctLibrary;

namespace OcctApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            // 起動時に OCCT のバージョン情報を表示する。
            var occtVersion = OcctVersion.Get();
            MessageBox.Show($"OCCT Version: {occtVersion ?? string.Empty}");
        }
    }
}

無事に表示されました。

おわりに

最初の関門は突破しました。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?