Go言語でCATIAを操作する場合、CATIAの **Automation API**(COMベース)を使用します。Go言語は標準でCOMをサポートしていないため、WindowsのCOM APIを利用するために、`go-ole` などの外部ライブラリを使用する必要があります。以下に、Go言語でCATIAを操作し、ユーザーから座標を入力させて直線を描画する方法を説明します。
---
### Go言語でCATIAを操作する手順
1. **`go-ole` ライブラリのインストール**
- Go言語でCOMを操作するために、`go-ole` ライブラリを使用します。
- 以下のコマンドでインストールします:
```bash
go get github.com/go-ole/go-ole
go get github.com/go-ole/go-ole/oleutil
```
2. **CATIAのインスタンスを作成**
- `go-ole` を使用してCATIAアプリケーションのインスタンスを作成します。
3. **直線を描く**
- ユーザーから座標を入力させ、指定された座標に基づいて直線を描画します。
---
### サンプルプログラム
以下は、Go言語でCATIAを操作し、ユーザーから座標を入力させて直線を描画するプログラムの例です。
```go
package main
import (
"fmt"
"log"
"github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
)
func main() {
// COMライブラリの初期化
ole.CoInitialize(0)
defer ole.CoUninitialize()
// CATIAアプリケーションのインスタンスを作成
catia, err := oleutil.CreateObject("CATIA.Application")
if err != nil {
log.Fatalf("CATIAアプリケーションの起動に失敗しました: %v", err)
}
defer catia.Release()
// CATIAを表示
oleutil.PutProperty(catia, "Visible", true)
// 新しいパートドキュメントを作成
docs := oleutil.MustGetProperty(catia, "Documents").ToIDispatch()
doc := oleutil.MustCallMethod(docs, "Add", "Part").ToIDispatch()
part := oleutil.MustGetProperty(doc, "Part").ToIDispatch()
// ユーザーから座標を入力
var x1, y1, z1, x2, y2, z2 float64
fmt.Println("始点の座標を入力してください (x1 y1 z1): ")
fmt.Scan(&x1, &y1, &z1)
fmt.Println("終点の座標を入力してください (x2 y2 z2): ")
fmt.Scan(&x2, &y2, &z2)
// 直線を描画
factory := oleutil.MustGetProperty(part, "HybridShapeFactory").ToIDispatch()
line := oleutil.MustCallMethod(factory, "AddNewLinePtPt", x1, y1, z1, x2, y2, z2).ToIDispatch()
oleutil.MustCallMethod(part, "Update")
fmt.Println("直線が描画されました。")
}
```
---
### プログラムの説明
1. **COMライブラリの初期化**
- `ole.CoInitialize(0)` でCOMライブラリを初期化します。
- プログラム終了時に `ole.CoUninitialize()` で解放します。
2. **CATIAの起動**
- `oleutil.CreateObject("CATIA.Application")` を使用してCATIAアプリケーションのインスタンスを作成します。
3. **新しいパートドキュメントの作成**
- `oleutil.MustCallMethod(docs, "Add", "Part")` で新しいパートドキュメントを作成します。
4. **ユーザーからの座標入力**
- ユーザーに始点と終点の座標を入力させます。
5. **直線の描画**
- `oleutil.MustCallMethod(factory, "AddNewLinePtPt", x1, y1, z1, x2, y2, z2)` を使用して、指定された座標間に直線を描画します。
6. **エラーハンドリング**
- エラーが発生した場合、`log.Fatalf` でエラーメッセージを表示します。
---
### 必要な準備
1. **`go-ole` ライブラリのインストール**
- Go言語でCOMを操作するために、`go-ole` ライブラリをインストールします。
2. **CATIAのインストール**
- CATIAが正しくインストールされ、ライセンスが有効であることを確認します。
3. **Goの開発環境**
- Go言語の開発環境を用意します。
---
### 注意点
- **CATIAのバージョン**
CATIAのAPIはバージョンによって異なる場合があります。使用しているCATIAのバージョンに合わせてAPIを確認してください。
- **エラーハンドリング**
CATIAの操作中にエラーが発生する可能性があるため、適切なエラーハンドリングを実装してください。
- **COMオブジェクトの解放**
Go言語ではガベージコレクションが自動的に行われますが、必要に応じて明示的にCOMオブジェクトを解放することもできます。
---
### 実行手順
1. Go言語の開発環境を用意します。
2. `go-ole` ライブラリをインストールします。
3. 上記のコードを `main.go` として保存します。
4. 以下のコマンドでプログラムをビルドして実行します:
```bash
go run main.go
```
プログラムを実行すると、CATIAが起動し、ユーザーが指定した座標に基づいて直線が描画されます。Go言語はCOMとの連携がやや複雑ですが、`go-ole` ライブラリを使用することで簡単に操作できます。