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!!
|
|
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!!
|
|
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様 色々アドバイスありがとうございます。
初めて投稿したのですが、とても参考になり投稿してよかったと思っています。
マクロは色々便利なので今後も勉強していきます
|
|
|
|