0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

材料力学「クレモナ図を出力できるソフト。フリー、オープン、有料プログラム名を教えて下さい。」をAI先生ヘ。

Posted at

・FreeCADで作図できました。未照査です。勉強中です。

(本日の)ChatGPT先生へ(1回目)

# 質問リスト
1. クレモナ図を出力できるソフト。フリー、オープン、有料プログラム名を教えて下さい。
2. FreeCADで。
3. 任意のトラスで。
4. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。Markdown形式で。

(以下回答抜粋)

✅ スクリプト:構造とCremona図の出力(汎用)

import FreeCAD as App
import Draft

doc = App.ActiveDocument if App.ActiveDocument else App.newDocument("Cremona")

# ユーザー定義:節点の位置(任意の2Dトラスに対応)
nodes = {
    'A': App.Vector(0, 0, 0),
    'B': App.Vector(1000, 0, 0),
    'C': App.Vector(2000, 0, 0),
    'D': App.Vector(500, 800, 0),
    'E': App.Vector(1500, 800, 0),
}

# ユーザー定義:部材(節点ペア)
members = [
    ('A', 'B'), ('B', 'C'),
    ('A', 'D'), ('B', 'D'), ('B', 'E'), ('C', 'E'),
    ('D', 'E'),
]

# 力(仮の方向を仮定):構造解析ソフトの出力などに合わせて変更
# 各節点での力の順に並べる(例:support反力、部材力など)
cremona_vectors = {
    'A': [App.Vector(0, 300, 0), App.Vector(500, 400, 0), App.Vector(-500, -700, 0)],
    'B': [App.Vector(-500, 400, 0), App.Vector(500, 400, 0), App.Vector(0, -800, 0)],
    'C': [App.Vector(0, 800, 0), App.Vector(-500, -400, 0), App.Vector(500, -400, 0)],
    # 他の節点も必要に応じて定義
}

# --- 構造図の作成 ---
for name, pos in nodes.items():
    Draft.make_point(pos)
    Draft.make_text([name], point=pos.add(App.Vector(-100, -100, 0)))

for n1, n2 in members:
    Draft.make_wire([nodes[n1], nodes[n2]], closed=False)

# --- Cremona図の作成 ---
offset = App.Vector(3000, 0, 0)  # 構造図との距離
cremona_origin = offset

for joint, vecs in cremona_vectors.items():
    pts = [cremona_origin]
    for v in vecs:
        pts.append(pts[-1].add(v))  # 連続ベクトル
    for i in range(len(pts) - 1):
        Draft.make_wire([pts[i], pts[i+1]], closed=False)
    # 線を閉じる
    Draft.make_wire([pts[-1], pts[0]], closed=False)
    Draft.make_text([joint], point=pts[0].add(App.Vector(10, 10, 0)))
    cremona_origin = cremona_origin.add(App.Vector(0, -1000, 0))  # 節点ごとに下にずらす

doc.recompute()

(本日の)ChatGPT先生へ(2回目)

✅ FreeCAD Cremona図スクリプト(修正版・汎用)

import FreeCAD as App
import Draft

doc = App.ActiveDocument if App.ActiveDocument else App.newDocument("Cremona")

# ユーザー定義:節点の位置(任意の2Dトラスに対応)
nodes = {
    'A': App.Vector(0, 0, 0),
    'B': App.Vector(1000, 0, 0),
    'C': App.Vector(2000, 0, 0),
    'D': App.Vector(500, 800, 0),
    'E': App.Vector(1500, 800, 0),
}

# ユーザー定義:部材(節点ペア)
members = [
    ('A', 'B'), ('B', 'C'),
    ('A', 'D'), ('B', 'D'), ('B', 'E'), ('C', 'E'),
    ('D', 'E'),
]

# 力(仮定の釣り合い図用ベクトル):各節点にベクトルを順に与える
cremona_vectors = {
    'A': [App.Vector(0, 300, 0), App.Vector(500, 400, 0), App.Vector(-500, -700, 0)],
    'B': [App.Vector(-500, 400, 0), App.Vector(500, 400, 0), App.Vector(0, -800, 0)],
    'C': [App.Vector(0, 800, 0), App.Vector(-500, -400, 0), App.Vector(500, -400, 0)],
    # 必要に応じてDやEも追加
}

# --- 構造図の作成 ---
for name, pos in nodes.items():
    Draft.make_point(pos)
    Draft.make_text([name], [pos.add(App.Vector(-100, -100, 0))])

for n1, n2 in members:
    Draft.make_wire([nodes[n1], nodes[n2]], closed=False)

# --- Cremona図の作成 ---
offset = App.Vector(3000, 0, 0)  # 構造図との距離
cremona_origin = offset

for joint, vecs in cremona_vectors.items():
    pts = [cremona_origin]
    for v in vecs:
        pts.append(pts[-1].add(v))  # ベクトル加算で連続点を得る
    for i in range(len(pts) - 1):
        Draft.make_wire([pts[i], pts[i+1]], closed=False)
    Draft.make_wire([pts[-1], pts[0]], closed=False)  # 閉ループ
    Draft.make_text([joint], [pts[0].add(App.Vector(10, 10, 0))])
    cremona_origin = cremona_origin.add(App.Vector(0, -1000, 0))  # 次の節点図を下に配置

doc.recompute()

111.png

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

Qiita内

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?