C#ATIA

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

Draw内のTextをサイズ毎に色を付ける

面白そうなテーマだったので、挑戦してみました。
catia font size identification - DASSAULT: CATIA products - Eng-Tips

思ったより短時間に幾つものレスが付いて、ビックリ。
本当は、ズバリの物を投げちゃうことを快く思わない人も
いるのは知っているのですが、こっちも腕試しでやってみました。
(色々と細かなチェックは省きました)

通常であれば、文字を探しつつ、文字サイズを調べ、色を変更・・・
みたいな処理をするのだろうと思います。
実際に動くコードではないけれど、正攻法的にはこんな感じかな?

for each view in views
  for each txt in view.texts
    size = clng(txt.getfontsize())
    sel.Clear
    select case size
      case < 1
        sel.add txt
        vis.vis.SetRealColor(r,g,b,1)
      case < 2
        sel.add txt
        ・・・

これだと、恐らく遅いんですよね。それ以上にNestが深い・・・。


だから僕は、
・全部のテキストをかき集める
・文字サイズ毎にコレクションに投入
・同じ色になるものを選択状態にして色を変更
の方法にしました。
要は同じ色になるものをまとめて選択しプロパティを
開いて色を変更している感じです。

恐らく、色の種類分しか変更処理しないので正攻法より
速いはず。特に文字の数が多い場合は。


今回の個人的な収穫としては
・Scripting.DictionaryはkeyがLong型でもイケる。
 (Collectionはkeyはstring型のみだったはず)
・Scripting.DictionaryはvalueがCollection型でもイケる。
・DrawingTextPropertiesのColorを変更しても色が変わらない。
 (何の為のプロパティなのだろう・・・)

但し、質問者さんのお望みが僕の想定を超えている・・・。