Random Thoughts |
One good turn gets most of the blankets.
|
言語 |
|
|
|
フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27) |
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 11:46:10 |
|
|
|
著者
|
トピック: 関係式の編集について (閲覧数 3699 回) |
|
sayu
新人さん
オフライン
投稿: 10
I'm a llama!
|
|
関係式の編集について
« 投稿日: 2010/02/09 - 09:43:04 » |
|
いつもお世話になっています。 今までCATIAのマクロは作成したことがあるのですが SolidWorksのマクロは始めたばっかりなのでよろしくお願いします。
質問なのですが関係式を編集する方法が分かりません。 マクロで記録すると
Part.DeleteAllRelations Part.AddRelation """a""= 1000" Part.AddRelation """b""= 200"
となります。 ( 関係式 "a" = 100 , "b" = 200 が存在し "a" = 1000に編集したマクロ)
一旦全部削除して全て作成し直しているようです。 元々存在している関係式が取得できているのが前提となっているのですが取得する方法はありますか?
または全て削除するのではなく一つだけ編集する方法はないでしょうか?
分かる方がいらっしゃいましたらご教授お願い致します。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:関係式の編集について
« 返信 #1 投稿日: 2010/02/09 - 10:55:45 » |
|
sayuさん、はじめまして。 こんな感じでどうですか?
Sub main()
Dim swApp As SldWorks.SldWorks Dim swModelDoc2 As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModelDoc2 = swApp.ActiveDoc
' 関係式へアクセスするためにSldWorks.EquationMgrオブジェクト取得 Dim swEquationMgr As SldWorks.EquationMgr Dim intEquationCount As Integer Set swEquationMgr = swModelDoc2.GetEquationMgr intEquationCount = swEquationMgr.GetCount
' 関係式の情報を取得 Dim i As Long Dim strMsg As String Dim strEquation As String Dim blnActive As Boolean Dim dblValue As Double For i = 0 To intEquationCount - 1 ' 関係式 strEquation = swEquationMgr.Equation(i) ' 関係式のアクティブ状態 blnActive = Not (swEquationMgr.Suppression(i)) ' 関係式の要求値 dblValue = swEquationMgr.Value(i) ' strMsg = strMsg & "アクティブ=" & blnActive & "/関係式=" & strEquation & "/次の値を求める=" & dblValue & vbCrLf Next '関係式を表示 MsgBox (strMsg) End Sub
|
|
|
|
sayu
新人さん
オフライン
投稿: 10
I'm a llama!
|
|
Re:関係式の編集について
« 返信 #2 投稿日: 2010/02/09 - 17:16:20 » |
|
Makoronさん、始めまして。 回答ありがとうございました。 EquationMgrというのがあるのを知りませんでした。
今作成しようとしているのはアセンブリに含まれているパートの 指定した関係式だけを同じ値に統一するというものです。 Makoronさんのソースを参考にして以下のマクロを実行したのですがうまくいきません。
'// 関係式を編集 Private Sub EditRelation(iName As String) 'iName : 01234-56789@Assem1 というような形で入ってくる
' 対象となるパートを編集する boolstatus = swModelDoc2.Extension.SelectByID2(iName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) swModelDoc2.EditPart swModelDoc2.ClearSelection2 True ' 関係式へアクセスするためにSldWorks.EquationMgrオブジェクト取得 Dim swEquationMgr As SldWorks.EquationMgr Dim intEquationCount As Integer Set swEquationMgr = swModelDoc2.GetEquationMgr intEquationCount = swEquationMgr.GetCount
' 関係式の情報を編集 Dim i As Long Dim strMsg As String Dim strEquation As String Dim dblValue As Double For i = 0 To intEquationCount - 1 ' 関係式 strEquation = swEquationMgr.Equation(i) ' "横幅"という関係式が存在すれば値を修正 If InStr(strEquation, """横幅""=") > 0 Then swEquationMgr.Equation(i) = """横幅""=460" End If Next End Sub
このマクロはアセンブリに含まれているパートを順番にアクティブにし "横幅"という関係式があれば値を"460"にするものです。 引数のiNameには正しい値が入っていて各パートが順番に編集中になっているのは確認しました。
ただ関係式を取得する時に毎回トップアセンブリの関係式を取得しているようです。 どのように修正すれば良いか教えていただけないでしょうか?
よろしくお願い致します。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:関係式の編集について
« 返信 #3 投稿日: 2010/02/09 - 18:25:05 » |
|
引用: ' 対象となるパートを編集する boolstatus = swModelDoc2.Extension.SelectByID2(iName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) swModelDoc2.EditPart swModelDoc2.ClearSelection2 True
' 関係式へアクセスするためにSldWorks.EquationMgrオブジェクト取得 Dim swEquationMgr As SldWorks.EquationMgr Dim intEquationCount As Integer Set swEquationMgr = swModelDoc2.GetEquationMgr
|
この部分で、本来なら構成部品のswModelDoc2オブジェクトを取得しないとだめなのに、 アセンブリ自身のswModelDoc2オブジェクトをそのまま利用しているためだと思います。
それらしいサンプルを作ってみたので、 『アセンブリ自身のswModelDoc2オブジェクト』と 『構成部品のswModelDoc2オブジェクト』の違いを確認しながら作って行くと 問題なく動作すると思います。
Sub main()
Dim swApp As SldWorks.SldWorks Dim swModelDoc2 As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModelDoc2 = swApp.ActiveDoc If swModelDoc2.GetType <> swDocumentTypes_e.swDocASSEMBLY Then MsgBox "このマクロはアセンブルのみで動作します。" End If ' AssemblyDocの取得 Dim swAssemblyDoc As SldWorks.AssemblyDoc Set swAssemblyDoc = swModelDoc2 ' トップレベル構成部品の関係式編集 Dim lngCount As Long Dim vntComponents As Variant lngCount = swAssemblyDoc.GetComponentCount(True) vntComponents = swAssemblyDoc.GetComponents(True) For i = 0 To lngCount - 1 Dim swComponent2 As SldWorks.Component2 Dim swCompModelDoc2 As SldWorks.ModelDoc2 Set swComponent2 = vntComponents(i) Set swCompModelDoc2 = swComponent2.GetModelDoc ' 関係式編集 Call EditRelation(swCompModelDoc2) Next End Sub
Private Sub EditRelation(CompModelDoc2 As SldWorks.ModelDoc2) ' 関係式へアクセスするためにSldWorks.EquationMgrオブジェクト取得 Dim swEquationMgr As SldWorks.EquationMgr Dim intEquationCount As Integer Set swEquationMgr = CompModelDoc2.GetEquationMgr intEquationCount = swEquationMgr.GetCount
' 関係式の情報を編集 Dim i As Long Dim strMsg As String Dim strEquation As String Dim dblValue As Double For i = 0 To intEquationCount - 1 ' 関係式 strEquation = swEquationMgr.Equation(i) ' "横幅"という関係式が存在すれば値を修正 If InStr(strEquation, """横幅""=") > 0 Then swEquationMgr.Equation(i) = """横幅""=460" End If Next End Sub
|
|
|
|
sayu
新人さん
オフライン
投稿: 10
I'm a llama!
|
|
Re:関係式の編集について
« 返信 #4 投稿日: 2010/02/12 - 15:48:42 » |
|
Makoronさん、ありがとうございました。 おかげさまで思っているようなものができました。
マクロで記録したときはパートごとに編集に入っていたので そうしないとできないとばっかり思っていました。 おっしゃられているようにGetModelDocでModelDoc2を取得し そのドキュメントの関係式を編集すればできました。
本当にありがとうございました。 これからもよろしくお願いします。
|
|
|
|
|
|
|
|