動的テキスト注釈用の SketchUp Ruby API での add_3d_text の実装に関する問題

概要

問題の詳細は何ですか? 私はモデル内にテキスト注釈を追加するプロセスを自動化するための SketchUp 用の Ruby スクリプトに取り組んでいます。特定のコンポーネント (「Enkeltreol」と「Dobbeltreol」) のインスタンスをカウントし、その合計をモデル内にテキストとして表示する必要があります。この目的で add_3d_text メソッドを使用しようとしていますが、解決できない TypeError が発生し続けます。

何を試し、何を期待していましたか? add_3d_text メソッドを使用してテキスト注釈を作成しようとしましたが、スクリプトによってモデル内にテキストが生成されないか、TypeError が発生します。私は、モデル内の特定の位置に配置されたコンポーネントの数を示すテキスト注釈が表示されることを期待していました。代わりに、コンソールはエラーを報告し、テキストは表示されません。

SketchUp Pro バージョン 23.1.341 を使用しています。

質問:

1: 動的テキスト注釈をモデルに追加するために SketchUp Ruby API で add_3d_text を使用する正しい方法は何ですか?

2: TypeError を解決し、モデルの特定の時点でテキストが正しく追加されるようにするにはどうすればよいですか?

3: SketchUp Ruby API 内に、モデル コンポーネントに基づいてテキスト情報を動的に表示するための代替アプローチはありますか?

Ruby を使用して SketchUp に動的テキスト注釈を正しく実装する洞察や例があれば、大変助かります。

これは私が実行しようとしているコードの例です:

# Initialize counters
enkeltreol_count = 0
dobbeltreol_count = 0

# Start an operation so it can be undone in one step if needed
model = Sketchup.active_model
model.start_operation('Add Count Text', true)

# Iterate through all entities in the model for counting
definitions = model.definitions
definitions.each do |definition|
  definition.instances.each do |instance|
    if instance.definition.name == "Enkeltreol"
      enkeltreol_count += 1
    elsif instance.definition.name == "Dobbeltreol"
      dobbeltreol_count += 1
    end
  end
end

# Calculate the total number of shelf units
total_shelf_units = enkeltreol_count + (dobbeltreol_count * 2)

# Create a text string that includes the counts
count_text = "Enkeltreol units: #{enkeltreol_count}\nDobbeltreol units: #{dobbeltreol_count}\nTotal shelf units: #{total_shelf_units}"

# Define parameters for the 3D text
font = "Arial"
bold = false
italic = false
height = 10.0 # Height of the text
z = 0.0 # Extrusion depth of the 3D text

# Define the point where the 3D text will be inserted
point = Geom::Point3d.new(10, 0, 0)

# Correctly add the 3D text to the model, placed flat like a label
entities = model.active_entities
entities.add_3d_text(count_text, TextAlignLeft, font, bold, italic, height, z, false, point)

# Commit the operation
model.commit_operation

# Output to the console
puts "Counts have been added to the model as 3D text."

出力

「カウントが 3D テキストとしてモデルに追加されました。」 エラー: #<TypeError: false から float への暗黙的な変換はありません>

解決策

add_3d_text の使用法にいくつかのエラーがあります。

SketchUp API ドキュメントの説明によると、次のようになります。

#add_3d_text(string, alignment, font, is_bold = false, is_italic = false, letter_height = 1.0, tolerance = 0.0, z = 0.0, is_filled = true, extrusion = 0.0) ⇒ Boolean

使用法には許容値が欠落しており、最後のパラメータは 3D 位置ではなく押し出しの高さです。

新しく作成したテキストを配置する場合は、グループを作成し、テキストをグループに追加して、グループ変換を設定します。

xform = Geom::Transformation.new([10, 0, 0])
group = Sketchup.active_model.entities.add_group()

tolerance = 0
extrusion = 0
group.entities.add_3d_text(count_text, TextAlignLeft, font, bold, italic, height, tolerance, z, false, extrusion)
group.transformation = xform