読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

外部ファイルから点を3Dに取り込む1

CSVファイルの様な座標値をCATIAに取り込む機能は、Drawにはテーブル
としてはあるのですが、3D側には標準的には無いのだろうと思います。
国内外のサイトを見てもそれなりに需要があるようで、機能を補填する
ようにマクロがチラホラ見受けられます。

http://www.coe.org/p/fo/st/thread=16586
(こちらはCATIA-Excel間のマクロだろうと思います)

http://mmy.zyns.com/usage/index.cgi?mode=view&no=12
(こちらはExcelからCATIAにインポートするマクロ)

細かくソースコードを見ていないのですが、何れもループ内で
hybridShapeFactoryクラスのAddNewPointCoordメソッドを利用しているので、
取り込んだ座標値毎にインスタンスを生成し、形状セットに入れているようです。


過去に"Unofficial CATIA User Forum"で、ここなさんが記載していた
マクロの高速化したものをご紹介した際のソースコードを見てみると
スピードテスト1 - C#ATIA

点のインスタンス自体は最初にダミーの一個を作成したのみで、

vba
'------------ Create RefPoint ------------------------------
    oPt = Array(0, 0, 0)
    Set oHybShpPt = oHybShpFact.AddNewPointCoord(oPt(0), oPt(1), oPt(2))
    Call oHybBdy.AppendHybridShape(oHybShpPt)
    Call oPart.UpdateObject(oHybShpPt)

実際に取り込まれる点は、座標値を変更・更新し、データム化したものを
形状セットに入れています。

'vba
'------------ Create DetumPoints ------------------------------
    For i = 1 To 500
        oPt(0) = oPt(0) + 10
        Call oHybShpPt.SetCoordinates(oPt)
        Call oPart.UpdateObject(oHybShpPt)
        Set oHybShpPtExp = oHybShpFact.AddNewPointDatum(oHybShpPt)
        Call colMyObj1.add(oHybShpPtExp)'後にこれを形状セットに入れている
    Next

ここなさんの記載では、"毎回インスタンスを生成するより、こちらの方が高速ですよ"
との事で、実際速かったです。
最初にご紹介したExcelからのマクロ等も、この手法で行うと若干高速化出来る
だろうと思うのですが、直してみようという気力が全くわかないです・・・。
と言うのも、そもそもCATIAがインストールされているPCにExcelがインストールされている
とは限らないので(自分がそうなんです)、もっとお手軽にやりたいと
思いませんかね?