概要
windows11に、sketchup6を入れてみた。
rubyで、3Dを書く。
解決できていない、課題がある。
Geminiに、聞いてみた。
プロンプト
sketchupで、entities.intersect_withを使って交差を削除するrubyスクリプト
回答
はい、SketchUpで intersect_with
を使って交差部分を削除するRubyスクリプトの基本的な例をご紹介します。
このスクリプトでは、選択された2つのグループ(またはコンポーネントインスタンス)の交差部分を見つけ、その交差部分を削除します。
# 選択されているエンティティが2つであることを確認
selection = Sketchup.active_model.selection
if selection.length != 2
UI.messagebox("2つのグループまたはコンポーネントを選択してください。")
return
end
# 選択された2つのエンティティを取得
entity1 = selection[0]
entity2 = selection[1]
# エンティティがグループまたはコンポーネントインスタンスであることを確認
unless (entity1.is_a?(Sketchup::Group) || entity1.is_a?(Sketchup::ComponentInstance)) &&
(entity2.is_a?(Sketchup::Group) || entity2.is_a?(Sketchup::ComponentInstance))
UI.messagebox("選択されたエンティティはグループまたはコンポーネントである必要があります。")
return
end
model = Sketchup.active_model
entities = model.active_entities
# 交差部分のジオメトリを作成するための新しいグループを作成
intersection_group = entities.add_group
# intersect_withメソッドを使って交差部分のジオメトリを生成
intersection_group.intersect_with(entity1.transformation, entity1.entities, entity2.transformation, entity2.entities)
# 交差部分の面を取得
intersection_faces = intersection_group.entities.grep(Sketchup::Face)
# 交差部分の面を削除
model.start_operation("交差部分を削除", true)
intersection_faces.each do |face|
face.erase!
end
intersection_group.erase! # 交差部分のグループを削除
model.commit_operation
UI.messagebox("交差部分を削除しました。")
スクリプトの解説:
- 選択の確認: 最初に、ユーザーが2つのエンティティを選択しているかどうかを確認します。
- エンティティの取得: 選択された2つのエンティティを変数に格納します。
-
エンティティの種類の確認: 選択されたエンティティがグループまたはコンポーネントインスタンスであることを確認します。
intersect_with
メソッドは、グループまたはコンポーネントインスタンスに対して使用するのが一般的です。 - モデルとエンティティの取得: 現在のモデルとアクティブなエンティティのコレクションを取得します。
- 交差部分のグループ作成: 交差部分のジオメトリを一時的に格納するための新しいグループを作成します。
-
intersect_with
の実行:
*intersection_group.intersect_with(...)
を呼び出し、2つの選択されたエンティティの交差部分のジオメトリをintersection_group
内に生成します。
* 引数には、それぞれのエンティティの変換(位置や回転など)とエンティティのコレクションを指定します。 -
交差部分の面の取得:
intersection_group
内に生成された面(交差部分)を取得します。 - 交差部分の面の削除: トランザクションを開始し、取得した交差部分の面を一つずつ削除します。
-
交差部分のグループの削除: 一時的に作成した
intersection_group
を削除します。 - トランザクションの完了: 削除操作を確定します。
- メッセージ表示: 処理が完了したことをユーザーに通知します。
使い方:
- このRubyスクリプトをSketchUpのRubyエディタにコピー&ペーストします。
- SketchUpで、交差部分を削除したい2つのグループまたはコンポーネントインスタンスを選択します。
- Rubyエディタでスクリプトを実行します。
注意点:
- このスクリプトは、選択された2つのグループまたはコンポーネントインスタンスの面と面の交差部分を削除します。複雑な形状の場合、期待通りに動作しないことがあります。
- 交差部分の削除は、元のグループやコンポーネントのジオメトリを直接変更するわけではありません。交差部分のジオメトリが新しいグループ内に作成され、それが削除されることで、視覚的に交差がなくなったように見えます。
- より複雑な交差処理や、元のジオメトリを直接編集したい場合は、より高度なスクリプトが必要になる場合があります。
このスクリプトが、あなたの目的に合う第一歩となれば幸いです。もし、より具体的な要件があれば、それに応じてスクリプトを調整できますので、お気軽にお知らせください。
以上。