C#ATIA

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

指定した平面から、穴の中心点を作成する2

こちらの続きです。
指定した平面から、穴の中心点を作成する1 - C#ATIA

C#化です。

まずは、いつも通りのCATIAの主要なオブジェクトを維持しておく
CatiaContainerクラスです。 何とか標準化したいところです。

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

        public void Setting() {
            PartDoc = Catia.ActiveDocument as PartDocument;
            Selection = PartDoc.Selection;
            Part = PartDoc.Part;
            HybridShapeFactory = Part.HybridShapeFactory as HybridShapeFactory;
        }

        public INFITF.Application Catia { get; set; }
        public Selection Selection { get; private set; }
        public PartDocument PartDoc { get; private set; }
        public Part Part { get; private set; }
        public HybridShapeFactory HybridShapeFactory { get; private set; }
        public HybridBody HybridBody { get; set; }
    }

続いて拡張メソッドを維持するCatExtensionクラスです。

//cs
    static class CatExtension {
        public static IEnumerable<T> AsEnumerable<T>(this INFITF.Selection sel) {//①
            if (sel.Count2 < 1) { yield break; }
            for (int i = 1; i <= sel.Count2; i++) {
                yield return (T)sel.Item2(i).Value;
            }
        }

        public static Reference AsReference(this AnyObject Any) {//②
            return CatHelper.State.Part.CreateReferenceFromObject(Any);
        }
    }

①:こちらでは
CATIAのコレクションクラスで、お手軽にLinqを使いたい - C#ATIA
  "ToEnumerable" と言う名称にしていましたが、よく調べるとLinqには
  "AsEnumerable"があり、機能的にも同様なので、名称を変えました。
  又、前回はコレクションクラス用でしたが、Selection用にしました。

②:今回は頻繁にReference化の必要があるため用意しました。



残りの部分は次回以降にしたいと思います。