狠狠撸

狠狠撸Share a Scribd company logo
ProtoLotus
(クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
2022/12/10
#ヒーローズリーグ 2022 MAリーグ決勝
いのうえ みのる
名前:井上 稔(Minoru INOUE)
出没先: コミュニティ“ゆるメカトロ”
Facebook: minoru.inoue.90
Twitter : @henjin01_Fab
新機能加えました!
ものづくりって大変
ユニバーサルプレートで
タミヤのギアボックスに合う部品を
加工で作ろうとして間違えた…
刃物で怪我をした…
既存のLEGOテクニック部品だと
ちょっと足りない…
ギアボックス画像はこちらから引用: https://www.tamiya.com/japan/products/70189/index.html
なにかと部品は自炊したい!
けど、CADはめんどい…
toioコアキューブに
好きなパーツ載せてみたい…
そんなアナタにおすすめ、ProtoLotus!
オレオレ仕様のユニバーサルプレートやLEGO互換パーツを
自作できるツール フリーソフト!
このテーブルのセルをクリックすると
ブロックが追加?変更?削除される
Githubページ
コードもバイナリも
公開!
(Windows or Mac)
- 開発言語:Python
- GUI:pyQtと
OpenGL
- STL出力:numpy-stl
3顿プリンタで出力できるよ!(作品例)
新机能をつくりました(尝贰骋翱クラシック互换!)
早速DEMOります!
toioコアキューブ互換なブロックを作ります。
ツール上
(6x6サイズ)
3Dプリント後の現物
(PETG、3時間位で出力)
まとめ
ね、楽でしょ?
1. 操作はマウスとCtrl+数字キーだけ!
2. CADの知識いらない!
3. プレゼン時間のたった4分で部品が作れる!
自分好みの部品はチョッパヤで自炊しよう!
ProtoLotusでアイデアに時間を全プッシュだ!
4. 好きな素材で部品が作れるよ!
ex: ゴムっぽく(TPU), 木の温もり(Wood PLA), 頑丈(PETG)
5 [new!]. LEGOブロックもくっつくよ!
以降は予备
ロジックについて考えたきっかけ
昔のツールは適当だった。動作モッサリで拡張性も微妙だった。
ブロック追加ごとに
再描写
→ブロック数が増える
と待ち時間増加
ブロックの種類が
今後も増えそう
→データ構造も考える
必要あり
差分だけ変更を加えて、各ブロックにデータをもたせる形にする必要があった
画面描写と
STL作成は
分離したい
1 2
3 0
…
…
1 2
1
2
データ構造
? ブロック値(1,2,3)
? ブロック座標(row, column)
? ハッシュ値(row+column最大値*column)
? ブロック設定(タミヤ互換 or LEGO互換)
? メッシュデータ(GLMesh)
column
row
Table:
データなし
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
(2,1)に3のブロックを置く ハッシュ値11
クリックした順に
ブロック操作が入る
キュー的にOpenGL表示データを一列に格納する形を採った
また、ハッシュ値から一意にブロックを特定できる。
…
Queue:
ブロック追加時
1 2
3 0
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
(2,2)をクリック
0表示になっている箇所をクリックすると、
ハッシュ値と一緒にブロック操作が入る
1 2
1
2
1
ブロック変更時
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
1 3
3
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に3のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
(1,2)をクリック
→ハッシュ値2探す
テーブルクリック時にハッシュに該当するブロック値を変える
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
search!
ブロック削除時
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
(1,1)に1のブロックを置く ハッシュ値1
(2,2)に2のブロックを置く ハッシュ値12
ハッシュ値11
delete!
1 2
1
…
…
0
(1,2)に2のブロックを置く ハッシュ値2
(2,1)をクリック
→ハッシュ値11探す
数字のカウントアップが一巡した(3→0)場合には
キューからブロック操作を削除する
STL出力
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
がクリックされたタイミングでテーブルを総なめして作成する
For二重ループで
0以外を総なめ
キュー内のデータはOpenGL表示用の
データ=STL作成では使わない
できたこと
問題としていたことはひとまずパス
ブロック
追加ごとに再描写
→待ち時間増加
ブロックの種類が
今後も増えそう
画面描写と
STL作成は
分離したい
キュー&ハッシュでデータを個別管理
操作はブロック個別になった
ブロックの描写単位でブロック情報をもたせた
ブロック値のカウントアップで定義可能
画面描写時とSTL作成時で参照するデータが
異なるため、独立性が高くなった
まとめ(かんそう)
趣味ツールとはいえ、データ構造はソフトウェアのコア
アイデアを送り出すまではスピード重視
But→送り出したあとは手早くデータ構造を見直すべき
データ構造を考えるのはダルい
But→一回決まると後工程が楽
レスポンス面の不便=ロジックとデータ構造の見直し
不便を感じたらドキュメントに起こそう
以上です!

More Related Content

HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう