先日書いた記事の補足です。
GHC#_Text3dとTextEntityについて、描画とBakeした際のふるまいの比較
TextEntity Classのオブジェクトはコンストラクタで作成する方法と、静的メソッドで作成する2種類があります。
先日の記事で、静的メソッドで作成したTextEntityは位置合わせがGrasshopper上の描画に反映されず、寸法スタイルを修正する必要があると書きましたが、これを回避するためにコンストラクタで作成する方法があります。
全体のコードは以下に置いています。
TextEntityWithTwoMethodComparison
まず事前に配置Planeや寸法スタイルを定義した上で・・・
//Text描画の基準面をそれぞれ作っておく。
Plane planeTextWithSM = new Plane(new Point3d(0, 300, 0), Vector3d.ZAxis);
Plane planeTextWithC = new Plane(new Point3d(900, 300, 0), Vector3d.ZAxis);//出力して表示するためのList。
ListplnList = new List ();
plnList.Add(planeTextWithSM);
plnList.Add(planeTextWithC);//TextEntityの場合は寸法スタイルを設定する必要がある。
DimensionStyle dimStyle = this.FindDimStyleByName("dim_GH-Bake");
まず、TextEntityオブジェクトを作成するのに静的メソッドを利用した書き方は以下ですが、その後にサイズや位置合わせなどを設定しても元の寸法スタイルの値が優先され、反映されませんでした。(Bake時には寸法スタイルに上書きされる形で反映されている。)
//静的メソッドによる作成。
txtEntityWithSM =
TextEntity.Create("TextWithSM", planeTextWithSM, dimStyle, false, 0, 0);
//GH上の描画には反映されず、Bake時に反映される。
txtEntityWithSM.TextHeight = 40;
txtEntityWithSM.Justification = TextJustification.BottomCenter;
次にコンストラクタで作成する方法ですが、TextEntityには引数なしのコンストラクタがありますので、まずこれでオブジェクトを作ってから、プロパティに必要な値をセットしていきます。
//コンストラクタによる作成。
txtEntityWithC = new TextEntity();
txtEntityWithC.Plane = planeTextWithC;
txtEntityWithC.ParentDimensionStyle = dimStyle;
//TextをSetする前に各種設定をSetする。
txtEntityWithC.TextHeight = 40;
txtEntityWithC.Justification = TextJustification.BottomCenter;//一通り設定してから最後にTextをSetする。
txtEntityWithC.PlainText = "TextWithC";//TextをSetした後にサイズや位置合わせをしてもGH上の描画には反映されない。(Bake時には反映される。)
//txtEntityWithC.TextHeight = 40;
//txtEntityWithC.Justification = TextJustification.BottomCenter;
ただし、注意が必要なのは、まず静的メソッドと同じように配置Planeと寸法スタイルを定義した後、テキストを設定する前にサイズや位置合わせを設定する必要があります。
なぜかわかりませんが、テキストを設定した後にサイズや位置合わせを設定してもGH上の描画に反映されません。(これもBake時には反映されます。)
2020/5/23の時点ではバグな気もしますが、現状の仕様を備忘録として記しておきます。
コメントをするにはログインしてください。