相変わらず、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はプロパティで提供されて
いるはずなのですが、
C#ではプロパティにありません。
変わりに「get_Text()」「set_Text()」が提供されています。
何なんでしょう・・・。
UI部分は次回で。