PythonでSOLIDWORKSマクロ

SOLIDWORKS マクロをVBAで作られている方は誰しも、
Pythonで書けないかな?ということを考えたことがある、
のではないかと思うのですが、あまり記事がないので体験記事を書いてみます。
 
Python使われたことのない方に少し補足すると、
Pythonのいいところは「こういうのないかな?」と思いつくようなことは、
だいたい誰かがすでに便利なライブラリを公開してくれていて、導入も簡単なことです(個人的な感想)
 
■ そういう便利なライブラリがあつまっているところ(PyPI)にpySWというパッケージがあった!
と、期待したんですが,
ファイル開閉のほかは変数を触るだけのもので期待とは違いました。(githubのレポジトリ)
 
残念。なかった。
 
ですが、せっかくなのでもう少し進んでみました。
 
■ 2015年の下記ブログ記事に解説がありました。
 
<概要>
  • SOLIDWORKS APIは,COMコンポーネントなのでwin32comというpythonライブラリを通してアクセスできる。
  • 自動変換できない引数があり,手動変換が必要な場合がある
  • ほとんどのAPI動かせるけど例外もあると書いてある
 記事に書いてある通りに書いてみると,あっさりselectbyID2からスケッチを選択することができました。
image
 
なおぼくの実験環境は都合によりSOLIDWORKS 2016/Python3.9 です。
 
■ SelectByID2ができたくらいでは,使えているのかどうかわからないので,
過去VBAで書いたマクロを移植してみました
(oneStepPlanes: 複数の点と参照平面を選択して実行すると,点の位置に参照平面を量産してくれるマクロ)
 
こんな感じかなーと雰囲気で書き直したら,なんと一発で動きました!
image
 
 
ただ,書いてて思ったんですけど,
例えば参照平面を追加するのに,
 
featureMgr.InsertRefPlane(1, 0, 4, 0, 0, 0)
 
こんなわけのわからないメソッド発行するんじゃなくて,こんな感じで書きたいんですよね・・
 
InsertRefPlane(seed_plane, point)
 
というふうなラッパーが苦労すればかけるのかは,またそのうち試してみます。

コメント

コメント表示順: リミット: オートロード:
  • 西田将也 1013 日前

    Solidworks VBA(.swp)から起動するようのバッチファイルを作ってみました

    https://github.com/nm802/solidworksmacro/tree/main/OneStepPlanesPy

    エラーメッセージ表示にもうちょい工夫が必要か。
    Solidworksに帰ってきてからmsgbox出したいですがそれは無理そう(戻り値受けとる方法がない)
    python内でmsgbox出すのも気が進まないので,
    とりあえずエラーのときはコマンドプロンプト内にprintしてそのまま止めてあります。

  • 新谷淳 1026 日前

    とりあえず こちらの SOLIDWORKS2017 と Python 3.7.4 で oneStepPlanes が動くのを確認できました。
    そのままだとダメだったので、

    pip install -U wheel pywin32

    で、win32com ライブラリをインストールしたら動きました。

    Python はだいぶ前に少し触っただけでほとんど忘れてますが、もう一度勉強してなにか作ってみます。
    一括変換なんかのマクロをサーバーで実行されられたら便利そうです。

    pip install -U wheel pywin32
  • 西田将也 1027 日前

    新谷さんコメントありがとうございます。

    しばらく他の言語触ってたら,
    VBAはやっぱりIDEとかバージョン管理の問題とかがすぐ許容できなくなりますね。
    SOLIDWORKSマクロをたくさん触ってるとまた 実行の楽さでまたVBAに戻ったり迷走するんですが笑
    Pythonは書くの楽なのでマクロ作るのも楽しくなりそうです。

  • 新谷淳 1028 日前

    Surprised すごいです。Python なら AI のライブラリが豊富なので、SOLIDWOKS API で AI で自動設計なんてできるかも。

    昔、ユーザ会のメンバーに Ruby で SW API を使っている人がいて、私もそれに刺激を受けて PHP でもできるかトライしてみたけど情報が全然なくて断念しましたが、Python がつかえるならこっちの方が良いですね。

    データベースやWebとのインターフェースを使おうとすると VBA より Python の方が使いやすそうなので、試してみます。