タイトルの日本語が怪しいのですが、要はこちらのコマンドで
Assy → Part にしたものを、再度Assy状態にしたい と言うことです。
CATProductからCATPartを作成 | CATIAの小技
このコマンドは古いリリースでは表側に無く、裏コマンドだったんですよね。
"データを軽くして客先に支給したい" "ノウハウの流出防止の為" 等
イロイロと理由はあるかと思いますが、少なくても干渉チェックは
Assy状態の方が楽ですね。
で、Part→Productにする為のマクロは、恐らく世間にもあると思います。
が、Freeであるものかどうかは不明です。
(僕は見つけられませんでした)
ボディだけですが、マクロを作ってみました。
'vba 'PartからProductテスト Option Explicit Sub CATMain() Dim ActDoc As PartDocument Set ActDoc = CATIA.ActiveDocument Dim ActPath As Variant ActPath = Array(ActDoc.FullName) Dim TopDoc As ProductDocument Set TopDoc = CATIA.Documents.Add("Product") Dim Prods As Products Set Prods = TopDoc.Product.Products Dim Sel As Selection Set Sel = TopDoc.Selection Dim BeforePDoc As PartDocument Set BeforePDoc = Include_Part(Prods, ActPath) Dim Pt As Part Set Pt = BeforePDoc.Part Dim LeafBodies As Collection Set LeafBodies = Get_LeafBodyLst(Pt.Bodies) Dim Bdy As Body Dim NewPDoc As PartDocument For Each Bdy In LeafBodies Set NewPDoc = Init_Part(Prods, Bdy.Name) With Sel .Clear .Add Bdy .Copy .Clear .Add NewPDoc.Part .PasteSpecial "CATPrtResultWithOutLink" '"CATPrtResult" End With NewPDoc.Part.Update Next With Sel .Clear .Add Prods.Item(1) .Delete End With End Sub 'ルートで空ではないボディ取得 Private Function Get_LeafBodyLst(ByRef Bdys As Bodies) As Collection Set Get_LeafBodyLst = Nothing Dim Bdy As Body Dim Lst As Collection: Set Lst = New Collection For Each Bdy In Bdys If Bdy.InBooleanOperation = False And Bdy.Shapes.Count > 0 Then Lst.Add Bdy End If Next If Lst.Count < 1 Then Exit Function Set Get_LeafBodyLst = Lst End Function Private Function Init_Part(ByRef Prods As Variant, _ ByVal PtNum As String) As PartDocument Call Prods.AddNewComponent("Part", PtNum) Set Init_Part = Prods.Item(Prods.Count).ReferenceProduct.Parent End Function Private Function Include_Part(ByRef Prods As Variant, _ ByVal Path As Variant) As PartDocument Call Prods.AddComponentsFromFiles(Path, "All") Set Include_Part = Prods.Item(Prods.Count).ReferenceProduct.Parent End Function
何てことはありません。ひたすらコピペしているだけなので。
例外処理等、細かな事はしていませんので、たったこれだけです。
実は、悩んでいるのはここからなんです。
このマクロでは、新たに作成したPartやProductは保存していません。
各Partは、元のBody名で保存するのがスジだろうと思うのですが、
困ったことに日本語が含まれている可能性が有り、CATIA V5では
日本語ファイル名はNGだからです。
そこでカタカナをローマ字に変換する手法や関数が無いのか?
調べては見たのですが・・・
・力技っぽいもの(ちょっと遅そう)
かなローマ字変換ユーザー関数 - ExcelとかVBAとかの練習帳
・カタカナをローマ字に変換は無いものの、流用出来そうな物
文字種変換〔StrConv〕(WSH)
・カタカナを探し出す方法
正規表現でカタカナを検索 | inside of tactsystem
ん~完全でなくても良いんですが、どれもこれも個人的には響かなかったです。
(半角カタカナが、更に扱いを悪くしているような・・・)
正攻法なら正規表現なのですが、分厚い本が出版できるほどの
奥深いものなので、僕には理解が出来ないです。
何か良い方法無いでしょうかね?