2005年12月19日
SolidWorks API「実行速度の比較」
SolidWorks2006がリリースされて数ヶ月が経過しました。皆さん新機能使いこなせるようになりましたか?
新機能も重要なのですが既存機能の処理能力を確認するために
SolidWorks2004、SolidWorks2005、SolidWorks2006
での実行速度を比較してみることにしました。
今回は以下の処理を行うマクロを作成しました。
1.Partsファイル新規作成
2.正方形スケッチを作成
3.押し出し
4.2~3を100回繰り返し
サンプルマクロはこちらから...
このサンプルでは出来るだけ描画に影響されないように作成しました。
具体的には
・スケッチ描画を行わない
・ビュー更新時の動画を行わない
が設定されています。
また、マクロ実行時にはSolidWorks上にファイル(図面・部品・アセンブリ)が開かれていない状態で行いました。
動作環境は以下の通りです。
| OS | WindowsXP Pro SP2 |
|---|---|
| CPU | Pentium4 2.4GHz |
| Memory | 1GByte |
| SolidWorks2004 | SP5.0 |
|---|---|
| SolidWorks2005 | SP5.0 |
| SolidWorks2006 | SP2.0 |
計測結果は以下のようになりました。
| SolidWorks2004 | SolidWorks2005 | SolidWorks2006 | |
|---|---|---|---|
| 1回目 | 12.969 | 13.672 | 11.828 |
| 2回目 | 4.984 | 6.563 | 6.859 |
| 3回目 | 5.172 | 6.656 | 6.828 |
| 4回目 | 4.859 | 6.531 | 6.797 |
| 5回目 | 4.859 | 6.656 | 6.938 |
| 平均 | 4.9685 | 6.6015 | 6.8555 |
SolidWorks2004との互換性で上記計測結果は
SelectByID および FeatureExtrusion を使用しましたが
SolidWorks2005とSolidWorks2006では
SelectByID2 および FeatureExtrusion2 が提供されています。
こちらを使用した計測結果は以下のようになりました。
| SolidWorks2005 | SolidWorks2006 | |
|---|---|---|
| 1回目 | 13.344 | 12.250 |
| 2回目 | 6.438 | 6.922 |
| 3回目 | 6.500 | 6.984 |
| 4回目 | 6.469 | 7.031 |
| 5回目 | 6.547 | 7.000 |
| 平均 | 6.4885 | 6.98425 |
皆さんの環境ではどのようになりましたでしょうか?
マクロ実行前の予想では
SolidWorks2006>SolidWorks2005>SolidWorks2004
速い<------------------------------------------------> 遅い
と想定していましたが正反対の結果となりました。
また、SolidWorks2006でSelectByID2 および FeatureExtrusion2を使用した結果が
SelectByID および FeatureExtrusionを使用した結果より若干遅くなっているのも以外でした。
(計測誤差の範囲ですが・・・)
投稿者 Tsuda : 21:00 | コメント (0) | トラックバック
2005年08月11日
SolidWorks API「視点の切り替え」
今回は視点の切り替えについて考えてみましょう
SolidWorksは標準で「正面」「平面」「右側面」の3平面を持っています。
各平面と座標系との関係は
正面:XY座標
平面:XZ座標
右側面:YZ座標
となっています。
ここまで読んで「あれっ、ちょっとおかしいな」と思った方はいますでしょうか?
自分の目線で形状を考えた場合、正面とは形状を前から見るのでXZ座標に、平面(上面)は形状を上から見るのでXY座標になるのではないかと考えました。
そう考えるとSolidWorksの正面と平面は逆になりますので、今回は正面と上面の表示を行うためのマクロを作成してみましょう。
まずサンプルマクロを取得/実行してください。こちらから...
処理は至って単純で
正面ボタンを押したときはXXXを使用して平面ビューを
上面ボタンを押したときはXXXを使用して正面ビューを
呼び出しているだけです。
これだけではおもしろくないので別の方法で画面切替を行ってみましょう。
以下のコードを UserForm1 に追加してください
Private Sub View_Change() Dim Xform As SldWorks.MathTransform Dim data As Variant Set Xform = swModel.ActiveView().Orientation3 data = Xform.ArrayData data(0) = 1# data(1) = 0# data(2) = 0# data(3) = 0# data(4) = 1# data(5) = 0# data(6) = 0# data(7) = 0# data(8) = 1# Xform.ArrayData = data swModel.ActiveView().Orientation3 = Xform swModel.ViewZoomtofit2 End Sub
次に上面ボタンの処理を変更してみましょう。
CommandButton1_Click内の処理を上記関数呼び出しに変更します。
Private Sub CommandButton1_Click()
View_Change
' swModel.ShowNamedView2 "*正面", 1
End Sub
修正したら実行してみましょう。
どうでした?修正前と同じように動作しましたか?
正面ボタンの処理も修正します。
CommandButton1_Click内の処理を上記関数呼び出しに変更します
Private Sub CommandButton2_Click()
View_Change
swModel.ViewRotXPlusNinety
' swModel.ShowNamedView2 "*底面", 6
' swModel.ViewZoomtofit2
End Sub
View_Changeの処理は必ずXY平面を画面に表示するため
ViewRotXPlusNinetyでX軸を回転させてXZ平面を画面に表示させます。
ではまた!
投稿者 Tsuda : 18:18 | コメント (0) | トラックバック
2005年07月21日
SW API「指定点と自由曲面との交点を求める その2」
前回の「指定点と自由曲面との交点を求める」の続きを今回も行います。
前回のサンプルで使用した部品ファイル(surface.sldprt)を開き、3Dスケッチの座標値をX:-50,Y:-55,Z:50mmに変更してください。
変更できない方はこちらから修正した部品ファイルをダウンロードしてください。
この形状を元に前回作成したマクロを実行してみましょう。
実行前に3Dスケッチとサーフェスを選択状態にしてください。
なお、マクロ実行時にUserForm1のダイアログまたはプログラムをカレントにしてから実行してください。
どうですか?
XY平面(正面)から見ると3Dスケッチはサーフェスの外側にあるのに交点が求められたのが確認できたでしょうか。
今回は自由曲面との交点を求めるのが目的ですので実際にはサーフェスが存在しない場所の交点を求めてしまうと困ってしまいます。
そこで、前回のマクロに処理を追加してみましょう。
1.求めた交点と選択曲面との距離を求める API:Face::GetClosestPointOn
上記処理を追加したマクロのダウンロードはこちらから
実際の処理は以下のようになります
vCrossPointArray = swFace.GetClosestPointOn(vPointArray(i+0),vPointArray(i+1),vPointArray(i+2))
XLen = vCrossPointArray(0) - vPointArray(i + 0)
YLen = vCrossPointArray(1) - vPointArray(i + 1)
ZLen = vCrossPointArray(2) - vPointArray(i + 2)
GetLength = Sqr((XLen * XLen) + (YLen * YLen) + (ZLen * ZLen))If GetLength < 0.00000001 Then
Set swSketchPt = swModel.CreatePoint2(vPointArray(i+0),vPointArray(i+1),vPointArray(i+2))
End If
現状ではGetLengthの値が1.0e-8未満の時は求めた点が曲面上であるとの判定を行っていますが、必要な精度に応じて値を変更してみればよいでしょう。
投稿者 Tsuda : 16:19 | コメント (0) | トラックバック
2005年05月26日
SW API「指定点と自由曲面との交点を求める」
SolidWorksの標準機能にはないんだけどAPIを使用したら出来ないかな?
と思うような機能を作っていきます。
特に断りがない場合SolidWorks2005上で動作することとします。
今回のお題目は
「指定点と自由曲面との交点を求める」
SolidWorksの「測定」で「点」と「自由曲面」を与えると自由曲面との最短点との距離を求めることが出来ます。
でも、点をある方向に投影させて自由曲面との交点を求める事は出来ないの?
と考えたのが今回の「お題目」のきっかけでした。

今回は交点の求め方がメインなので投影する方向はZ方向に固定して考えています。
ではどのような手順で実現することが出来るか考えてみましょう。
1.選択点を通る直線を作成する。 必ず曲面との交点を求めるために直線の始点Zを-1m、終点Zを+1mとします。 API:Modeler::CreateLine 2.直線のB-Splineデータを取得 API:Curve::ConvertLineToBCurve 3.B-SplineデータからB-Spline Curveを作成 API:Modeler::CreateBsplineCurve 4.B-Spline Curveと選択曲面から交点を取得 API:Surface::IntersectCurve曲面との交点を求めるために1から3の手順でB-Spline Curveを作成します。
(他に簡単な手順で作成する方法があるかもしれません・・・)
サンプルマクロでは上記処理を実行するために
フォーム上にボタン一つの単純なダイアログを用意しました。
サンプルのダウンロードはこちらから
ボタン押下で処理が実行します。
ボタン押下前に必ず点と曲面を選択状態にしてください。

ちなみにSolid Bodyに対しては RayIntersections で求める事が出来ます。
次回も点と曲面の交点を求める方法について考えてみます