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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 図面の参照先変更について 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: 図面の参照先変更について  (閲覧数 10498 回)
dede
新人さん
*

オフライン

投稿: 4



I'm a llama!

プロファイルを見る
図面の参照先変更について
« 投稿日: 2011/05/23 - 09:05:07 »
引用して返信

初め投稿させていただきます。

現在、図面の参照先ファイルを変更するマクロを作成したいと思っているのですが、なかなかうまくいきません。
 ↓下記のように通常の操作をすれば出来るようなのですが・・・。
SolidWorks ヒント一覧
11 図面やアセンブリを開く際に [開く] ダイアログ ボックスの [参照] ボタンを使用して、参照部品を変更することができます。

API等見たのですが、よく分かりません。

誰かご存知の方、いらっしゃいますでしょうか?

よろしくお願い致します。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面の参照先変更について
« 返信 #1 投稿日: 2011/05/23 - 14:20:59 »
引用して返信

dedeさん、はじめまして。

たぶん、「SolidWorks API」を使わずに、「SolidWorks Document Manager API」を使うしかないと思います。

SolidWorks Document Manager APIに関しては、このサイトのダウンロードページにある「SwDocumentMgrテストプログラム」が参考になると思います。
実際に利用するメソッドは、SwDMDocument のReplaceReferenceメソッドになると思います。
あと、SolidWorks Document Manager APIを使うにはライセンスキーが必要になります。
SW2008からSDM1.0ライブラリが使えない
SWDocumentManagerAPI について
SolidWorks Document Managerのライセンス
なんかが、参考になると思います。

一応参考までに、私が作ったことのあるコードを抜き出しておきます。
Code:

    Public Function ReplaseSwReference(ByVal SwFilePath As String, ByVal OriginalReference As String, ByVal ReplacementReference As String) As String

        ' エラー
        If File.Exists(SwFilePath) = False Then
            Return "File Nothing!"
        End If
        If sdmSwDMApplication Is Nothing Then
            Return "SwDocMgr Error!"
        End If

        ' ファイルの種類を取得
        Dim SwFileType As Integer = 0
        Select Case New FileInfo(SwFilePath).Extension.ToLower
            Case ".sldprt" : SwFileType = SwDocumentMgr.SwDmDocumentType.swDmDocumentPart
            Case ".sldasm" : SwFileType = SwDocumentMgr.SwDmDocumentType.swDmDocumentAssembly
            Case ".slddrw" : SwFileType = SwDocumentMgr.SwDmDocumentType.swDmDocumentDrawing
            Case Else
                Return "Not Solidworks File!"
        End Select

        ' ファイルを開く(Read/Write)
        Dim intResult As Integer
        Dim sdmSwDMDocument13 As SwDocumentMgr.SwDMDocument13 = sdmSwDMApplication.GetDocument(SwFilePath, SwFileType, False, intResult)
        If intResult <> SwDocumentMgr.SwDmDocumentOpenError.swDmDocumentOpenErrorNone Then
            sdmSwDMDocument13 = Nothing
            Return "File Open Error!"
        End If

        ' 参照関係を取得(ReplaceReferenceを使う前にGetAllExternalReferences4が必要)
        Dim sdmSearchOption As SwDocumentMgr.SwDMSearchOption = sdmSwDMApplication.GetSearchOptionObject
        Dim BrokenRef As Object = Nothing
        Dim IsVisual As Object = Nothing
        Dim TimeStamp As Object = Nothing
        Dim Reference As Object = sdmSwDMDocument13.GetAllExternalReferences4(sdmSearchOption, BrokenRef, IsVisual, TimeStamp)

        ' 参照関係を置換
        Dim OriginalReferenceInSwDM As String = ""
        Dim ReplacementReferenceInSwDM As String = ""
        For Each Ref As String In Reference
            If Ref.ToLower = OriginalReference.ToLower Then
                OriginalReferenceInSwDM = Ref
                Exit For
            End If
            If Ref.ToLower = ReplacementReference.ToLower Then
                ReplacementReferenceInSwDM = Ref
                Exit For
            End If
        Next
        If OriginalReferenceInSwDM <> "" Then
            ' 参照関係を置換
            Call sdmSwDMDocument13.ReplaceReference(OriginalReferenceInSwDM, ReplacementReference)
            sdmSwDMDocument13.Save()
            sdmSwDMDocument13.CloseDoc()
            sdmSwDMDocument13 = Nothing
        ElseIf ReplacementReferenceInSwDM <> "" Then
            ' 既に置き換わっているので何もしない
            sdmSwDMDocument13.CloseDoc()
            sdmSwDMDocument13 = Nothing
        Else
            sdmSwDMDocument13.CloseDoc()
            sdmSwDMDocument13 = Nothing
            Return "Referrence is not (" & OriginalReference & ")"
        End If

        ' 終了
        Return ""
    End Function
議長に報告する   記録済み
dede
新人さん
*

オフライン

投稿: 4



I'm a llama!

プロファイルを見る
Re:図面の参照先変更について
« 返信 #2 投稿日: 2011/05/23 - 16:36:51 »
引用して返信

Makoron様
回答ありがとうございます。

早速試してみたいと思います。 
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:図面の参照先変更について
« 返信 #3 投稿日: 2011/05/24 - 00:17:41 »
引用して返信

一応、SldWorks::ReplaceReferencedDocumentでも可能みたいです
しかし、変更前の参照ファイル名を取得するには参照元ドキュメントを開いてModelDoc2::GetExternalReferenceNameなどでファイル名を取得する必要があるので、Makoronさんの方法を取った方がスマートだと思います

既に置き換える前後のファイル名が決まっている場合は、ReplaceReferencedDocumentでも十分かもしれません。

ご参考まで
議長に報告する   記録済み
dede
新人さん
*

オフライン

投稿: 4



I'm a llama!

プロファイルを見る
Re:図面の参照先変更について
« 返信 #4 投稿日: 2011/05/24 - 08:35:45 »
引用して返信

hisa 様
回答ありがとうございます。

SldWorksでも出来るのですね
とても、参考になります。

作りながら使いやすい方を選択したいと思います。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面の参照先変更について
« 返信 #5 投稿日: 2011/05/24 - 17:11:20 »
引用して返信

'
引用元: hisa 投稿日 '.timeformat('1306163861').'   
'
一応、SldWorks::ReplaceReferencedDocumentでも可能みたいです
しかし、変更前の参照ファイル名を取得するには参照元ドキュメントを開いてModelDoc2::GetExternalReferenceNameなどでファイル名を取得する必要があるので、Makoronさんの方法を取った方がスマートだと思います

既に置き換える前後のファイル名が決まっている場合は、ReplaceReferencedDocumentでも十分かもしれません。

ご参考まで

hisaさん、参考になります
図面の場合、図面を開いている時には置き換え処理が出来ないので、てっきりSolidWorksAPIでは出来ないものと思い込んでいました・・・
(hisaさん、さすがです)

ちなみに、SolidWorks Document Manager APIを使ったとしても、「何を」「何に」は決まっていないと出来ないので、
SolidWorks API とさほど違いは無いと思います。
(dedeさん、SolidWorks API を使う方向が良いと思いますよ。)
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:図面の参照先変更について
« 返信 #6 投稿日: 2011/05/25 - 00:48:44 »
引用して返信


引用:
ちなみに、SolidWorks Document Manager APIを使ったとしても、「何を」「何に」は決まっていないと出来ないので、
SolidWorks API とさほど違いは無いと思います。
(dedeさん、SolidWorks API を使う方向が良いと思いますよ。)


任意のフォルダ内で、変更前の参照ファイル名を元に変更後のファイル名が決まるような状態が複数存在すると、
ModelDoc2から参照ファイル名を取るより、SolidWorks Document Manager APIの方がレスポンスが良いのかなぁ・・・
と思ったことと、SldWorks::ReplaceReferencedDocumentは参照元ドキュメントを閉じた状態でないと成功しないので、
SolidWorks Document Manager APIの方がスマートになりそうだと思いました

議長に報告する   記録済み
dede
新人さん
*

オフライン

投稿: 4



I'm a llama!

プロファイルを見る
Re:図面の参照先変更について
« 返信 #7 投稿日: 2011/05/25 - 10:53:55 »
引用して返信

makoron様、hisa様
色々アドバイスありがとうございます。

初めて投稿したのですが、とても参考になり投稿してよかったと思っています。

マクロは色々便利なので今後も勉強していきます
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 図面の参照先変更について 前のトピック 次のトピック
ジャンプします: