goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

Go言語を使いCATIAで任意の直線を描く方法

2025-03-15 07:04:01 | Golang、Go言語
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` ライブラリを使用することで簡単に操作できます。


最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。