verylowfreq/solvespace

Note on Emscripten port

verylowfreq opened this issue · 0 comments

動かない、壊れている箇所 (Not works or broken):

https://github.com/verylowfreq/solvespace/tree/emscripten

ファイルアクセスできない / Cannot file access

  • 保存をするとファイルがダウンロードできる。
    • 自動保存はダウンロードしない。仮想ファイルシステム上には書き出される。
  • ブラウザ側での "Ctrl+S" の保存アクションを抑止する。
    • キーボードのフックのところで特別扱いする。
  • SolveSpaceのクラッシュ時に、自動保存ファイルのダウンロードを提案する
  • ファイルをアップロードできる。
  • アップロードできるファイルの種類(拡張子)を制限する
  • リンクのあるデータが保存できない。エラーメッセージは "This sketch links the sketch 'solvespace_browser-2022_01_01_1235.slvs'; it can only be saved on the same volume."
    • たぶんできるようになった。
  • エクスポートの機能にファイル保存完了後のフックを仕込む。 solvespace.cppexport.cpp あたり。
  • ファイルブラウザでファイルごとにダウンロードできるようにする。

Windowsでビルドできない

リソースのコピーができていないらしい。プルリク参照。

設定が保存されない場合がある

使用していないコードを削除する

コメントを整理する

未使用コード、FIXMEの説明

改良案 Improvement idea

解決済み

一致する面でほぼ確実に押し出しが失敗する / Extrude failes on touched objects.

このブランチがベースとした 4d7145a からずっと同じ。原因不明。

  • デフォルト設定で configuration -> chord torelant が 0 になっている。値を0.1%などにするとデスクトップと同じ挙動になる模様。
    • 設定が保存されないこととの関係は不明。あと保存されないので、当面はアプリを開くたびに設定すること。

NURBSの常用は難しい可能性があるので、こちらをまじめに解決しないといけないかもしれない。

カラーピッカーがクリックに反応しない / Color picker doesnt react mouse click.

数値の入力は動作する。
JavaScriptで数値入力用のテキストボックスを表示している間はクリックイベントをブロックしていたので、修正。

iPadのSafariでメニューが展開できない

補足: 拡張機能でWebインスペクタを入れると、なぜか反応するようになる。

  • イベントがどのように渡っているのかを見る。
  • タッチを別にリッスンする?
  • JavaScript側でメニューを構築する。

iPadのSafariでカメラ移動ができない

  • タッチイベントをリッスンする。
  • タッチイベントを適切に読み替えて、SolveSpaceUIのコールバックへ渡す。
  • 線分を配置するときに途中でクリックが勝手に挟まっているような挙動をする。
  • タッチイベントによるマウスイベントの生成を抑止する。(イベントリスナ内でpreventDefault())
  • emscripten_set_touchstart_callback()などではpassiveを設定できないので、なんとかする。
  • メモリの範囲外アクセス (?) のエラーでクラッシュしがち(再現条件不明)なので、直す。ファイルを開くダイアログでもダイアログを開くときにクラッシュしている。MouseEventあたりのポインタ・参照がおかしいかも。

見送り・不要

### ローディング画面に現状を明記する / Describe the current implementation limitations on loading screen

デフォルトでNURBSを強制するオプションを回避策として用意する (?) / Add a "Force NURBS as default" option for workaround

NURBSは処理が重いようなので、クラッシュ確率が上がる。

NURBSの処理ではなく、chord tolerantの値が異常なだけのようなので、こちらは不要。

ファイル読み込みにURLも使えるようにする / Load a file from URL

ドメインをまたいだfetch()は基本的にできないので(CORSなfetch()をするにはHTTPサーバー側の対応が必要)、クライアント側ブラウザ内完結ではできない。やるとしたら、CORS回避用の踏み台サーバーを用意するか、ブラウザ拡張にするか。

  • ファイルアップロード画面に、fetch()を利用したURLからの読み込みを追加する。
  • URLにリンクするのではなく、ただ単にファイルをコピーするだけ。
  • URLにリンクするのはコア側にも手を入れないといけないのと、デスクトップ版におけるセキュリティ考察が必要なので、あとまわし。
  • (?) SolveSpace起動時にクエリとしてURLが与えられていたら、それを自動で開く