見出し画像

chatGPTを使ってカグメイクを作る-vol4~家具の正面図がもう出来た

chatGPTと仲良くして、ノンプログラマーが昔作った家具の自動設計ソフトをUIとか作って完成させれたらいいなって思ってる、どこまで続けられるかわかんないけど頑張る特集。たった2日なのに既に第4回です。

その4です。今回は、30分程度格闘ました(ほぼ頑固なchatGPTさんに想いを伝えるのに時間を消費。。。
前回作ったcsvファイルを読み込んで、pygameで表示するところまでやりました。


前回作ったCSVファイルがこちら
天板、側板という家具屋用語は置いといて、それらのパラメタが入ってますね。これを描画したいとchatGPTにお願いします。

まずは最初の設定のお願いから

pygameで、csvファイルからデータを取得し、四角形の画像描画をしたいです。
すべての縮尺は1/5にしたいです。
四角形の枠線は1/10で、白色がいいです。
塗りつぶしはbrownで 読み込むファイルは、1.csv,2.csvと、番号.csvです。 \csvフォルダの中にあります。
csvファイルは name w1 d1 h1 d2 w2 h2 Ten 1250 300 20 0 1 1 のようになっており、 w1がwidth,w2がw h1がheight,h2がh です。

以下は、要求された機能を実装するサンプルコードです。pygameでcsvファイルからデータを読み込み、四角形を描画します。

chatGPT
pythonCopy codeimport pygame
import csv

# Initialize Pygame
pygame.init()

# Define colors
BROWN = (150, 75, 0)
WHITE = (255, 255, 255)

# Define constants
SCALE_FACTOR = 1/5
BORDER_WIDTH = round(SCALE_FACTOR / 10)

# Load data from CSV files
shapes = []
for i in range(1, 3):
    file_name = f"csv/{i}.csv"
    with open(file_name, "r") as file:
        reader = csv.DictReader(file)
        for row in reader:
            x = round(float(row["d1"]) * SCALE_FACTOR)
            y = round(float(row["d2"]) * SCALE_FACTOR)
            width = round(float(row["w1"]) * SCALE_FACTOR)
            height = round(float(row["h1"]) * SCALE_FACTOR)
            shapes.append((x, y, width, height))

以下、コードが続きます。
スケールが全部1/5になってるので、すげーちっちぇーファイルになりました。。。

1/5じゃなくていいよ

スケール1/5じゃなくていいです

了解です。以下は、要求された修正を行ったコードです。~コード書いてくれた

chatGPT

キャンパスのサイズはそのままのサイズで、記述する四角形だけ1/5にしたいです

了解です。キャンバスサイズを変更せずに、四角形を1/5にスケーリングするには、読み込んだデータを1/5にスケーリングするだけです。以下は、修正されたコードです。

chatGPT

出来た!けど絶対おかしい


およそ家具じゃない(笑
なんかの属性間違えてますね。でも、四角形いっぱいあるのは共感できる

それぞれの四角形データを印刷してみよう

記述する際に、x,y,width,heightのデータをprintしましょう

了解です。以下は、修正されたコードで、読み込んだx、y、width、heightの値をprint文で表示します。
~以下、コード

chatGPT

nameもprint

数値だけでname出てないのでお願いしました。すぐにnameも印刷してくれます。


ここで20分くらい格闘、全然分からん!

全然原因が分かりませんでした。が、このあとのchatGPTさんとのやり取りで僕がお願いしたリストを見ればわかるかもしれません。

以下、僕がお願いした項目

  • d1,d2,w1,h1が間違ってます。 w2,h2,w1,h1に変換してください

  • d1をw2に d2をh2に w2をw1 h2をh1に変換してください

  • y = int(float(row["d1"]) * 0.2)  d1じゃなくてh2 そのうえも、w2 widthはw1

  • h2がw2、w2はh2、xとyが逆

  • h1がw1,w1がh1に入れ替えて

  • pygame.drawの部分のwidthとheightが逆ですやん。。。

  • width = int(float(row["h1"]) * 0.2) # h1 height = int(float(row["w1"]) * 0.2) # w1 widthとheightが相変わらず逆です

  • pygame.draw.rect(screen, BROWN, (x, y, height, width)) pygame.draw.rect(screen, WHITE, (x, y, height, width), BORDER_WIDTH) のwidthとheightも逆です

chatGPTは結構修正の時に頑固ちゃん

最初にさくさく作ってくれるんですが、いやそのパラメータ違うよ、とか平気であります。
関数を作る時には、w,h,width,heightで作ってるのに、関数読み込むときに、w,h,height,widthの順に読み込んでます。
wなのにd1とか読み込んでるのもなかなか。
トラップがいっぱいですが、1から自分で作るよりは遥かに早いです。ありがとう。一人でやってたら絶対出来てないもんね(汗

というわけでごちゃごちゃしながら完成~


出来たー!!



上に扉2枚、下に引き出しが10杯ある箱ですね~
ついでに、扉を取っ払いましょう

扉無しバージョンー


どうでしょうか。超簡単に出来てしまいました。

まとめ

とっかかって今で通算半日くらいでしょうか・・・
あっという間に、1.5年くらいかけて作った部分の大半が出来てしまいました。。。
数値計算はエクセルで行っていて(これもpygameにリプレースする)、それからの下工程がこれらで一気に進んでしまいます。

さあ、どうやって完成させるかな~。




サポートをお願いします!サポートいただいた分だけはお返し出来るようにアウトプットしていこうと思います!