前回 Python
今回はC#です。
Solidworksの中で使えるVBAじゃなくて,他の言語に手を出したくなるのは,
そもそもVBAに不満があるからなんですが,
その不満の一つがコード補完です。
これが理想,Visual Studio 2022 上のC#の動作です。
自分でつけた変数名も,ライブラリ(上の例だとExtensionとかSelectById2とか)も補完してくれます。
VBAだと,自分で作った変数名を補完してくれません。
またPython(win32comライブラリ経由)では,ライブラリ側の補完ができません。
ということで,理想通りに補完してくれる C#でもマクロを作ってみた体験談です。
"C# Solidworks API"とかでweb検索すると,アドインの開発関連記事がヒットして,
「VBAの代わりにC#を使う」ような話がでてきません。
むしろPythonを使う話のほうが出てくるくらい。なぜ?
やってみたぼくの予想は「ややこしいから」なんですが,
とはいえVBA使うよりは気がのるなとおもいました。
ポイントは,テンプレートとか使わず「コンソールアプリ」として作ることです。
余談: 実は過去ぼくがこのサイトに書いたブログ(http://swjug.org/blog/view/29615/)で,山本さんや辻さんが「テンプレート使わずにできる」と教えてくれてたんですが,当時のぼくは全く理解できておらずアドイン開発コースに突っ込んでいってました。いま同じ場所に戻ってきて,8年経ってとうとう理解しました。山本さん辻さんありがとうございます。
1. [Visual Studio](https://visualstudio.microsoft.com/ja/vs/whatsnew/) をダウンロード/インストール
Community Edition, .NET デスクトップ開発
2. C# Console APP で新規プロジェクトをつくる
3. ツリーで,dependencies(依存関係)を右クリックから「COM参照の追加」
→sldworks で検索すると,「sldworks type library」が出てくるのでチェックをつける
※solidworks で検索すると出てくる 「SOLIDWORKS20** Constant type library」もつけておくと便利。
これで準備完了。
あとは公式ヘルプのExample(たとえばこれ)をコピペすると動きます。
とりあえず動きました。ソースコードはこちら
やってみた感想は,「ぼくのような趣味プログラマには,ほんのちょっと敷居が高い」でした。
Python のときは,テキトウに書いたら動いた!
という感想だったんですが,今回はすんなりはいきませんでした。
ポイント
というわけで,ぼくのような設計者が,自分の環境で動けばいいだけのオレオレコードを書くにはちょっと敷居が高いな,という感想でした。
とはいえそのままgit commitもできるし,少なくともある程度気合(?)を入れて作るマクロであれば,VBAで書くよりはやる気になるなと思いました。
コメント
山本さん新谷さんコメントありがとうございます。
Constant type library も忘れないうちに追記しておきました。
初期化は,
文字列だったら空文字とか,数字なら0とか.0とかいれとくんですけど,
IRefPlaneとりあえず入れとけと言われると困る・・・
というか,自分の脳内で把握できる規模のコード(しか書かないので)だと,
冗長だなーと,感じてしまいますね。まあその態度がバグを生み出すんでしょうけど。笑
C# は私もちょっとだけ触ってみたい言語です。ちなみに私の楽器はB♭
> 初期化されてない変数使用を許してくれない
私も初期化しなくても取りあえず動く言語(PHPやJavascript)をよく使いますが、少し複雑なプログラムになると予想しない値が入ってしまうことがあるので、最近は必ず変数を初期化するよう注意しています。
最初は面倒くさいですが、新しい変数を使う前に初期化することになれてしまえばなんてことないですし、探すのに苦労するバグが減ると思えばかえって楽になるはず。
初期化されてない変数使用を許してくれない
西田さん、お久しぶりです!
『ざっくり手順』の3のところで"SOLIDWORKS20** Constant type library"も追加しておくと良いですよ。
SwConst.swDocumentTypes_e.swDocPART などもインテリセンスで対応してくれます。
と言うより、参照追加してないと 1 とかを直接入力する感じになります。
私はもっぱらVB.Net派なのでC#での細かな説明はできないのですが、
言語仕様の違いだけだと思うので『ポイント』に書いてあることは同じです。
でも、もう慣れちゃったので気にならない(/・・)/
ちなみに、Visual Studio CodeだとPythonのコード補完機能を動かせるかもしれないです。