C#SolidWorks二次開発API ---プレビューを取得

最近、一部のネチズンは、エクスプローラーに表示される画像に似たプレビュー画像をインターフェイスに表示する方法を尋ねました。
今日はみんなで見つけてみようと思います。まず、共有した中国語訳「プレビューで検索すると、
ここに画像の説明を挿入
便利なものがいくつか見つかりました。
これを最初に見てください。最初の列はWebヘルプのアドレスです。もちろん、ローカルAPIヘルプでも確認できます。
ここに画像の説明を挿入
ここに画像の説明を挿入
vbaには別の例があります。ここに画像の説明を挿入
問題は、exeが十分でないため、このヘルプはプロセスでのみ使用できることです。
以下を見て続けて、別の方法がある。
ここに画像の説明を挿入
この方法は、説明に従って使用しているように見える:
。文書の指定されたプレビュービットマップを取得し、指定したファイル名を使用してWindowsビットマップファイル(.BMP)として保存
ここに画像の説明を挿入
書きますコード:

ISldWorks swApp = Utility.ConnectToSolidWorks();

            //此处路径请自己确保存在。
            string fileName = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\bodies.sldasm";

            string configName = "Default";

            string bitmapPathName = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\bodies.bmp";

            var status = swApp.GetPreviewBitmapFile(fileName, configName, bitmapPathName);

            if (System.IO.File.Exists(bitmapPathName))
            {
    
    
                swApp.SendMsgToUser("预览图获取完成。");
            }

結果の色は少し奇妙で理想的ではありません。
ここに画像の説明を挿入
ここで検討した後、Solidworksを使用して処理しなくても、システムリソースマネージャーのプレビューを直接取得できます。
これは直接Baiduです。リソースを探してください。
クラスを見つけて直接呼び出してファイルを取得しました。サフィックスは.liで、これは非常に奇妙な形式です。
ここに画像の説明を挿入
ファイルを見つけて、現在のパーツフォルダにコピーします。サフィックスを.bmpに変更します。
ここに画像の説明を挿入

これは、システムのAPIを使用して取得されます。単一の構成パーツのみである場合に最適です。これは、異なる構成のプレビューを取得できないようです。

APIヘルプを照会すると、プレビュー画像を取得する機能もDocument ManagerAPIで提供されていることがわかりました。
ここではキーが必要です。本物のユーザーの場合は、対応するエージェントを見つけて入手してください。バージョンごとにキーが異なり、会社名が含まれています。

ここに画像の説明を挿入
まだ例がありますので、試してみましょう。
テスト中に、documentmgrは2018年以降64ビットプログラムのみをサポートしていることがわかりました。したがって、テストするときは、コンパイラオプションをx64ビットに変更する必要があります。そうしないと、dllインスタンスを作成できないことが常に報告されます。

 			const string sLicenseKey = "your_license_key"; //这个不好公开。请下载代码            

            string sDocFileName = fileName;

            SwDMClassFactory swClassFact = default(SwDMClassFactory);
            SwDMApplication swDocMgr = default(SwDMApplication);
            SwDMDocument swDoc = default(SwDMDocument);
            SwDMDocument10 swDoc10 = default(SwDMDocument10);
            SwDmDocumentType nDocType = 0;
            SwDmDocumentOpenError nRetVal = 0;
            SwDmPreviewError nError = 0;

            // Determine type of SOLIDWORKS file based on file extension
            if (sDocFileName.EndsWith("sldprt"))
            {
    
    
                nDocType = SwDmDocumentType.swDmDocumentPart;
            }
            else if (sDocFileName.EndsWith("sldasm"))
            {
    
    
                nDocType = SwDmDocumentType.swDmDocumentAssembly;
            }
            else if (sDocFileName.EndsWith("slddrw"))
            {
    
    
                nDocType = SwDmDocumentType.swDmDocumentDrawing;
            }
            else
            {
    
    
                // Probably not a SOLIDWORKS file,
                // so cannot open
                nDocType = SwDmDocumentType.swDmDocumentUnknown;
                return;
            }

            swClassFact = new SwDMClassFactory();
            swDocMgr = (SwDMApplication)swClassFact.GetApplication(sLicenseKey);
            swDoc = (SwDMDocument)swDocMgr.GetDocument(sDocFileName, nDocType, true, out nRetVal);
            Debug.Print("File = " + swDoc.FullName);
            Debug.Print("  Version          = " + swDoc.GetVersion());
            Debug.Print("  Author           = " + swDoc.Author);
            Debug.Print("  Comments         = " + swDoc.Comments);
            Debug.Print("  CreationDate     = " + swDoc.CreationDate);
            Debug.Print("  Keywords         = " + swDoc.Keywords);
            Debug.Print("  LastSavedBy      = " + swDoc.LastSavedBy);
            Debug.Print("  LastSavedDate    = " + swDoc.LastSavedDate);
            Debug.Print("  Subject          = " + swDoc.Subject);
            Debug.Print("  Title            = " + swDoc.Title);

            swDoc10 = (SwDMDocument10)swDoc;
            // SwDMDocument10::GetPreviewBitmap throws an unmanaged COM exception
            // for out-of-process C# console applications
            // Use the following code in SOLIDWORKS C# macros and add-ins
            object objBitMap = swDoc10.GetPreviewBitmap(out nError);
            System.Drawing.Image imgPreview = PictureDispConverter.Convert(objBitMap);
            imgPreview.Save(bitmapPathName, System.Drawing.Imaging.ImageFormat.Bmp);
            imgPreview.Dispose();

            Debug.Print("    Preview stream   = " + swDoc10.PreviewStreamName);

実行が成功すると、間違った色のプレビュー画像が正常に置き換えられます。

ここに画像の説明を挿入

もちろん、それはまだ最後に保存された構成のサムネイルにすぎません。
他の構成を取得するにはどうすればよいですか?
このメソッドの注釈に説明があります。他のメソッドが必要です。
ここに画像の説明を挿入

例があります:
構成例のPNGプレビュービットマップとストリームを取得する(C#)
コアはここにあり、構成をトラバースする必要があります。もちろん、構成名がわかっている場合は、一度トラバースする必要はありません。
私は次のコードをテストしていません

 swCfgMgr = swDoc.ConfigurationManager;
 
                Debug.Print("File = " + swDoc.FullName);
                Debug.Print("Active configuration name = " + swCfgMgr.GetActiveConfigurationName());
                vCfgNameArr = (string[])swCfgMgr.GetConfigurationNames();
 
                foreach (string vCfgName in vCfgNameArr)
                {
    
    
 
                    swCfg = (SwDMConfiguration7)swCfgMgr.GetConfigurationByName(vCfgName);
                    // SwDMConfiguration7::GetPreviewPNGBitmap throws an unmanaged COM exception 
                    // for out-of-process C# console applications
                    // Use the following code in SOLIDWORKS C# macros and add-ins  
                    object objBitMap = swCfg.GetPreviewPNGBitmap(out nError);
                    System.Drawing.Image imgPreview = PictureDispConverter.Convert(objBitMap);
                    imgPreview.Save("C:\\temp\\" + vCfgName + ".PNG", System.Drawing.Imaging.ImageFormat.Png);
                    imgPreview.Dispose();
 
                    Debug.Print("   " + vCfgName);
                    Debug.Print("     PNG preview stream = " + swCfg.PreviewPNGStreamName);
 
                    Debug.Print(" ");
                }

おすすめ

転載: blog.csdn.net/zengqh0314/article/details/106011590