フォト
無料ブログはココログ
2024年3月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

« 430 SSB 塩塚高原移動風景 | トップページ | Windows 10 Update による AutoCADファンクションキーの不具合 »

2020年9月 2日 (水)

StrCmpLogicalW を使用したファイル名のエクスプローラー風ソート

AutoCADから3DPDFへの掃き出しを実施した場合
レイヤ表示がAutoCADで表示される順番ではなく
アットランダムになってしまいます。

DWG→3DPDFへ吐き出すソフトも色々ありますが
どれで試してみてもダメでした。

そこで、AutoCADで表示されている順番にレイヤごとに
図面を新図にコピペし、その後3DPDFへ吐き出してみると、レイヤ順に並ぶ様です。

その作業をいちいち手作業でするのも大変なので
プログラム化することに。
まずは図面から、レイヤごとにレイヤ名で図面を別図面に掃き出す。
吐き出した図面要素は削除する。
次に吐き出された図面ごとにソートした順番に図面を読み込みする事で
3DPDFへ吐き出せば、いい感じで並ぶはずでしたが、順番がどうもおかしい。

問題はソートにありました。
エクスプローラー風にソートするにはWindowsのAPI【StrCmpLogicalW】を使用する必要があるらしいです。

実際にAutoCAD VBAの記述をソートの部分だけですが、下記に記載しておきます。
参考になればご使用下さい!

FNAME に取得したレイヤ名が配列として格納されています。
FCOUNT はレイヤの数

 

 

Option Explicit

Private Declare PtrSafe Function StrCmpLogicalW Lib "SHLWAPI.DLL" _
          (ByVal lpStr1 As String, ByVal lpStr2 As String) As Long

Public Sub LSORT()

Dim I As Long
Dim J As Long
Dim TMP As String
Dim FNAME(1000) As String
Dim Fcount As String

For I = 1 To Fcount

    For J = I To Fcount
   
        If StrCmpLogicalW(StrConv(FNAME(J), vbUnicode), StrConv(FNAME(I), vbUnicode)) < 0 Then
           
            TMP = FNAME(I)
       
            FNAME(I) = FNAME(J)
       
            FNAME(J) = TMP
       
        End If
       
    Next J
       
Next I

End Sub



« 430 SSB 塩塚高原移動風景 | トップページ | Windows 10 Update による AutoCADファンクションキーの不具合 »

CAD」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 430 SSB 塩塚高原移動風景 | トップページ | Windows 10 Update による AutoCADファンクションキーの不具合 »