仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 11:46:10
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 関係式の編集について 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: 関係式の編集について  (閲覧数 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を取得し
そのドキュメントの関係式を編集すればできました。

本当にありがとうございました。
これからもよろしくお願いします。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 関係式の編集について 前のトピック 次のトピック
ジャンプします: