2

最終的に (できれば!) Excel またはテキスト ファイルからパーツ番号を読み取り、パーツ ライブラリの構成を検索して、対応するコンポーネントをアセンブリに挿入し、対応する構成をアクティブにするマクロを作成しています。

部品やアセンブリの挿入に関して問題があります。部品を挿入するマクロを記録することから始めました。ものすごく単純。ファイルパスと xyz 座標が必要な AddComponent コマンドを使用します。これは問題なく動作しているように見えましたが、グリッチが発生し続けました。私が理解できたことから、このコマンドは、パーツまたはアセンブリが Solidworks の現在のセッション中に既に使用されていない限り、パーツまたはアセンブリを挿入できません。

Option Base 1 
Dim swApp As Object 
Dim Part As Object 
Dim SelMgr As Object 
Dim boolstatus As Boolean 
Dim longstatus As Long, longwarnings As Long 
Dim Feature As Object 
Dim filepath As String 
Dim partnum(8) As String 
Dim posx As Integer 
Dim posy As Integer 
Dim posz As Integer 
Dim x As Integer 

Sub main() 
Set swApp = Application.SldWorks 
Set Part = swApp.ActiveDoc 
Set SelMgr = Part.SelectionManager 

posx = 0 
posy = 0 
posz = 0 

partnum(1) = "07010304" 
partnum(2) = "07010318" 
partnum(3) = "07010321" 
partnum(4) = "07010331" 

For x = 1 To 8
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Parts\"+ partnum(x) + ".SLDPRT" 
Part.AddComponent filepath, posx, posy, posz 
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Assemblies\" + partnum(x) + ".SLDASM" 
Part.AddComponent filepath, posx, posy, posz 
posx = posx + 1.5 
Next 

End Sub 

このマクロは、07010304.SLDPRT、07010318.SLDPRT などの 3 つのパーツ (これらのパーツで構成される) を取得し、それらをアクティブなアセンブリに挿入します。

  1. アセンブリを開いてマクロを実行しても、何も起こりません。
  2. アセンブリを開いてキューブを挿入し、削除してからマクロを実行すると、キューブが挿入されます。
  3. アセンブリを開いてすべてのパーツを挿入し、それらを削除してからマクロを実行すると、すべてのパーツが挿入されます (ただし、2 つのパーツで構成されるアセンブリは挿入されません)。
  4. アセンブリを開いてキューブと球のアセンブリを挿入し、それを削除してマクロを実行すると、キューブ、球、およびキューブと球のアセンブリが挿入されますが、円柱は挿入されません。
  5. パーツが 1 つのアセンブリで使用されていて、別のアセンブリが開いているかアクティブになっている場合、マクロは新しいウィンドウで正常に機能します。

結論として、これを修正するにはどうすればよいですか?発生しているように見える「SW メモリにロード」に依存しないパーツを挿入する別のコマンドはありますか? それとも、それを実行してパーツを SW メモリにロードするコマンドですか?

4

1 に答える 1

4

まず、使用している SolidWorks のバージョンがありません。そのため、どの API メソッド バリアントを使用する必要があるかを知っておくことが重要です (つまり、SolidWorks 2013 では、AddComponent ではなく AddComponent5 になります)。

この重要な詳細の一部として、SolidWorks はアセンブリへの構成部品の追加を、既にお気づきのとおりに処理します。

SolidWorks API ドキュメントによると、コンポーネントをアセンブリに追加するには、まずそのファイルをメモリにロードする必要があります。ファイルはOpenDocメソッドを使用してメモリにロードされます (これは、使用している SolidWorks のバージョンに依存することに注意してください。2013 では、 ISldWorks::OpenDoc6またはISldWorks:: OpenDoc7 を使用する必要があります)。

ISldWorks::OpenDoc6を呼び出しても、ModelDoc2 (ドキュメント) がアセンブリまたは図面ドキュメントで (メモリ内で) 既に開かれている場合、アクティブ化および表示されないことも考慮する必要があります。

ISldWorks::OpenDoc6は、ModelDoc2 (IModelDoc2) への参照を返します。取得した参照を使用して ISldWorks::ActivateDoc2 または ISldWorks::IActivateDoc3 に渡し、アクティブ化して表示します。

FileOpenNotify2、ActiveDocChangeNotify、ActiveModelDocChangeNotify などの関連する OpenDoc イベントも確認して、ドキュメントの読み込みとアクティブ化のプロセスを微調整および制御する必要があります。

関連する API ドキュメント ページ (API 2013) へのリンクを次に示します。

AddComponent5

http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~AddComponent5.html

OpenDoc6

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc6.html

OpenDoc7

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc7.html

AddComponent5 例: コンポーネントとメイトを追加

http://help.solidworks.com/2013/English/api/sldworksapi/add_component_and_mate_example_vb.htm

于 2014-01-19T14:09:42.103 に答える