C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

WPFを利用してみる1

相変わらず、C#でCATIAのマクロを作成するメリットが見出せないでいます。
・マクロのボリュームが小さい
・UIが無い
の2点が原因かなぁと感じているので、今後はその辺を考慮した上でのマクロ
を考えて行きたいと思います。

VBAとの差別化を考えた際に思いつくのが、WPFです。
マクロでのUIは、Formでも十分な気がしますが、せっかくWPFが提供されて
いるので利用していきたいです。

単純にWPFウィンドウ上のテキスト内容が、Drawのシート上にあるテキストと
連携するテストマクロです。

//cs
namespace CatWPFTest {
    using DRAFTINGITF;//Catiaのライブラリ
    using INFITF;//Catiaのライブラリ

    class CatiaContainer {//①
        public CatiaContainer(INFITF.Application cat) {
            Catia = cat;
            Setting();
        }

        public void Setting() {
            DrawDoc = Catia.ActiveDocument as DrawingDocument;
            Views = DrawDoc.Sheets.ActiveSheet.Views;
            Selection = DrawDoc.Selection;
        }

        public INFITF.Application Catia { get; private set; }
        public DrawingDocument DrawDoc { get; private set; }
        public DrawingViews Views { get; private set; }
        public Selection Selection { get; private set; }
        public DrawingView View { get; set; }
        public DrawingTexts Texts {
            get {
                return View.Texts;
            }
        }

        public void SetActiveView() {
            View = Views.ActiveView;
        }
    }

    class DrawText {//②
        private DrawingText _txt;
        public DrawText(DrawingText txt) {
            _txt = txt;
        }
        public string Txt {
            get { return _txt.get_Text(); }
            set {
                if (_txt.get_Text() == value) return;
                _txt.set_Text(value);
            }

        }
    }
}

①こちらの物をちょこっと改良しただけです。
Viewに基準線を入れる2 - C#ATIA

WPFと連帯させるためのDrawingTextを保持しているだけのクラスです。
通常双方向で制御するには、INotifyPropertyChangedインターフェースを
実装する必要があるのですが、WPF→CATIAしか行わないため、単純な
Bindingだけですみました。
(実装させましたが無意味でした。考えてみればDrawでの変更通知を受け
取る事が出来ないです。)

それ以上に謎なのは、DrawingTextクラスのTextはプロパティで提供されて
いるはずなのですが、
f:id:kandennti:20150508182153j:plain

C#ではプロパティにありません。
f:id:kandennti:20150508182150j:plain

変わりに「get_Text()」「set_Text()」が提供されています。
何なんでしょう・・・。

UI部分は次回で。