サムライアプスのmoncoです。
先日、OpenAIからChatGPTで使えるモデルとしてGPT-4o(フォーオー)がリリースされました。マルチモーダルなモデル、ということで文字でチャットをするだけでなく、画像を入れたりデータを入れたり、様々なモノを入力として扱ってくれるようになりました。
色々と情報を見ていくと、手書きの表をExcel化してくれるという記事を見ました。 そこで思ったのが、もう少し手書きで入力できると楽なものはないのか―。 CADは流石にプロンプトで指示してもなかなか描けないな、と思い、試してみることにしました。 きれいな絵は現在ではAIに指示すれば描ける時代になっていますが、CADの例は見たことがないような気がします。
とりあえず公園にあるような網のフェンス(ネットフェンスというらしいです)の図面を書いてみることにしました。構造が簡単そうで、手でも描けそうだからです。
素人が手書きしてみました。完全なフリーハンドです。寸法とかは適当です。上と下の枠を胴縁(どうぶち)、上と下の胴縁の間に横に走っている針金を番線(ばんせん)と言うそうです。縦の枠は柱、下の方にある四角いのは基礎ブロックです。
CAD(図面)の一般的なデータとしては「DXFファイル」というのがあり、これをChatGPT出力することを狙います。事前にChatGPTに聞いたところ、DXFファイルを直接出力することはできないが、Pythonのezdxfというライブラリを使うとPythonで図面を記述してDXFファイルを出力できるとのこと。 そこで、上記のフリーハンド図面とともに下記のよう なプロンプトを入力して、Pythonコードを出力してもらうことにしました。
これはネットフェンスの図面です。これをezdxfを使ったPythonコードで表現してください。
出力されたコードは下記のとおりです。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidth_top_section = 2000 # 2mwidth_bottom_left_section = 2000 # 2mwidth_bottom_right_section = 1500 # 1.5mwidth_right_section = 3000 # 3mwidth_bottom_last_section = 500 # 0.5mpost_height = 600 # 60cmpost_width = 300 # 30cm# Draw the vertical postsposts_x_coords = [0, 2000, 4000, 5500, 6000]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})# Draw the horizontal barsbars_y_coords = [1000, 2000, 3000]for y in bars_y_coords:msp.add_line((0, y), (6000, y), dxfattribs={'layer': 'LINES'})# Draw the base supportssupports_coords = [(0, 0), (2000, 0), (4000, 0), (5500, 0)]for x, y in supports_coords:msp.add_line((x - post_width / 2, y - post_height), (x + post_width / 2, y - post_height), dxfattribs={'layer': 'LINES'})msp.add_line((x - post_width / 2, y), (x - post_width / 2, y - post_height), dxfattribs={'layer': 'LINES'})msp.add_line((x + post_width / 2, y), (x + post_width / 2, y - post_height), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence.dxf")
これをPython環境で実行し、出力された net_fence.dxf
を Autodesk Viewerで読ませた結果です。
ちょっと微妙ですね。励ましつつ、足りないところを伝えてあげます。
惜しいです。柱やフェンスの上下を支える胴縁に3cmの幅を持たせてください。下胴縁と基礎の上部は5cm離れています。一番右端ははいりません。基礎の上部の線を書いてください。
出力コードです。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cm# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x - bar_width / 2, 0), (x - bar_width / 2, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width / 2, 0), (x + bar_width / 2, height), dxfattribs={'layer': 'LINES'})# Draw the horizontal bars with widthbars_y_coords = [0, 1000, 2000, 3000]for y in bars_y_coords:msp.add_line((0, y - bar_width / 2), (5500, y - bar_width / 2), dxfattribs={'layer': 'LINES'})msp.add_line((0, y + bar_width / 2), (5500, y + bar_width / 2), dxfattribs={'layer': 'LINES'})# Draw the base supportssupports_coords = [0, 2000, 4000, 5500]for x in supports_coords:# Base top linemsp.add_line((x - post_width / 2, gap_to_base), (x + post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Left vertical linemsp.add_line((x - post_width / 2, gap_to_base), (x - post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, gap_to_base), (x + post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Bottom linemsp.add_line((x - post_width / 2, gap_to_base - post_height), (x + post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence.dxf")
それっぽくなりましたが、まだイメージが伝わっていません。
上胴縁と下胴縁にの間に1m間隔にある番線は幅はありません。下胴縁が基礎に埋まっているので、下胴縁と基礎の上面を5cm空けてください。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cm# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x - bar_width / 2, 0), (x - bar_width / 2, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width / 2, 0), (x + bar_width / 2, height), dxfattribs={'layer': 'LINES'})# Draw the horizontal bars with width (top and bottom bars)bars_y_coords = [0, 3000]for y in bars_y_coords:msp.add_line((0, y - bar_width / 2), (5500, y - bar_width / 2), dxfattribs={'layer': 'LINES'})msp.add_line((0, y + bar_width / 2), (5500, y + bar_width / 2), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportssupports_coords = [0, 2000, 4000, 5500]for x in supports_coords:# Base top linemsp.add_line((x - post_width / 2, gap_to_base), (x + post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Left vertical linemsp.add_line((x - post_width / 2, gap_to_base), (x - post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, gap_to_base), (x + post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Bottom linemsp.add_line((x - post_width / 2, gap_to_base - post_height), (x + post_width / 2, gap_to_base - post_height), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence.dxf")
少しずつ直ってはいますが…下の胴縁が基礎ブロックにめり込んでいます。
要求をしっかり伝えます。
画像のようになっています。下部の胴縁が基礎にめり込んでいますので、基礎の上の辺から5cm離したところに下の胴縁が来るようにしてください。また、柱と胴縁が交差する角が離れているので、くっつけてください。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with widthmsp.add_line((0, gap_to_base + bar_width), (5500, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Bottom linemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence_updated.dxf")
めり込まなくはなりましたが、基礎ブロックの上の辺が描画されていません。もう少し明確に伝える必要があると思い、改めて図を提示することにしました。
入力したプロンプト。
これは下胴縁と基礎部分を拡大して書いた図です。下胴縁と基礎が重ならないように、下胴縁の下辺と基礎の上辺の間に5cmの間を取ってほしいのです。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with widthmsp.add_line((0, gap_to_base + bar_width), (5500, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, gap_to_base), dxfattribs={'layer': 'LINES'})# Bottom linemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence_updated.dxf")
変わりませんでした。
実行しましたが、下胴縁の下辺と基礎の上面に5cmの間がありません。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical postsposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with width, 5cm above the basemsp.add_line((0, gap_to_base + bar_width + base_y), (5500, gap_to_base + bar_width + base_y), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base + base_y), (5500, gap_to_base + base_y), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, gap_to_base + base_y), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, gap_to_base + base_y), dxfattribs={'layer': 'LINES'})# Bottom linemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence_corrected.dxf")
うまく伝わらないですね…改めて図も含めて伝えます。有効化はわかりませんが、ちょっと怒りを込めます。
余計ひどくなりました。基礎と下胴縁はこのようにしたいんです。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical postsposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with width, 5cm above the basemsp.add_line((0, gap_to_base + bar_width), (5500, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Top line of basemsp.add_line((x - post_width / 2, 0), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Bottom line of basemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence_corrected.dxf")
おおお、やっと下胴縁と基礎の間に隙間ができました。気持ちを組んでくれたのでしょうか… ただ、柱の幅がなくなってしまいました。褒めつつ、修正をお願いします。
すごく惜しいです。下胴縁と基礎の部分は完璧です。右端と左端の柱の幅がなくなったので、幅を戻せば完璧です。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with width, 5cm above the basemsp.add_line((0, gap_to_base + bar_width), (5500, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Top line of basemsp.add_line((x - post_width / 2, 0), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Bottom line of basemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("net_fence_final.dxf")
ほぼ完成ですね。右端の柱が上下の胴縁と番線と交差してません。
あと一声です。右端の柱と、胴縁、番線を完全に交差させれば完成です。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the rightmost post completely crossingmsp.add_line((5500, 0), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((5500 + bar_width, 0), (5500 + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with width, 5cm above the basemsp.add_line((0, gap_to_base + bar_width), (5500, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500 + bar_width, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Top line of basemsp.add_line((x - post_width / 2, 0), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Bottom line of basemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("mesh_fence_final.dxf")
もう一声!
番線は交差しました。上部と下部の胴縁も右端の柱と交差させてください。
import ezdxf# Create a new DXF documentdoc = ezdxf.new()# Add new layersdoc.layers.add("DIMENSIONS")doc.layers.add("LINES")# Create a new model spacemsp = doc.modelspace()# Dimensionsheight = 3000 # 3mwidths = [2000, 2000, 1500] # section widthspost_height = 600 # 60cmpost_width = 300 # 30cmbar_width = 30 # 3cmgap_to_base = 50 # 5cmbase_y = -post_height# Draw the vertical posts with widthposts_x_coords = [0, 2000, 4000, 5500]for x in posts_x_coords:msp.add_line((x, 0), (x, height), dxfattribs={'layer': 'LINES'})msp.add_line((x + bar_width, 0), (x + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the rightmost post completely crossingmsp.add_line((5500, 0), (5500, height), dxfattribs={'layer': 'LINES'})msp.add_line((5500 + bar_width, 0), (5500 + bar_width, height), dxfattribs={'layer': 'LINES'})# Draw the top horizontal bar with widthmsp.add_line((0, height), (5500 + bar_width, height), dxfattribs={'layer': 'LINES'})msp.add_line((0, height - bar_width), (5500 + bar_width, height - bar_width), dxfattribs={'layer': 'LINES'})# Draw the bottom horizontal bar with width, 5cm above the basemsp.add_line((0, gap_to_base + bar_width), (5500 + bar_width, gap_to_base + bar_width), dxfattribs={'layer': 'LINES'})msp.add_line((0, gap_to_base), (5500 + bar_width, gap_to_base), dxfattribs={'layer': 'LINES'})# Draw the intermediate wires without widthintermediate_y_coords = [1000, 2000]for y in intermediate_y_coords:msp.add_line((0, y), (5500 + bar_width, y), dxfattribs={'layer': 'LINES'})# Draw the base supportsfor x in posts_x_coords:# Left vertical linemsp.add_line((x - post_width / 2, base_y), (x - post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Right vertical linemsp.add_line((x + post_width / 2, base_y), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Top line of basemsp.add_line((x - post_width / 2, 0), (x + post_width / 2, 0), dxfattribs={'layer': 'LINES'})# Bottom line of basemsp.add_line((x - post_width / 2, base_y), (x + post_width / 2, base_y), dxfattribs={'layer': 'LINES'})# Save the DXF documentdoc.saveas("mesh_fence_final.dxf")
絵のとおりとなりました。ありがとう、ChatGPT…
ちなみに、プロが書いたネットフェンスの図面はこのようなもののようです。ちょっともう少し色々工夫が必要そうです。
ここでは、手書きの図面を元に、Pythonのコードを経てDXFファイルを生成してみました。 手書きの図面をコンピュータで2D CADとして再現できました。本格的に使うにはまだまだですが、プロンプトの与え方や図をもう少し丁寧に書けば、もっと綺麗な図面を生成できるかもしれません。
それにしてもGPT-4o、すごすぎる…。
これにて御免!