const url = Astro.url; const titleParam = url?.searchParams?.get("title") ?? null; Viewer docs | Docs | 3DSL

Viewer docs

参照用の表示ページ。原文はサイト内部に統合して配信しています(/viewer 配下へ .md を直接公開しない設計)。

================================ 3DSD-viewer.md・スE・スEiewer・スE・スE

0 逶ョ逧・・ス・ス驕ゥ逕ィ遽・・ス・ス

0.1 viewer 縺ョ蠖ケ蜑イ

3DSD-viewer・スE・ス莉・荳九€」iewer・スE・ス・スE縲・ 3DSL 繝励Ο繧ク繧ァ繧ッ繝医↓縺翫¢繧・*讒矩€繝・・スE繧ソ縺ョ髢イ隕ァ繝サ遒コ隱搾ソスE菴馴ィ・ 縺ォ迚ケ蛹悶@縺・ 蟆ら畑繝薙Η繝シ繝ッ繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ァ縺ゅk縲・

viewer 縺ッ modeler 縺ォ繧医▲縺ヲ逕滂ソスE縺輔l縺・.3dss.json 繧定ェュ縺ソ蜿悶j縲∵ャ。繧呈署萓帙☆繧具シ・

  • 荳画ャ。蜈・・ス・ス騾縺ョ蠢螳溘↑蜿ッ隕門喧
  • 繝輔Ξ繝シ繝・スE・ス譎る俣螻、・スE・ス・スE蛻・・ス・ス
  • 繝ャ繧、繝、・スE・スEines / points / aux・スE・ス・スE陦ィ遉コ蛻・・ス・ス
  • 讒矩€蜈ィ菴難ソスE菫ッ迸ー繝サ繧コ繝シ繝繝サ蝗櫁サ「
  • name / description / appearance / meta 縺ョ遒コ隱搾シ郁。ィ遉コ縺ョ縺ソ・スE・スE

驥崎ヲ√↑蜑肴署

  • viewer 縺ッ *讒矩€繝・・スE繧ソ繧堤オカ蟇セ縺ォ螟画峩縺励↑縺・
  • 螳鯉ソスE縺ェ read-only・スE・ス蜿ら・蟆ら畑・スE・ス繧「繝励Μ
  • modeler 縺ィ逡ー縺ェ繧・*菫晏ュ假ソスE蜃コ蜉帶ゥ滂ソスE繧呈戟縺溘↑縺・ ・スE・スEI 迥カ諷具ソスE豌ク邯壼喧繧らヲ∵ュ「・スE・スE

UI 迥カ諷具シ磯∈謚橸ソスE繧ォ繝。繝ゥ繝サ陦ィ遉コ險ュ螳夲シ会ソスE session 蜀・・スE縺ソ譛牙柑縺ァ縲・ 讒矩€繝・・スE繧ソ縺ォ譖ク縺肴綾縺輔l繧九%縺ィ縺ッ縺ェ縺・・ス・スE

0.2 common 莉墓ァ倥→縺ョ髢「菫・

viewer 縺ッ谺。縺ョ譁・・ス・ス縺ォ蠕薙≧・スE・スE

  • /schemas/3DSS.schema.json
  • /specs/3DSD-common.md

common 縺ォ繧医k隕冗ッ・・ス・ス蠢螳溘↓隗」驥医@縺ヲ陦ィ遉コ縺吶k・スE・スE

  • 蠎ァ讓咏ウサ・スE・スE+ up / freeXY・スE・スE
  • lines / points / aux 縺ョ諢丞袖
  • frames 縺ョ謇ア縺・・ス・ス陦ィ遉コ繝輔ぅ繝ォ繧ソ・スE・スE
  • 繧ォ繝。繝ゥ隕冗ッ・・ス・ス謚募スア繝サZ+ up繝サ蜴溽せ・スE・スE
  • 蠎ァ讓吝、画鋤繝サ蜊倅ス咲ウサ

viewer 縺ッ modeler 縺ィ蟇セ遘ー逧・・ス・ス縺ゅj縲・ *逕滂ソスE・スE・スEodeler・スE・スEvs 髢イ隕ァ・スE・スEiewer・スE・スE 縺ョ蠖ケ蜑イ蛻・・ス・ス縺鯉ソスE遒コ縺ァ縺ゅk縲・

0.3 驕ゥ逕ィ遽・・ス・ス

譛ャ莉墓ァ假ソスE /code/viewer/ 縺ョ蜈ィ繝「繧ク繝・繝シ繝ォ縺ォ驕ゥ逕ィ縺吶k・スE・スE

  • Core・スE・ス隱ュ霎シ繝サ迥カ諷狗ョ。逅・・ス・スE
  • Renderer・スE・ス荳画ャ。蜈・・ス・ス逕サ・スE・スE
  • UI・スE・スEiewer 蟆ら畑 UI・スE・スE
  • Validator・スE・スEtrict validation・スE・スE
  • Utils・スE・ス蠎ァ讓吝、画鋤繝サ濶イ蜃ヲ逅・・ス・スE
  • HUD・スE・スExis / origin 縺ェ縺ゥ隕冶ヲ夊」懷勧・スE・スE

0.4 髱槫ッセ雎。

viewer 縺ッ髢イ隕ァ蟆ら畑繧「繝励Μ縺ァ縺ゅj縲∽サ・荳具ソスE莉墓ァ伜、厄シ・

  • 讒矩€繝・・スE繧ソ縺ョ邱ィ髮・
  • 讒矩€繝・・スE繧ソ縺ョ菫晏ュ・
  • UI 迥カ諷具ソスE豌ク邯壼喧
  • annotation / comment / report 縺ェ縺ゥ縺ョ邱ィ髮・・ス・ス讖滂ソスE
  • modeler 縺ョ蜀・・ス・ス蜍穂ス・
  • 繧ケ繧ュ繝シ繝橸ソスE螳夂セゥ繝サ螟画鋤

蜀・・ス・ス API 縺ァ繧・update / remove / patch 遲会ソスE隱槫ス呻ソスE菴ソ逕ィ遖∵ュ「縲・

0.5 險ュ險域婿驥晢シ磯夢隕ァ蟆ら畑繧「繝励Μ縺ィ縺励※・スE・スE

  1. 蜿ゑソスE蟆ら畑
    讒矩€繝・・スE繧ソ縺ッ immutable縲よ嶌縺肴鋤縺育ヲ∵ュ「縲・

  2. 蠢螳溯。ィ遉コ
    modeler 蜃コ蜉幢ソスE蛟、繧呈隼螟峨○縺壹€∝庄閭ス縺ェ遽・・ス・ス縺ァ蠢螳溘↓陦ィ遉コ縺吶k縲・ 謠冗判荳奇ソスE陬懷勧縺ッ縲∵ァ矩€繝・・スE繧ソ繧剃ク榊、会ソスE縺セ縺セ謇ア縺・・ス・スE・ス・ス縺ォ髯仙ョ壹☆繧九€・

  3. *鬮倬€溷ソ懃ュ・
    frame / camera / visibility 縺ョ UI 謫堺ス懊r蜊ウ譎ょ渚譏縲・

  4. UI 迥カ諷九→讒矩€繝・・スE繧ソ縺ョ螳鯉ソスE蛻・・ス・ス
    UI 迥カ諷具シ磯∈謚橸ソスE繧ォ繝。繝ゥ繝サvisibility・スE・ス・スE uiState 縺ョ縺ソ縺ァ菫晄戟縺励€・ JSON 縺ォ豺キ蜈・縺輔○縺ェ縺・・ス・スE

  5. *螟夜Κ騾壻ソ。縺ョ謇ア縺・・ス・ス繧ケ繧ュ繝シ繝槫叙蠕礼ヲ∵ュ「・スE・スE

  • viewer runtime 縺ッ *繧ケ繧ュ繝シ繝槫叙蠕・ 繧・・ス・ス驛ィ繝ェ繧ス繝シ繧ケ縺ョ閾ェ蜍募叙蠕励r陦後o縺ェ縺・・ス・スEthree.js` 繧・schema 縺ッ vendor/local 繧貞盾辣ァ・スE・ス縲・
  • .3dss.json 縺ョ蜿門セ暦シ医Ο繝シ繧ォ繝ォ/繝ェ繝「繝シ繝・蝓九a霎シ縺ソ・スE・ス・スE *Host・スE・スEstro/HTML 蛛エ・スE・ス雋ャ蜍・ 縺ィ縺吶k縲・
  • runtime 縺・URL 繧貞女縺代※ fetch 縺吶k陬懷勧 API・スE・ス萓・ bootstrapViewerFromUrl・スE・ス繧呈戟縺、蝣エ蜷医〒繧ゅ€∬。後≧縺ョ縺ッ 譁・・ス・ス譛ャ菴難ソスE蜿門セ暦ソスE縺ソ 縺ィ縺励€√せ繧ュ繝シ繝槫叙蠕暦ソスE霑ス霍。騾壻ソ。繝サ霑ス蜉繝輔ぉ繝・・ス・ス縺ッ遖∵ュ「縺吶k縲・

0.6 繧「繝シ繧ュ繝・・ス・ス繝√Ε・スE・ス繝ャ繧、繝、縺ィ雋ャ蜍呻シ・

viewer 縺ッ谺。縺ョ繝ャ繧、繝、縺ォ蛻・・ス・ス縺吶k・スE・スE

  • entry: Host 縺九i蜿ゥ縺九l繧玖オキ蜍募哨・スE・ス萓・ bootstrapViewer・スE・スE
  • hub: UI 縺ィ core/renderer 縺ョ髮・・ス・ス・医Ο繧ク繝・・ス・ス遖∵ュ「・スE・スE
  • core: canonical state 縺ィ繝薙ず繝阪せ繝ュ繧ク繝・・ス・ス・スE・スEDSS 縺ッ read-only・スE・スE
  • renderer: three.js 謠冗判蟆ら畑・スE・ス迥カ諷具ソスE謠冗判繧ュ繝」繝・・ス・ス繝・縺ョ縺ソ・スE・スE
  • ui: DOM 蜈・蜉・竊・hub API 縺ク縺ョ讖区ク。縺暦シ・ev harness / Host 蛛エ・スE・スE

萓晏ュ俶婿蜷托ソスE隕冗ッ・・ス・ス遖∵ュ「繧貞性繧€・スE・スE

  • 險ア蜿ッ・スE・ス豁」譁ケ蜷托シ・
    • ui 竊・entry / hub
    • entry 竊・hub / core / renderer
    • hub 竊・core / renderer
  • 遖∵ュ「・スE・ス邨カ蟇セ・スE・スE
    • core 竊・hub / renderer
    • renderer 竊・core / hub
    • hub 竊・ui
    • ui 竊・renderer・スE・スEick 繧ょ性繧・蠢・・ス・ス hub 邨檎罰・スE・スE
    • entry 竊・ui・スE・スEI 縺ッ Host 蛛エ雋ャ蜍呻シ・

0.7 萓晏ュ俶ウィ蜈・・スE・スEI・スE・ス縺ィ composition root

  • *composition root 縺ッ entry・スE・スEootstrap・スE・スE 縺ィ縺吶k縲・
  • core 蜀・・スE繝「繧ク繝・繝シ繝ォ蜷悟」ォ縺ッ **import 縺ァ邨撰ソスE縺ェ縺・*縲ょソ・・ス・ス縺ェ萓晏ュ假ソスE createXxx({ ...deps }) 縺ァ **蠑墓焚豕ィ蜈・**縺吶k縲・
  • hub 縺ッ { core, renderer } 繧・DI 縺ァ蜿励¢蜿悶j縲~core/ 繧・renderer/` 繧・import 縺励↑縺・・ス・スE
  • helper 縺ッ 蜷御ク€繝輔ぃ繧、繝ォ蜀・・ス・ス髢峨§繧狗エ秘未謨ー縺ョ縺ソ險ア蜿ッ・スE・ス蛻・繝「繧ク繝・繝シ繝ォ蛹悶@縺ヲ import 縺吶k縺ョ縺ッ遖∵ュ「・スE・ス縲・

0.8 繝ゥ繧、繝輔し繧、繧ッ繝ォ隕冗エ・・ス・スEtart/stop/dispose・スE・スE

  • hub.start()/stop()/dispose() 縺ッ idempotent・スE・ス隍・・ス・ス蝗槫他繧薙〒繧ょョ会ソスE・スE・ス縺ィ縺吶k縲・
  • stop() 縺ッ RAF 蛛懈ュ「縺ョ縺ソ・スE・スEebGL 雉・・ス・ス・スE菫晄戟・スE・ス縲・
  • dispose() 縺ッ stop + renderer 雉・・ス・ス隗」謾セ縲ゆサ・蠕鯉ソスE start/stop/resize 縺ッ no-op縲・
  • dispose() 蠕鯉ソスE pickObjectAt() 縺ッ蟶ク縺ォ null・スE・ス萓句、也ヲ∵ュ「・スE・ス縲・
  • onXChanged 邉サ縺ッ unsubscribe 繧定ソ斐☆・スE・ス遨阪∩荳翫£繝ェ繝シ繧ッ繧帝亟縺撰シ峨€・

0.9 迥カ諷区園譛画ィゥ・スE・スEingle-writer 繧貞性繧€・スE・スE

  • 3DSS document 縺ッ immutable・スE・スEalidate 蠕後↓ deepFreeze 縺励€∽サ・蠕梧嶌縺肴鋤縺育ヲ∵ュ「・スE・ス縲・
  • canonical state 縺ッ **core 縺梧園譛・*縺吶k・スE・ス萓・ uiState・スE・ス縲・
  • single-writer:
    • uiState.visibleSet 縺ッ core.recomputeVisibleSet() 縺ョ縺ソ縺梧峩譁ー縺励※繧医>縲・
    • uiState.runtime.isFramePlaying 縺ッ core.frameController 縺ョ縺ソ縺梧峩譁ー縺励※繧医>縲・
  • renderer 縺ッ three.js 繧ェ繝悶ず繧ァ繧ッ繝医→謠冗判繧ュ繝」繝・・ス・ス繝・縺ョ縺ソ繧呈園譛峨@縲…ore state 縺ッ蜿励¢蜿悶▲縺ヲ蜿肴丐縺吶k縺縺代€・

1 繧キ繧ケ繝・・ス・ス蜈ィ菴捺ァ具ソスE・スE・ス・スE驛ィ繧「繝シ繧ュ繝・・ス・ス繝√Ε・スE・スE

viewer 縺ョ蜀・・ス・ス讒矩€縺ッ縲∵ャ。縺ョ 5繝ャ繧、繝、 縺ィ **2遞ョ鬘橸ソスE繧ィ繝ウ繝医Μ繝昴う繝ウ繝・*縺九i讒具ソスE縺輔l繧九€・

  • entry 螻、
    • bootstrapViewer / bootstrapViewerFromUrl・スE・スEomposition root・スE・スE
  • hub 螻、
    • viewerHub・スE・スEI 縺ク縺ョ蜈ャ髢・API 髮・・ス・スE・ス・ス繝ュ繧ク繝・・ス・ス遖∵ュ「・スE・スE
  • core 螻、
    • canonical state・スE・スEiState・スE・ス縺ィ蜷・・ス・ス controller / cameraEngine
    • 3DSS document 縺ッ immutable・スE・スEead-only・スE・スE
  • renderer 螻、
    • three.js 謠冗判・スE・スEcene/camera/objects・スE・ス・・microFX・スE・ス謠冗判蟆ら畑繧ュ繝」繝・・ス・ス繝・・スE・スE
  • *ui 螻、・スE・スEost / dev harness・スE・スE
    • pointerInput / keyboardInput / gizmo / picker / timeline 遲・
    • DOM 蜈・蜉・竊・hub.core.* / hub.pickObjectAt 縺ク縺ョ讖区ク。縺・

陬懷勧螻、・スE・スEore 蜀・・ス・ス繝ヲ繝シ繝・・ス・ス繝ェ繝・・ス・ス・スE・ス・・

  • Validator・スE・スEJV strict validation・スE・スE
  • structIndex / utils・スE・スEuid index / frameRange 遲会シ・

繧ィ繝ウ繝医Μ繝昴う繝ウ繝茨シ・

  • bootstrapViewer(canvasOrId, document3dss, options?)
  • bootstrapViewerFromUrl(canvasOrId, url, options?)

縺ゥ縺。繧峨b viewerHub 繧定ソ斐@縲∝、夜Κ謫堺ス懶ソスE **hub.core.* 縺ィ hub.pickObjectAt・スE・ス縺翫h・スE hub.viewerSettings.*・スE・ス縺ォ髯仙ョ・*縺吶k縲・

1.1 繝「繧ク繝・繝シ繝ォ讒具ソスE

viewer 螳溯」・・スE縺翫♀繧医◎谺。縺ョ繝「繧ク繝・繝シ繝ォ鄒、縺ォ蛻・・ス・ス繧後k縲・

繝ャ繧、繝、 / 繝「繧ク繝・繝シ繝ォ莉」陦ィ繝輔ぃ繧、繝ォ萓・蠖ケ蜑イ
Bootruntime/bootstrapViewer.jscanvas 縺ィ 3DSS 繧貞女縺大叙繧・runtime 繧定オキ蜍輔@縲~viewerHub` 繧定ソ斐☆縲ゅΞ繝ウ繝€繝シ繝ォ繝シ繝鈴幕蟋九d PointerInput / KeyboardInput 縺ョ謗・邯夲ソスE陦後o縺壹€?ost / dev harness 蛛エ縺ョ雋ャ蜍吶→縺吶k
Hubruntime/viewerHub.jsCore / Renderer 繧偵∪縺ィ繧√※螟夜Κ縺ォ蜈ャ髢九☆繧九ヵ繧。繧オ繝シ繝峨€Ahub.core.*API 縺ィhub.start/stop` 繧呈據縺ュ繧・
Coreruntime/core/*.js3DSS 讒矩€ state・スE・スEmmutable・スE・ス縺ィ uiState・スE・スEiewer 蟆ら畑 state・スE・ス・スE邂。逅・・ス・ス蜷・ィョ Controller / CameraEngine 繧貞性繧€・スE・スEointerInput / KeyboardInput 縺ッ UI 繝ャ繧、繝、 ui/* 縺ォ蛻・・ス・ス・スE・スE
Rendererruntime/renderer/context.js + renderer/microFX/*three.js 縺ォ繧医k謠冗判縲[icroFX縲《election 繝上う繝ゥ繧、繝・
UI・スE・スEev harness・スE・スEviewerDevHarness.js ui/gizmo.js ui/pointerInput.js ui/keyboardInput.js 縺ェ縺ゥdev 逕ィ HTML / HUD / 繝懊ち繝ウ鬘槭€1ointerInput / KeyboardInput / gizmo / 繧ソ繧、繝繝ゥ繧、繝ウ縺ァ蜿励¢縺滂ソスE繧ヲ繧ケ / 繧ュ繝シ蜈・蜉帙r hub.core.* / hub.pickObjectAt 邨檎罰縺ァ runtime 縺ォ讖区ク。縺励☆繧・
Validatorruntime/core/validator.js/schemas/3DSS.schema.json 縺ォ蟇セ縺吶k strict full validation
Utils / Indexruntime/core/structIndex.js 縺ェ縺ゥuuid 繧、繝ウ繝・・ス・ス繧ッ繧ケ讒狗ッ峨€’rame 遽・・ス・ス讀懶ソスE縺ェ縺ゥ縺ョ陬懷勧讖滂ソスE
HUD / 隕冶ヲ夊」懷勧renderer/microFX/*axis / marker / bounds / glow / highlight 遲峨€∵ァ矩€縺ィ縺ッ辟。髢「菫ゅ↑ viewer 蟆ら畑謠冗判

PointerInput / KeyboardInput 縺ッ ui/pointerInput.js / ui/keyboardInput.js 縺ォ鄂ョ縺阪€ゞI 繝ャ繧、繝、・スE・スEost / dev harness・スE・ス・スE荳€驛ィ縺ィ縺ソ縺ェ縺吶€・ 雋ャ蜍吶→縺励※縺ッ縲鯉ソスE蜉帙Ξ繧、繝、縲搾ソスE荳€驛ィ縺ァ縺ゅj縲・*Host / dev harness 縺九i new PointerInput(canvas, hub) / new KeyboardInput(window, hub) 縺ァ逕滂ソスE繝サ謗・邯壹☆繧・*縲・ runtime/bootstrapViewer.js 繧・runtime/core/* 縺九i縺ッ import / new 縺励※縺ッ縺ェ繧峨↑縺・・ス・スE

窶サ 螳溘ヵ繧。繧、繝ォ讒具ソスE縺ッ viewer/runtime/*繝サviewer/ui/* 縺ョ繧ケ繧ア繝ォ繝医Φ縺ォ貅匁侠縺吶k縲・ 窶サ three.js / AJV 縺ィ縺・・ス・ス縺溷、夜Κ繝ゥ繧、繝悶Λ繝ェ縺ッ runtime 縺九i縺ョ縺ソ蛻ゥ逕ィ縺励€ゞI 縺九i逶エ謗・隗ヲ繧峨↑縺・・ス・スE

1.1.3 蟄伜惠縺励↑縺・・ス・ス繧ク繝・繝シ繝ォ・スE・ス・スE遒コ縺ォ遖∵ュ「・スE・スE

viewer 縺ォ縺ッ谺。縺ョ繝「繧ク繝・繝シ繝ォ縺ッ蟄伜惠縺励↑縺・・ス・ス霑ス蜉繧らヲ∵ュ「・スE・ス・・

  • Exporter・スE・ス讒矩€繝・・スE繧ソ縺ョ菫晏ュ假ソスE譖ク縺搾ソスE縺暦シ・
  • Editor・スE・ス讒矩€邱ィ髮・・ス・スE
  • Annotation / Report・スE・ス豕ィ驥茨ソスE繝ャ繝晢ソスE繝茨シ・
  • Snapshot / Export・スE・ス繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス逕滂ソスE遲峨€」iewer 迢ャ閾ェ蜃コ蜉幢シ・

1.2 Core・スE・スEead-only state・スE・スE

Core 縺ッ縲梧ァ矩€ state縲阪→縲袈I state (uiState)縲搾ソスE 2 邉サ蛻励□縺代r謇ア縺・・ス・スE

  • *讒矩€ state・スE・スEtruct・スE・スE

    • strict validation 貂医∩ .3dss.json 繧偵◎縺ョ縺セ縺セ菫晄戟縺吶k縲・
    • 繝医ャ繝励Ξ繝吶Ν讒矩€・スE・スE
      • lines[]
      • points[]
      • aux[]
      • document_meta
    • deep-freeze 縺輔l縺・read-only 繧ェ繝悶ず繧ァ繧ッ繝医→縺励※謇ア縺・・ス・スE 隕∫エ縺ョ add / update / remove / 蠎ァ讓呵」懈ュ」縺ェ縺ゥ縺ッ荳€蛻・・ス・ス繧上↑縺・・ス・スE
  • *UI state・スE・スEiState・スE・スE

    • viewer 縺後€後←縺・・ス・ス縺帙※縺・・ス・ス縺九€搾ソスE迥カ諷九□縺代r謖√▽縲・
    • 萓具シ・
      • selection・スE・ス驕ク謚樔クュ uuid 縺ィ kind・スE・スE
      • frame.current / frame.range
      • cameraState・スE・ス菴咲スョ繝サ蜷代″繝サFOV 遲会シ・
      • filters・スE・スEines/points/aux 縺ョ ON/OFF・スE・スE
      • runtime・スE・スErame 蜀咲函荳ュ縺九€・ソスE蜍輔き繝。繝ゥ荳ュ縺・遲会シ・
      • mode・スE・スEacro / micro・スE・スE 窶サ meso 縺ッ蟆・・ス・ス諡。蠑オ縺ョ莠育エ・・ス・ス縺ィ縺励€∵悽莉墓ァ假シ育樟陦悟ョ溯」・・ス・スE・ス・ス・スE・ス縺ァ縺ッ謇ア繧上↑縺・・ス・スE
      • microState・スE・スEicroFX 縺ョ蜈・蜉幢シ・
      • viewerSettings・スE・スEineWidth 繧・microFX 險ュ螳壹↑縺ゥ・スE・スE
      • visibleSet・スE・ス迴セ蝨ィ謠冗判蟇セ雎。縺ィ縺ェ縺」縺ヲ縺・・ス・ス uuid 髮・・ス・ス・スE・スE

讒矩€ state 縺ィ uiState 縺ョ隧ウ邏ー縺ッ隨ャ 2 遶繝サ隨ャ 5 遶縺ォ縺ヲ螳夂セゥ縺吶k縲・ 譛ャ遶縺ァ縺ッ縲・*struct 縺ッ荳榊、会シ瞬iState 縺縺代′螟牙喧縺吶k**縲阪→縺・・ス・ス髢「菫ゅ□縺代r蝗コ螳壹☆繧九€・

1.3 蜀・・ス・ス萓晏ュ倬未菫・

萓晏ュ俶婿蜷托ソスE蟶ク縺ォ縲御ク贋ス阪Ξ繧、繝、 竊・荳倶ス阪Ξ繧、繝、縲搾ソスE荳€譁ケ蜷代→縺吶k縲・

  • UI / dev harness 繝ャ繧、繝、・スE・スEviewer_dev.html/viewerDevHarness.js` / gizmo / timeline / HUD DOM・スE・スE
    • 竊・viewerHub・スE・スEhub.core.*/hub.pickObjectAt`・スE・スE
  • runtime Boot / Core・スE・スEiState / 蜷・・ス・ス Controller / CameraEngine / Visibility / Selection / Mode / Micro ・スE・スE
    • 竊・struct・スE・スEmmutable 3DSS・スE・スE
    • 竊・Renderer・スE・スEendererContext + microFX・スE・スE
  • three.js / WebGL

PointerInput / KeyboardInput 縺ッ縲鯉ソスE蜉帙う繝吶Φ繝磯寔邏・・ス・ス繧、繝、縲阪→縺励※縲・ window / canvas 縺ョ DOM 繧、繝吶Φ繝医r 1 邂・・ス・ス縺ァ蜿励¢蜿悶j縲・ 蠢・・ス・ス hub.core.* 縺縺代r蜿ゥ縺擾シ・ameraEngine 繧・three.js 繧堤峩謗・隗ヲ繧峨↑縺・・ス・ス縲・

Validator 縺ッ縲罫untime 襍キ蜍募燕縺ョ隱ュ縺ソ霎シ縺ソ繝輔ぉ繝シ繧コ縲阪↓縺縺第諺蜈・縺輔l繧具シ・

  • JSON 繝ュ繝シ繝・竊・Validator・スE・スEtrict full validation・スE・ス・スE OK 縺ョ縺ィ縺搾ソスE縺ソ Core 縺ォ貂。縺・

HUD / microFX 縺ッ Renderer 縺ョ荳€驛ィ縺ィ縺励※謇ア縺・・ス・スE 讒矩€ state 縺ォ縺ッ荳€蛻・・ス・ス蟄倥&縺帙↑縺・・ス・ス蠎ァ讓吝盾辣ァ縺ッ縺励※繧ゅ€∵ァ矩€縺ョ螟画峩縺ッ縺励↑縺・・ス・ス縲・

1.4 蜷・・ス・ス繧ク繝・繝シ繝ォ縺ョ雋ャ蜍・

1.4.1 Boot・スE・スEootstrapViewer.js・スE・スE

  • bootstrapViewer(canvasOrId, document3dss, options?)

    • 蠖ケ蜑イ・スE・スE

      • canvas 隗」豎コ・スE・スEOM 隕∫エ or id 譁・・ス・ス・スE・スE・スE
      • **validate3DSS 繧貞クク縺ォ螳溯。・*・スE・スEG縺ェ繧・throw縲Iub 縺ッ逕滂ソスE縺励↑縺・・ス・スE
      • options.strictValidate === true 縺セ縺滂ソスE options.validateRefIntegrity === true 縺ョ蝣エ蜷茨ソスE縺ソ validateRefIntegrity 繧貞ョ溯。鯉シ・G縺ェ繧・throw・スE・スE
      • validate 蠕後↓ *deep-freeze・スE・スEmmutable蛹厄シ・ 縺吶k
      • structIndex・スE・スEuid 繧、繝ウ繝・・ス・ス繧ッ繧ケ / frame 遽・・ス・ス・スE・ス・スE讒狗ッ・
      • uiState 縺ョ蛻晄悄蛹・
      • controller 鄒、 / cameraEngine / cameraController / viewerSettingsController 縺ョ蛻晄悄蛹厄シ・ore 蜀・・ス・ス莠剃セ晏ュ假ソスE import 縺ァ邨撰ソスE縺・DI 縺ァ貂。縺呻シ・
      • rendererContext 蛻晄悄蛹・竊・syncDocument(document, indices) 竊・getSceneMetrics()
      • metrics 縺九i蛻晄悄繧ォ繝。繝ゥ state 繧呈アコ螳壹@縲・*cameraEngine.setState(initialState)** 縺ァ遒コ螳壹☆繧具シ・etrics 縺・null 縺ョ蝣エ蜷茨ソスE fallback 隕冗ッ・・ス・スE
      • core.recomputeVisibleSet() 繧・1 蝗槫他繧薙〒蛻晄悄 visibleSet 繧堤「コ螳壹☆繧・
      • createViewerHub({ core, renderer }) 繧貞他縺ウ縲”ub 繧堤函謌舌@縺ヲ霑斐☆
      • **繝ャ繝ウ繝€繝シ繝ォ繝シ繝鈴幕蟋具ソスE陦後o縺ェ縺・*・スE・スEhub.start()` 縺ッ Host / dev harness 縺ョ雋ャ蜍呻シ・
      • options.devBootLog === true 縺ョ蝣エ蜷医€∬オキ蜍輔Ο繧ー・スE・スEOOT / MODEL / CAMERA / LAYERS / FRAME・スE・ス繧・1 蝗槭★縺、蜃コ蜉帙☆繧・
    • options・スE・スE

      • devBootLog?: boolean
      • logger?: (line: string) => void
      • strictValidate?: boolean
      • validateRefIntegrity?: boolean
  • bootstrapViewerFromUrl(canvasOrId, url, options?)

    • 蠖ケ蜑イ・スE・スE

      • fetch(url) 竊・res.ok===false 縺ッ throw・スE・スETTP status 繧貞性繧√k・スE・スE
      • res.json() 縺励◆ document 繧・bootstrapViewer(canvasOrId, document, options2) 縺ォ貂。縺・
      • options2.strictValidate 縺ョ default 縺ッ true・スE・ス譛ェ謖・・ス・ス譎ゅ・蜿ゑソスE謨エ蜷域€ァ縺セ縺ァ蜷ォ繧√◆ strict 繧貞━蜈茨シ・
    • 豕ィ諢擾シ・

      • schema 蜿門セ励↑縺ゥ縺ョ霑ス蜉騾壻ソ。縺ッ遖∵ュ「・スE・スEalidator 縺ッ繝ュ繝シ繧ォ繝ォ蜷梧「ア schema 繧貞盾辣ァ縺励※蛻晄悄蛹悶☆繧具シ・

1.4.2 viewerHub・スE・スEuntime/viewerHub.js・スE・スE

  • runtime 蜀・・ス・ス縺ォ縺ゅk Core / Renderer / CameraEngine 遲峨r縺セ縺ィ繧√※邂。逅・・ス・ス縲・ 螟夜Κ縺ォ縺ッ *hub 1 繧ェ繝悶ず繧ァ繧ッ繝医□縺・ 繧定ヲ九○繧九€・

  • 莉」陦ィ逧・・ス・ス蜈ャ髢九う繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ・スE・スE

    • hub.start() / hub.stop() 窶ヲ 繧「繝九Γ繝シ繧キ繝ァ繝ウ繝ォ繝シ繝鈴幕蟋具ソスE蛛懈ュ「
    • hub.pickObjectAt(ndcX, ndcY) 窶ヲ NDC 蠎ァ讓吶°繧画ァ矩€隕∫エ縺ョ uuid 繧貞叙蠕・
    • hub.core.frame.*
    • hub.core.camera.*
    • hub.core.selection.*
    • hub.core.mode.*
    • hub.core.micro.*
    • hub.core.filters.*
    • hub.core.runtime.*
  • UI / dev harness / host 繧「繝励Μ縺ッ **hub 邨檎罰縺ァ縺励° runtime 繧呈桃菴懊@縺ヲ縺ッ縺ェ繧峨↑縺・*縲・

  • hub.pickObjectAt 縺ッ renderer 縺ョ繝偵ャ繝育オ先棡縺ァ縺ゅ▲縺ヲ繧ゅ€・ visibilityController.isVisible(uuid) === false 縺ョ蝣エ蜷茨ソスE 蠢・・ス・ス null 繧定ソ斐☆・スE・ス荳榊庄隕冶ヲ∫エ縺ッ驕ク謚樔ク榊庄繧剃ソ晁ィシ・スE・ス縲・

1.4.3 Core

  • strict validation 貂医∩ 3DSS 繧・struct 縺ィ縺励※菫晄戟・スE・スEeep-freeze・スE・スE
  • uiState 縺ョ逕滂ソスE繝サ譖エ譁ー
  • 蜷・・ス・ス Controller 縺ォ繧医k迥カ諷具ソスE遘サ・スE・スE
    • frameController 窶ヲ frame 縺ョ蛻・・ス・ス譖ソ縺茨ソスE蜀咲函
    • selectionController 窶ヲ selection 縺ョ蜚ッ荳€縺ョ豁」隕上Ν繝シ繝・
    • visibilityController 窶ヲ frame / filter 縺九i visibleSet 繧抵ソスE險育ョ・
    • modeController 窶ヲ macro / meso / micro 繝「繝シ繝臥ョ。逅・
    • microController 窶ヲ microFX 逕ィ縺ョ microState 繧定ィ育ョ・
    • CameraEngine 窶ヲ cameraState 縺ョ蜚ッ荳€縺ョ繧ス繝シ繧ケ繧ェ繝悶ヨ繧・繝ォ繝シ繧ケ

Core 縺ッ three.js 繧堤峩謗・縺ッ遏・繧峨★縲ヽenderer 縺ォ蟇セ縺励※縲檎憾諷九€阪r貂。縺吶□縺代→縺吶k縲・

1.4.4 Renderer

  • three.js / WebGL 縺ォ繧医k謠冗判蜃ヲ逅・・ス・ス諡・・ス・スE
  • 荳サ縺ェ雋ャ蜍呻シ・
    • struct + structIndex 繧偵b縺ィ縺ォ Object3D 鄒、繧呈ァ狗ッ・
    • applyFrame(visibleSet) 縺ォ繧医k陦ィ遉コ繝サ髱櫁。ィ遉コ縺ョ蛻・・ス・ス譖ソ縺・
    • updateCamera(cameraState) 縺ォ繧医k繧ォ繝。繝ゥ蜿肴丐
    • applyMicroFX(microState) 縺ォ繧医k microFX 驕ゥ逕ィ / 隗」髯、
    • applySelection(selectionState) 縺ォ繧医k macro 繝「繝シ繝臥畑繝上う繝ゥ繧、繝・
    • pickObjectAt(ndcX, ndcY) 縺ォ繧医k繧ェ繝悶ず繧ァ繧ッ繝磯∈謚橸シ・aycasting・スE・スE

Renderer 縺ッ讒矩€ state 繧貞、画峩縺帙★縲∵緒逕サ螻樊€ァ・スE・ス・スE繝・・ス・ス繧「繝ォ繝サvisible繝サrenderOrder 遲会シ会ソスE縺ソ繧呈桃菴懊☆繧九€・

1.4.5 UI / dev harness

  • 髢狗匱逕ィ viewer・スE・スEiewer_dev.html・スE・ス繧・ー・・ス・ス縺ョ Astro 繝夲ソスE繧ク縺ェ縺ゥ縲・ HTML / DOM 繧オ繧、繝会ソスE螳溯」・・ス・ス諡・・ス・ス縲・

  • 莉」陦ィ繝「繧ク繝・繝シ繝ォ・スE・スE

    • pointerInput 窶ヲ canvas 荳奇ソスE繝槭え繧ケ謫堺ス・竊・hub.core.camera / hub.pickObjectAt
    • keyboardInput 窶ヲ keydown 竊・hub.core.frame / hub.core.mode / hub.core.camera
    • gizmo 窶ヲ 逕サ髱「蜿ウ荳具ソスE繧ォ繝。繝ゥ繧ョ繧コ繝「 竊・hub.core.camera.*
    • picker 窶ヲ click 竊・hub.pickObjectAt 竊・hub.core.selection.*
    • timeline 窶ヲ frame 蜀咲函 UI 竊・hub.core.frame.*

UI 縺ッ viewerHub 縺ョ蜈ャ髢・API 縺ョ縺ソ繧貞茜逕ィ縺励€,ore / Renderer 縺ォ逶エ謗・隗ヲ繧後※縺ッ縺ェ繧峨↑縺・・ス・スE

1.4.6 Validator

  • /schemas/3DSS.schema.json 縺ッ 繝ュ繝シ繧ォ繝ォ蜷梧「ア繧貞盾辣ァ縺励€√ロ繝・・ス・ス繝ッ繝シ繧ッ蜿門セ暦ソスE陦後o縺ェ縺・・ス・スE
  • bootstrapViewer 縺ッ validate3DSS 繧貞クク縺ォ螳溯。後☆繧九€・
  • 蜿ゑソスE謨エ蜷域€ァ・スE・スEuid ref 遲会シ会ソスE strictValidate 縺セ縺滂ソスE validateRefIntegrity 謖・・ス・ス譎ゅ・縺ソ螳溯。後☆繧九€・

1.4.7 Utils / Index / HUD

  • Utils / Index

    • structIndex 縺ォ繧医k uuid 竊・kind / element 蜿ゑソスE
    • frame 遽・・ス・ス讀懶ソスE・スE・スEin / max・スE・ス縲∝コァ讓咏ウサ繝ヲ繝シ繝・・ス・ス繝ェ繝・・ス・ス
  • HUD / microFX

    • axis / origin / bounds / glow / highlight 縺ェ縺ゥ縺ョ隕冶ヲ夊」懷勧
    • 縺吶∋縺ヲ Renderer 蜀・・ス・ス縺ョ three.js 繧ェ繝悶ず繧ァ繧ッ繝医→縺励※螳溯」・
    • 3DSS 讒矩€縺ォ縺ッ荳€蛻・・ス・ス縺肴綾縺輔↑縺・・ス・ス縲瑚ヲ九∴譁ケ縲榊ーら畑・スE・スE

1.5 I/O・スE・スEiewer・スE・ス讎りヲ・・ス・スE

  • 蜈・蜉幢シ・.3dss.json・スE・スEtrict full validation 貂医∩ 3DSS 讒矩€繝・・スE繧ソ・スE・スE
  • 蜃コ蜉幢シ夂┌縺・

UI 迥カ諷具ソスE繧ォ繝。繝ゥ繝サvisibility 縺ェ縺ゥ縺ッ 繧サ繝・・ス・ス繝ァ繝ウ蜀・・スE uiState 縺ォ縺縺台ソ晄戟 縺励€・ 繝輔ぃ繧、繝ォ菫晏ュ倥d螟夜Κ蜃コ蜉幢ソスE陦後o縺ェ縺・・ス・スE

隧ウ邏ー縺ェ I/O 繝昴Μ繧キ繝シ縺ッ隨ャ 6 遶縺ォ縺ヲ螳夂セゥ縺吶k縲・

1.6 遖∵ュ「莠矩・・ス・スEiewer 蜈ィ菴難シ・

viewer 縺ッ谺。縺ョ陦檎ぜ繧剃ク€蛻・・ス・ス縺」縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

  1. 讒矩€繝・・スE繧ソ縺ョ螟画峩・スE・スEdd / update / remove・スE・スE
  2. 讒矩€繝・・スE繧ソ縺ョ菫晏ュ假シ・xporter・スE・スE
  3. 邱ィ髮・・ス・ス繝吶Φ繝茨シ・ndo / redo / duplicate 遲会シ会ソスE螳溯」・
  4. UI 迥カ諷具ソスE JSON 蜃コ蜉幢ソスE豌ク邯壼喧
  5. annotation / comment / report 遲会ソスE逕滂ソスE
  6. viewerSettings 繧・JSON 蛹悶@縺ヲ菫晏ュ假シ域ーク邯壼喧・スE・ス縺吶k縺薙→
  7. extension 縺ョ諢丞袖隗」驥茨ソスE逕滂ソスE繝サ陬懷ョ鯉シ域ァ矩€螟画峩縺ォ逶ク蠖難シ・
  8. normalize / 謗ィ貂ャ / 陬懷ョ・/ prune / reorder 遲会ソスE逕滂ソスE蜃ヲ逅・
  9. 譛ェ譚・繧ケ繧ュ繝シ繝樣・・ス・ス縺ョ謗ィ貂ャ繝サ隗」驥茨シ・emantic inference・スE・スE

viewer 縺ッ 螳鯉ソスE read-only 縺ョ陦ィ遉コ陬・・ス・ス 縺ァ縺ゅj縲・ viewer 迢ャ閾ェ諠・・ス・ス縺ッ uiState 蜀・・ス・ス縺ォ縺ョ縺ソ菫晄戟縺励※繧医>・スE・ス讒矩€繝・・スE繧ソ縺ク縺ョ豺キ蜈・遖∵ュ「・スE・ス縲・

1.7 襍キ蜍輔ヵ繝ュ繝シ・スE・スEiewer_dev.html 竊・viewerDevHarness.js 竊・bootstrapViewer 竊・viewerHub・スE・スE

1.7.1 繧ィ繝ウ繝医Μ邨瑚キッ縺ョ蝗コ螳・

viewerDevHarness.js 縺・bootstrapViewerFromUrl 繧貞他縺ウ縲∝セ励i繧後◆ viewerHub 縺ォ蟇セ縺励※
hub.start() 繧貞他縺ウ蜃コ縺励€√&繧峨↓ PointerInput / KeyboardInput 繧呈ァ狗ッ峨@縺ヲ canvas / window 縺ォ繧、繝吶Φ繝医r謗・邯壹☆繧九€・

  1. viewer_dev.html

    • dev 逕ィ DOM 鬪ィ譬シ・スE・スED canvas繝サ繝ュ繧ー鬆伜沺繝サ繝懊ち繝ウ遲会シ峨r螳夂セゥ縺吶k縲・
  2. viewerDevHarness.js

    • window.load・スE・ス縺セ縺滂ソスE DOMContentLoaded・スE・ス蠕後↓ UI 隕∫エ繧抵ソスE縺ィ縺ィ縺翫j蜿門セ励@縲・ bootstrapViewerFromUrl(canvasId, jsonUrl, options) 繧・1 蠎ヲ縺縺大他縺ウ蜃コ縺吶€・
    • 蠕励i繧後◆ viewerHub 繧偵Ο繝シ繧ォ繝ォ螟画焚縺翫h縺ウ繧ー繝ュ繝シ繝舌Ν・スE・スEwindow.hub` 遲会シ峨↓ expose 縺励※縲・ dev 逕ィ UI / 繧ウ繝ウ繧ス繝シ繝ォ縺九i險コ譁ュ縺ァ縺阪k繧医≧縺ォ縺吶k縲・
    • hub.start() 繧貞他縺ウ蜃コ縺励※ render loop・スE・スErequestAnimationFrame`・スE・ス繧帝幕蟋九☆繧九€・
    • new PointerInput(canvas, hub) / new KeyboardInput(window, hub) 繧堤函謌舌@縲・ attach()・スE・ス縺ゅl・スE・スE・ス繧貞他繧薙〒 canvas / window 縺ォ pointer / key 繧、繝吶Φ繝医r謗・邯壹☆繧九€・
    • PointerInput / KeyboardInput / gizmo / 繧ソ繧、繝繝ゥ繧、繝ウ縺ェ縺ゥ縺ァ蜿励¢縺滂ソスE蜉帙r
      hub.core.* / hub.pickObjectAt 縺ォ繝槭ャ繝斐Φ繧ー縺吶k縲・
  3. runtime/bootstrapViewer.js

    • 3DSS 縺ョ strict validation・スE・スEbootstrapViewerFromUrl` 邨檎罰縺ョ蝣エ蜷茨シ峨€・
    • struct 縺ョ deep-freeze / structIndex 讒狗ッ峨€・
    • rendererContext / uiState / CameraEngine / 蜷・・ス・ス Controller 縺ョ蛻晄悄蛹悶€・
    • createViewerHub({ core, renderer }) 繧貞他縺ウ蜃コ縺励€~hub繧定ソ斐☆縲・ ・スE・ス縺薙%縺ァ縺ッhub.start()` 繧貞他縺ー縺壹€√Ξ繝ウ繝€繝シ繝ォ繝シ繝怜宛蠕。縺ッ Host / dev harness 蛛エ縺ョ雋ャ蜍吶→縺吶k・スE・スE
  4. viewerHub

    • hub.core.* 縺ィ hub.pickObjectAt 繧帝€壹§縺ヲ縲・ frame / camera / selection / mode / micro / filters / runtime API 繧抵ソスE髢九☆繧九€・
    • hub.start() / hub.stop() 縺ァ render loop・スE・スErequestAnimationFrame`・スE・ス繧帝幕蟋具ソスE蛛懈ュ「縺吶k縲・

縺難ソスE邨瑚キッ莉・螟悶°繧・Core / Renderer / CameraEngine 繧・new / 逶エ謗・蜻シ縺ウ蜃コ縺励☆繧九%縺ィ縺ッ遖∵ュ「縺ィ縺吶k縲・ PointerInput / KeyboardInput 縺ッ UI 繝ャ繧、繝、・スE・スEiewerDevHarness / 譛ャ逡ェ Host・スE・ス縺九i・スE縺ソ new 縺励※繧医¥縲・ runtime 螻、・スE・スEruntime/*・スE・ス縺九aEimport / new` 縺励※縺ッ縺ェ繧峨↑縺・・ス・スE

蠢・・ス・ス bootstrapViewer / bootstrapViewerFromUrl 繧・runtime 縺ョ蜚ッ荳€縺ョ蜈・蜿」縺ィ縺励€・ 霑斐▲縺ヲ縺阪◆ hub 縺ォ蟇セ縺励※ Host 蛛エ縺・hub.start() 繧貞他縺ウ蜃コ縺吶%縺ィ縺ァ繝ャ繝ウ繝€繝シ繝ォ繝シ繝励r髢句ァ九☆繧九€・


1.7.2 viewerDevHarness.js 縺ョ雋ャ蜍・

viewerDevHarness.js 縺ッ縲慧ev 逕ィ繝帙せ繝医€阪〒縺ゅj縲〉untime 縺ィ縺ッ譏守「コ縺ォ蛻・・ス・ス縺吶k縲・

  • 蠖ケ蜑イ・スE・スE

    • dev 逕ィ HTML・スE・スEviewer_dev.html`・スE・ス縺ォ驟咲スョ縺輔l縺溷推遞ョ DOM・スE・スErame 繧ケ繝ゥ繧、繝€繝サfilter 繝懊ち繝ウ繝サHUD繝サgizmo 遲会シ峨r蜿門セ励☆繧九€・
    • bootstrapViewerFromUrl(canvasId, jsonUrl, options) 繧・1 蝗槭□縺大他縺ウ蜃コ縺励€・ 蠕励i繧後◆ viewerHub 繧偵Ο繝シ繧ォ繝ォ螟画焚縺翫h縺ウ window.hub 縺ォ菫晄戟縺吶k縲・
    • new PointerInput(canvas, hub) / new KeyboardInput(window, hub) 繧堤函謌舌@縲・ canvas / window 縺ォ pointer / key 繧、繝吶Φ繝医r謗・邯壹☆繧九€・
    • hub.core.frame.* / hub.core.filters.* / hub.core.mode.* / hub.core.selection.* /
      hub.core.camera.* 縺ェ縺ゥ繧・UI 繧、繝吶Φ繝茨シ茨ソスE繧ソ繝ウ / 繧ケ繝ゥ繧、繝€ / gizmo 遲会シ峨↓謗・邯壹☆繧九€・
    • dev 逕ィ HUD / 繝。繧ソ繝代ロ繝ォ / 繝ュ繧ー陦ィ遉コ・スE・スEOOT / MODEL / CAMERA / LAYERS / FRAME・スE・ス繧貞ョ溯」・・ス・ス繧九€・
    • hub.start() / hub.stop() 繧貞他縺ウ蜃コ縺励€‥ev viewer 縺ョ繝ゥ繧、繝輔し繧、繧ッ繝ォ・スE・ス襍キ蜍・/ 蜀崎オキ蜍・/ 蛛懈ュ「・スE・ス繧堤ョ。逅・・ス・ス繧九€・
    • dev viewer・スE・スEiewer_dev.html・スE・ス・スE縲・ fetch 螟ア謨暦ソスEJSON 繝托ソスE繧ケ繧ィ繝ゥ繝シ繝サstrict validation NG 縺ョ 縺・・ス・ス繧鯉ソスE蝣エ蜷医b struct 繧剃ク€蛻・・ス・ス謖√○縺・hub 繧堤函謌舌@縺ェ縺・・ス・スE 蜿ウ繝壹う繝ウ縺ォ縺ッ繧ィ繝ゥ繝シ遞ョ蛻・・スE・スEETWORK_ERROR / JSON_ERROR / VALIDATION_ERROR・スE・スE 縺ィ繝。繝・・ス・ス繝シ繧ク繧定。ィ遉コ縺励€~(no struct loaded)` 縺ィ譏守、コ縺吶k縲・
  • 蛻カ邏・・ス・スE

    • runtime/core/* / runtime/renderer/* 繧堤峩謗・ import 縺励↑縺・ ・スE・スEuntime 縺ク縺ョ蜈・蜿」縺ッ runtime/bootstrapViewer.js 縺ョ bootstrapViewer* 縺ョ縺ソ縺ィ縺吶k・スE・ス縲・
    • three.js / AJV / CameraEngine 繧堤峩謗・隗ヲ繧峨↑縺・・ス・スE
    • 3DSS 讒矩€・スE・スEcore.data/structIndex`・スE・ス繧貞、画峩縺励↑縺・・ス・スEiState 縺ョ蜿ゑソスE縺ィ陦ィ遉コ縺縺題。後≧・スE・ス縲・
    • PointerInput / KeyboardInput 縺ョ繝ュ繧ク繝・・ス・ス繧剃ク頑嶌縺阪○縺壹€・ソスE蜉・竊・hub.core.* / hub.pickObjectAt 縺ョ豬√l繧剃ソ昴▽縲・

讎ら払繝輔Ο繝シ縺ッ谺。縺ョ騾壹j・スE・スE

viewer_dev.html      ・スE・ス髢狗匱逕ィ DOM 鬪ィ譬シ・スE・スE
  竊・
viewerDevHarness.js  ・スE・スEev 逕ィ繝擾ソスE繝阪せ・スE・スbootstrapViewerFromUrl / hub.start / PointerInput / KeyboardInput・スE・スE
  竊・
bootstrapViewerFromUrl(canvas, modelPath, options)
  竊・
viewerHub・スE・スEub・スE・スE
  竊・
hub.start()          ・スE・ス繝ャ繝ウ繝€繝シ繝ォ繝シ繝鈴幕蟋具シ・

1.8 dev viewer 縺ィ譛ャ逡ェ viewer 縺ョ髢「菫・

viewer runtime 閾ェ菴難ソスE繝帙せ繝磯撼萓晏ュ假ソスE蜈ア騾壹さ繝ウ繝晢ソスE繝阪Φ繝医〒縺ゅj縲・ dev viewer 縺ッ縺晢ソスE荳€螳溯」・・ス・ス縺ォ驕弱℃縺ェ縺・・ス・ス縺ィ繧剃サ墓ァ倥→縺励※譏守、コ縺吶k縲・

  • 蜈ア譛峨☆繧九b縺ョ・スE・スE
  • runtime/bootstrapViewer.js
  • runtime/viewerHub.js
  • runtime/core/*
  • runtime/renderer/*
  • dev viewer 蝗コ譛会ソスE繧ゑソスE・スE・スE
  • viewer_dev.html・スE・スE 繧ォ繝ゥ繝繝ャ繧、繧「繧ヲ繝医€√Γ繧ソ繝代ロ繝ォ縲?UD 遲会シ・
  • viewerDevHarness.js
  • dev 逕ィ HUD / gizmo / 蜷・・ス・ス繝懊ち繝ウ鬘橸シ・i/gizmo.js 縺ェ縺ゥ・スE・スE

1.8.1 蜈ア騾壹お繝ウ繝医Μ繝昴う繝ウ繝・

縺吶∋縺ヲ縺ョ繝帙せ繝茨ソスE縲∵ャ。縺ョ 蜈ア騾壹お繝ウ繝医Μ API 縺九i viewer runtime 繧定オキ蜍輔☆繧九€・

  • bootstrapViewer(canvasOrId, threeDSS, options?) 竊・hub
  • strict validation 貂医∩縺ョ 3DSS 繧ェ繝悶ず繧ァ繧ッ繝医r蜿励¢蜿悶j縲」iewerHub 繧呈ァ狗ッ峨@縺ヲ霑斐☆縲・
  • bootstrapViewerFromUrl(canvasOrId, url, options?) 竊・Promise
  • url 縺九i .3dss.json 繧・fetch 縺励€《trict validation 繧貞ョ溯。後@縺溘≧縺医〒 bootstrapViewer 繧貞他縺ウ蜃コ縺吶Λ繝・・ス・ス繝シ縲・

dev viewer 繧よ悽逡ェ viewer 繧ゅ€√%繧御サ・螟厄ソスE邨瑚キッ縺ァ runtime 繧定オキ蜍輔@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

1.8.2 dev viewer・スE・ス髢狗匱逕ィ繝擾ソスE繝阪せ・スE・ス・スE襍キ蜍輔ヵ繝ュ繝シ

dev viewer 縺ョ襍キ蜍墓凾縲」iewerDevHarness.js 縺ッ讎ゑソスE谺。縺ョ繧医≧縺ォ蜍輔¥・スE・スE

  1. window.addEventListener(‘load’, boot) 縺ァ 1 蝗槭□縺・boot() 繧定オキ蜍輔☆繧九€・
  2. boot() 蜀・・ス・ス
  • 繝。繧ソ繝代ロ繝ォ / HUD / frame 繧ケ繝ゥ繧、繝€ / filter 繝懊ち繝ウ遲会ソスE DOM 繧貞叙蠕励☆繧九€・
  • const canvasId = “viewer-canvas”;
  • const jsonUrl = ”../3dss/scenes/default/default.3dss.json”;・スE・スEaseline 遒コ隱肴凾・スE・スE
  • bootstrapViewerFromUrl(canvasId, jsonUrl, { devBootLog:true, devLabel:“viewer_dev”, modelUrl:jsonUrl, logger:devLogger }) 繧貞他縺カ縲・
  1. devLogger(line) 縺ッ
  • console.log(line) + 繝。繧ソ繝代ロ繝ォ縺ク縺ョ霑ス險假シ・ppendModelLog(line)・スE・ス繧定。後≧縲・

縺難ソスE繧医≧縺ォ縲‥ev viewer 縺ッ縲後Ο繧ー繝サHUD繝サ繧ウ繝ウ繝医Ο繝シ繝ォ鬘槭′霑ス蜉縺輔l縺滂ソスE繧ケ繝医€阪〒縺ゅj縲・ runtime 閾ェ菴薙↓縺ッ荳€蛻・・ス・ス繧抵ソスE繧後↑縺・・ス・スE

1.8.3 譛ャ逡ェ viewer・スE・スEstro / 蝓九a霎シ縺ソ・スE・ス・スE襍キ蜍輔ヵ繝ュ繝シ

譛ャ逡ェ viewer・スE・スEstro 繧オ繧、繝医d莉厄ソスE繧ケ繝医い繝励Μ・スE・ス繧ゅ€・ 蝓コ譛ャ逧・・ス・ス縺ッ dev viewer 縺ィ蜷後§繧ィ繝ウ繝医Μ API 繧堤畑縺・・ス・ス縲・

Host・スE・スEstro / React / plain HTML 遲会シ・ 竊・ bootstrapViewerFromUrl(canvasRef, modelUrl, options) 竊・ viewerHub・スE・スEub・スE・スE 竊・ host 蛛エ縺九i hub.core.* 繧貞茜逕ィ縺励※ UI 縺ィ騾」謳コ 竊・ hub.start() ・スE・ス繝ャ繝ウ繝€繝シ繝ォ繝シ繝鈴幕蟋具シ・

  • Host・スE・スEstro / React / plain HTML 遲会シ・

  • 閾ェ霄ォ縺ョ繝ャ繧、繧「繧ヲ繝茨ソスE荳ュ縺ォ 繧ゅ@縺擾ソスE canvas 繧貞性繧€繧ウ繝ウ繝・・ス・ス繧抵ソスE鄂ョ縺吶k縲・

  • 繝槭え繝ウ繝亥ョ御コ・・ス・ス縺ォ bootstrapViewerFromUrl 縺セ縺滂ソスE 莠句燕縺ォ fetch + validation 貂医∩縺ョ 3DSS 繧堤畑縺・・ス・ス bootstrapViewer 繧貞他縺カ縲・

  • 蠕励i繧後◆ hub 縺ョ core.* API 繧偵€・ソスE蜑搾ソスE UI 繧ウ繝ウ繝晢ソスE繝阪Φ繝茨シ医ち繧、繝繝ゥ繧、繝ウ繝サ繝ャ繧、繝、繝医げ繝ォ縺ェ縺ゥ・スE・ス縺ォ謗・邯壹☆繧九€・

  • fetch 螟ア謨・/ JSON 繝托ソスE繧ケ繧ィ繝ゥ繝シ / strict validation NG 縺ョ 縺・・ス・ス繧後〒繧ゅ€”ub 繧堤函謌舌○縺・canvas 繧呈緒逕サ縺励↑縺・ ・スE・ス驛ィ蛻・・ス・ス逕サ縺励↑縺・・ス・ス縲ょ承繝壹う繝ウ File 縺ォ ERROR: <遞ョ蛻・> 繧定。ィ遉コ縺励€・ HUD 縺ォ ERROR 繝舌ャ繧ク繧抵ソスE縺吶□縺代→縺励€・ struct・スE・スEDSS document・スE・ス・スE core 縺ォ菫晄戟縺励↑縺・・ス・スE

  • 蛻カ邏・・ス・スE

  • dev harness 縺ィ蜷梧ァ倥€〉untime 縺ォ縺ッ bootstrapViewer* / hub.core.* 縺ァ縺ョ縺ソ繧「繧ッ繧サ繧ケ縺吶k縲・

  • 讒矩€繝・・スE繧ソ・スE・スEDSS・スE・ス・スE strict read-only 縺ィ縺励€」iewer 縺九i譖ク縺肴鋤縺医↑縺・・ス・スE

1.9 baseline 襍キ蜍墓凾縺ョ蝗コ螳壽擅莉カ

譛ャ遽€縺ァ縺ッ縲‥ev viewer・スE・スEiewer_dev.html・スE・ス縺ォ縺翫>縺ヲ default.3dss.json 繧定ェュ縺ソ霎シ繧薙□縺ィ縺阪↓ 縲梧ッ主屓蜷後§蛻晄悄逕サ髱「縲阪′蜀咲樟縺輔l繧九h縺・・ス・ス縺吶k縺溘a縺ョ譚。莉カ繧貞ョ夂セゥ縺吶k縲・

1.9.1 蜈・蜉帙ヵ繧。繧、繝ォ縺ョ蝗コ螳・

  1. dev 襍キ蜍墓凾縺ョ baseline 蜈・蜉幢ソスE縲∝クク縺ォ ../3dss/scenes/default/default.3dss.json 縺ィ縺吶k・スE・ス螳溘ヱ繧ケ縺ッ繝ェ繝昴ず繝医Μ讒具ソスE縺ォ霑ス蠕難シ峨€・

  2. 莉厄ソスE繧オ繝ウ繝励Ν繧偵Ο繝シ繝峨☆繧・UI 縺後≠縺」縺ヲ繧ゅ€・ 縲瑚オキ蜍慕峩蠕後↓閾ェ蜍輔〒繝ュ繝シ繝峨&繧後k繝輔ぃ繧、繝ォ縲搾ソスE荳願ィ・1 譛ャ縺ォ髯仙ョ壹☆繧九€・

  3. 隱ュ縺ソ霎シ繧薙□繝輔ぃ繧、繝ォ繝代せ縺ッ襍キ蜍輔Ο繧ー縺ォ蠢・・ス・ス 1 陦鯉ソスE蜉帙☆繧九€・

1.9.2 繧ォ繝。繝ゥ蛻晄悄迥カ諷具ソスE蝗コ螳・

default.3dss.json 隱ュ縺ソ霎シ縺ソ逶エ蠕鯉ソスE繧ォ繝。繝ゥ迥カ諷具ソスE縲・ 繧キ繝シ繝ウ蠅・・ス・ス・スE・スEounding sphere・スE・ス縺九i邂暦ソスE縺輔l繧・豎コ螳夂噪縺ェ蛻晄悄蛟、 縺ィ縺励※蝗コ螳壹☆繧九€・

  • 謚募スア譁ケ蠑・ PerspectiveCamera
  • up 繝吶け繝医Ν: (0, 0, 1) // Z+ 繧堤オカ蟇セ荳翫→縺ソ縺ェ縺・
  • target: 繧キ繝シ繝ウ荳ュ蠢・metrics.center・スE・ス蜿門セ励〒縺阪↑縺・・ス・ス蜷茨ソスE (0, 0, 0)・スE・スE
  • 霍晞屬: 繧キ繝シ繝ウ蜊雁セ・metrics.radius 縺ョ邏・2.4 蛟搾シ・istance = radius * 2.4縲Sadius 荳搾ソスE譎ゑソスE 4・スE・スE
  • 隕夜㍽隗・ fov = 50・スE・スEeg・スE・スE

蛻晄悄繧ォ繝。繝ゥ state 縺ッ renderer 縺ョ getSceneMetrics() 縺九i邂暦ソスE縺励€・ cameraEngine.setState(initialState) 縺ォ繧医j遒コ螳壹&繧後k縲・

縺難ソスE蛻晄悄蛟、縺ッ 3DSS 讒矩€縺ク譖ク縺肴綾縺輔★縲・ 縺ゅ¥縺セ縺ァ縲計iewer runtime 蜀・・スE uiState・スE・スEameraState・スE・ス縲阪→縺励※縺ョ縺ソ菫晄戟縺輔l繧九€・

1.9.3 frame / layer 蛻晄悄迥カ諷・

baseline 襍キ蜍慕峩蠕鯉ソスE frame / layer 迥カ諷具ソスE谺。縺ョ縺ィ縺翫j蝗コ螳壹☆繧九€・

  • frame
  • detectFrameRange(struct) 縺ォ繧医j {min,max} 繧呈アゅa繧九€・
  • uiState.frame.current = frameRange.min・スE・ス譛€蟆上ヵ繝ャ繝シ繝縺九i髢句ァ具シ峨€・
  • uiState.runtime.isFramePlaying = false・スE・ス・スE逕・OFF・スE・ス縲・
  • layer / filters
  • filters.types.points = true
  • filters.types.lines = true
  • filters.types.aux = true
  • 縺、縺セ繧翫€・ソスE逕溘d繝輔ぅ繝ォ繧ソ謫堺ス懊r陦後≧蜑搾ソスE縲鯉ソスE繝ャ繧、繝、 ON縲搾ソスE迥カ諷九°繧牙ァ九∪繧九€・

1.9.4 襍キ蜍輔Ο繧ー・スE・スEOOT / MODEL / CAMERA / LAYERS / FRAME・スE・スE

viewer runtime 縺ッ縲・ソスE譛溷喧螳御コ・・ス・ス縺ォ options.devBootLog === true 縺ョ蝣エ蜷医€・ 谺。縺ョ 5 繝ャ繧ウ繝シ繝峨r 蠢・・ス・ス縺難ソスE鬆・・ス・ス縺ァ 1 蝗槭□縺・蜃コ蜉帙☆繧九€・

  1. BOOT
  1. MODEL
  • 縺ッ options.modelUrl 縺後≠繧鯉ソスE縺昴l繧堤畑縺・・ス・ス縺ェ縺代l縺ー url・スE・スEromUrl 縺ョ蠑墓焚・スE・ス縲・
  1. CAMERA {…}
  • cameraEngine.getState() 逶ク蠖難ソスE payload 繧・JSON 譁・・ス・ス・スE縺ィ縺励※蜃コ蜉帙☆繧九€・
  • {“position”:[x,y,z],“target”:[tx,ty,tz],“fov”:50} 縺ョ繧医≧縺ェ蠖「縲・
  1. LAYERS points=on/off lines=on/off aux=on/off
  2. FRAME frame_id=

縺薙l繧会ソスE縲梧ァ矩€蛹悶Ο繧ー繧、繝吶Φ繝医€阪→縺励※ runtime 蜀・・ス・ス縺九i logger 縺ォ貂。縺輔l繧九€・

  • options.logger 縺碁未謨ー縺ョ蝣エ蜷・ 竊・蜷・・ス・ス繧・logger(line) 縺ィ縺励※蜻シ縺ウ蜃コ縺吶€・

  • options.logger 縺梧悴謖・・ス・ス・スE蝣エ蜷・ 竊・譌「螳壹〒 console.log(line) 繧堤畑縺・・ス・ス縲・ dev viewer・スE・スEiewer_dev.html・スE・ス縺ァ縺ッ騾壼クク縲・

  • logger = devLogger ・スE・スEonsole.log + 繝。繧ソ繝代ロ繝ォ縺ク縺ョ append・スE・スE 繧呈欠螳壹@縲`odel 繝代ロ繝ォ縺ォ

BOOT  viewer_dev
MODEL ../s3dss/scenes/default.3dss.json
CAMERA {...}
LAYERS points=on lines=on aux=on
FRAME  frame_id=0

縺ョ繧医≧縺ェ陦後′荳ヲ縺カ縺薙→繧堤「コ隱阪〒縺阪k縲・

蜷後§繝薙Ν繝・+ 蜷後§ baseline 繝輔ぃ繧、繝ォ縺ォ蟇セ縺励※ 縺薙l繧会ソスE繝ュ繧ー蜀・・ス・ス縺梧ッ主屓荳€閾エ縺吶k縺薙→繧偵b縺」縺ヲ縲瑚オキ蜍墓擅莉カ縺悟崋螳壹&繧後※縺・・ス・ス縲阪→縺ソ縺ェ縺吶€・


2 繝・・スE繧ソ讒矩€縺ィ繧ケ繧ュ繝シ繝樊コ匁侠・スE・ス髢イ隕ァ蛛エ隕也せ・スE・スE

viewer 縺ッ逕滂ソスE繧「繝励Μ縺ァ縺ゅk modeler 縺ィ逡ー縺ェ繧翫€・ 蜈・蜉帙&繧後◆ 3DSS 繝・・スE繧ソ繧偵◎縺ョ縺セ縺セ隱ュ縺ソ蜿悶j縲∝庄隕門喧縺吶k縺縺托ソスE繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ァ縺ゅk縲・

譛ャ遶縺ァ縺ッ viewer 蛛エ縺九i隕九◆ 3DSS 繝・・スE繧ソ縺ョ謇ア縺・・ス・ス繝サ貅匁侠遽・・ス・ス繝サ蜀・・ス・ス菫晄戟譁ケ蠑上r螳夂セゥ縺吶k縲・ viewer 縺ッ讒矩€邱ィ髮・・スE陬懷ョ鯉ソスE菫ョ蠕ゥ繧剃ク€蛻・・ス・ス繧上↑縺・・ス・スE

2.1 髢イ隕ァ蟇セ雎。縺ィ縺ェ繧・3DSS 繝・・スE繧ソ讒矩€

viewer 縺梧桶縺・・ス・ス騾繝・・スE繧ソ縺ッ縲・ *modeler 縺檎函謌舌@縺・.3dss.json 縺ォ螳鯉ソスE萓晏ュ・ 縺吶k縲・

譛€荳贋ス肴ァ矩€・スE・スE

  1. lines・スE・ス髢「菫りヲ∫エ
  2. points・スE・ス蟄伜惠隕∫エ
  3. aux・スE・ス陬懷勧隕∫エ
  4. document_meta・スE・ス邂。逅・・ス・ス蝣ア

viewer 縺ッ縺薙l繧峨r

  • 隱ュ縺ソ蜿悶j・スE・スEtrict validation・スE・スE
  • 蜿ッ隕門喧

縺ョ 2 谿オ髫弱□縺代r諡・・ス・ス縺励€∫キィ髮・・スE陦後o縺ェ縺・・ス・スE

3DSS 閾ェ菴難ソスE莉墓ァ假ソスE蛻・邏吶€・DSS 莉墓ァ俶嶌・スE・スE3DSS.schema.json`・スE・ス縲阪↓蟋費ソスE縲・ viewer 縺ッ縺晢ソスE *髢イ隕ァ蟆ら畑繧ッ繝ゥ繧、繧「繝ウ繝・ 縺ィ縺励※謖ッ繧具ソスE縺・・ス・スE

2.2 繝・・スE繧ソ隱ュ霎シ譎ゑソスE蜃ヲ逅・・ス・ス繝ュ繝シ

viewer 縺ッ讒矩€繝・・スE繧ソ縺ョ隱ュ霎シ譎ゅ↓谺。縺ョ蜃ヲ逅・・ス・ス陦後≧・スE・スE

  1. JSON 隱ュ霎シ・スE・スEromUrl 縺ョ蝣エ蜷茨ソスE fetch 竊・json・スE・スE
  2. Validator 縺ォ繧医k validation・スE・スEalidate3DSS 繧貞クク縺ォ螳溯。鯉シ・
  3. ・スE・ス謖・ョ壽凾縺ョ縺ソ・スE・ス蜿ら・謨エ蜷域€ァ繝√ぉ繝・・ス・ス・スE・スEalidateRefIntegrity・スE・スE
  4. Core 縺ォ immutable state 縺ィ縺励※繝ュ繝シ繝会シ・eep-freeze・スE・スE
  5. structIndex / frameRange 繧呈ァ狗ッ・
  6. Renderer 縺ォ繧医k荳画ャ。蜈・・ス・ス繝シ繝ウ讒狗ッ会シ・yncDocument・スE・ス縺ィ繧キ繝シ繝ウ繝。繝医Μ繧ッ繧ケ邂暦ソスE・スE・スEetSceneMetrics・スE・スE
  7. 蛻晄悄 cameraState 繧堤「コ螳壹@縲…ameraEngine.setState(initialState) 繧定。後≧
  8. core.recomputeVisibleSet() 繧・1 蝗槫他縺ウ縲・ソスE譛・visibleSet 繧堤「コ螳壹☆繧・
  9. hub 繧定ソ斐☆・スE・ス謠冗判繝ォ繝シ繝鈴幕蟋具ソスE陦後o縺ェ縺・・ス・スEost 縺・hub.start() 繧貞他縺カ・スE・スE

2.2.1 strict full validation 縺ョ蜀・・ス・ス

viewer 縺ッ /schemas/3DSS.schema.json・スE・ス繝ュ繝シ繧ォ繝ォ蜷梧「ア・スE・ス繧呈ュ」縺ィ縺吶k Validator・スE・スEJV・スE・ス縺ォ繧医j validation 繧定。後≧縲・

  • validate3DSS(document) 縺ッ **蟶ク縺ォ螳溯。・*・スE・スEG縺ェ繧・throw縲”ub 縺ッ逕滂ソスE縺励↑縺・・ス・スE
  • validateRefIntegrity(document) 縺ッ options.strictValidate===true 縺セ縺滂ソスE options.validateRefIntegrity===true 縺ョ縺ィ縺搾ソスE縺ソ 螳溯。鯉シ・G縺ェ繧・throw・スE・スE
  • bootstrapViewerFromUrl 縺ッ strictValidate 縺ョ default 繧・true 縺ィ縺吶k

AJV 縺ッ蟆代↑縺上→繧よャ。繧呈コ€縺溘☆・スE・スE

  • removeAdditional: false
  • useDefaults: false
  • coerceTypes: false

縺、縺セ繧翫€・ソスE蜉・JSON 繧呈嶌縺肴鋤縺医k譁ケ蜷托ソスE繧ェ繝励す繝ァ繝ウ縺ッ荳€蛻・・ス・ス繧上↑縺・・ス・スE

2.2.2 繝撰ソスE繧ク繝ァ繝ウ縺翫h縺ウ schema_uri 縺ョ謇ア縺・

  • document_meta.schema_uri

    • .../schemas/3DSS.schema.json 繧呈欠縺吶%縺ィ繧定ヲ∵アゅ☆繧具シ医ヵ繧。繧、繝ォ蜷搾ソスE蝗コ螳夲シ・
    • schema_uri 縺ョ MAJOR 荳堺ク€閾エ縺ッ隱ュ霎シ諡貞凄
    • MINOR/PATCH 縺ッ縲《trict validation 縺ョ邨先棡縺ォ蠕薙≧・スE・ス繧ケ繧ュ繝シ繝槭↓蜿阪@縺ヲ縺・・ス・ス縺ー reject・スE・スE
  • document_meta.version

    • 繝峨く繝・繝。繝ウ繝茨シ医さ繝ウ繝・・ス・ス繝・・ス・ス・スE迚育ョ。逅・・ス・ス繧ソ縺ァ縺ゅj縲√せ繧ュ繝シ繝樔コ呈鋤蛻、螳壹↓縺ッ逕ィ縺・・ス・ス縺・・ス・ス陦ィ遉コ繝サ繝ュ繧ー逕ィ騾費シ・

2.3 蜀・・ス・ス state 縺ョ讒矩€・スE・ス讒矩€ vs uiState・スE・スE

Core 蜀・・ス・ス縺ァ菫晄戟縺吶k state 縺ッ縲梧ァ矩€繝・・スE繧ソ縲阪→縲袈I state縲阪↓螳鯉ソスE縺ォ蛻・・ス・ス縺輔l繧九€・

{
  // immutable・スE・スEeep-freeze 貂医∩・スE・スE
  document_3dss: {
    document_meta,
    points: [],
    lines: [],
    aux: [],
  },

  // read-only facade・スE・スEndices 蜀・・ス・ス・スE・スE
  structIndex: { /* getCenter/getKind/getItem ... */ },

  // viewer 蟆ら畑 uiState・スE・スEanonical state・スE・スE
  uiState: {
    frame: {
      current: number | null,
      range: { min:number, max:number } | null,
    },

    runtime: {
      isFramePlaying: boolean,
      isCameraAuto: boolean,
    },

    mode: "macro" | "micro",

    selection: { kind:"points"|"lines"|"aux"|null, uuid:string|null },
    hover:     { kind:"points"|"lines"|"aux"|null, uuid:string|null },

    filters: {
      points: boolean,
      lines: boolean,
      aux: boolean,
      auxModules: { grid:boolean, axis:boolean, plate:boolean, shell:boolean, hud:boolean, extension:boolean },
    },

    viewerSettings: {
      worldAxesVisible: boolean,
      lineWidthMode: "auto"|"fixed"|"adaptive",
      microFXProfile: "weak"|"normal"|"strong",
    },

    visibleSet: {
      frame: number | null,
      points: Set<string>,
      lines: Set<string>,
      aux: Set<string>,
    } | null,

    cameraState: {
      position: [number,number,number],
      target:   [number,number,number],
      up:       [number,number,number],
      fov: number,
      near: number,
      far: number,
      // 蠢・・ス・ス縺ェ繧・distance 縺ェ縺ゥ繧りソス蜉・スE・ス縺溘□縺・renderer 縺ク貂。縺呻ソスE縺ッ荳奇ソスE遒コ螳壼€、・スE・スE
    },

    microState: object | null, // MicroFXPayload
  },
}

迚ケ蠕エ・スE・スE

  • 讒矩€繝・・スE繧ソ・スE・スEdata`・スE・ス・スE deep-freeze 縺輔l縺ヲ縺翫j縲・ 縺ゥ縺ョ繝ャ繧、繝、縺九i繧・**螟画峩遖∵ュ「**縲・
  • UI state・スE・スEuiState・スE・ス・スE viewer 蜀・・ス・ス螟画峩蜿ッ閭ス縺縺後€・ .3dss.json` 縺ク縺ッ譖ク縺肴綾縺輔↑縺・・ス・ス繧サ繝・・ス・ス繝ァ繝ウ髯仙ョ夲シ峨€・
  • visibleSet / microState 縺ッ UI state 縺ョ豢セ逕滓ュ蝣ア縺ィ縺励※ Core 縺梧園譛峨@縲・ Renderer 縺ッ縺昴l繧定ェュ縺ソ蜿悶k縺縺代→縺吶k縲・

2.4 viewer 縺ォ縺翫¢繧区ァ矩€繝・・スE繧ソ縺ョ謇ア縺・・ス・ス

viewer 縺ッ讒矩€繝・・スE繧ソ縺ォ蟇セ縺励※谺。繧剃ク€蛻・・ス・ス繧上↑縺・・ス・スE

  • 蜉遲・・ス・スEdd・スE・スE
  • 螟画峩・スE・スEpdate・スE・スE
  • 陬懷ョ鯉シ・uto-fill・スE・スE
  • 髯、蜴サ・スE・スEuto-clean・スE・スE
  • 謗ィ貂ャ陬懷ョ鯉シ・nference・スE・スE
  • 蜀肴ァ具ソスE・スE・スEestructure・スE・スE
  • 閾ェ蜍包ソスE繝シ繧ク・スE・スEerge・スE・スE

讒矩€繝・・スE繧ソ縺ッ *縲瑚ェュ縺ソ蜿悶k縺縺代€・ 縺ァ縺ゅj縲・ 隕冶ヲ壼喧縺ョ縺溘a縺ョ隗」驥茨ソスE縺励※繧ゅ€∵ァ矩€閾ェ菴難ソスE螟峨∴縺ェ縺・・ス・スE

2.4.1 荳榊、会シ・mmutable・スE・ス・スE邯ュ謖・

  • Core 縺ォ繝ュ繝シ繝峨@縺滓ァ矩€繝・・スE繧ソ縺ッ縲‥eep-freeze 縺ォ繧医j荳榊、峨→縺吶k縲・
  • 驕ク謚橸ソスEhover繝サcamera繝サ繝輔ぅ繝ォ繧ソ繝サ蜀咲函迥カ諷九↑縺ゥ縺ョ螟牙喧縺ッ
    縺吶∋縺ヲ uiState 縺ォ縺ョ縺ソ蜿肴丐縺輔l繧九€・
  • three.js 縺ョ繧ェ繝悶ず繧ァ繧ッ繝茨シ・THREE.Object3D`・スE・ス縺ォ蜈・JSON 繧堤峩謗・縺カ繧我ク九£繧九↑縺ゥ縲・ 讒矩€繝・・スE繧ソ縺ク縺ョ譖ク縺崎セシ縺ソ邨瑚キッ縺檎函縺倥k險ュ險茨ソスE遖∵ュ「縺ィ縺吶k縲・

2.4.2 陦ィ遉コ蛻カ蠕。縺ョ縺溘a縺ョ隗」驥茨ソスE險ア蜿ッ縺輔l繧・

陦ィ遉コ蛻カ蠕。縺ョ縺溘a縺ョ *縲瑚ァ」驥医€・ 縺ッ險ア蜿ッ縺輔l繧九€ゆセ具シ・

  • frame.current 縺ォ蠢懊§縺溯ヲ∫エ縺ョ陦ィ遉コ繝サ髱櫁。ィ遉コ
  • appearance.* 縺ョ謠冗判譁ケ蠑丞渚譏・スE・ス濶イ繝サ螟ェ縺包ソスE騾擾ソスE蠎ヲ縺ェ縺ゥ・スE・スE
  • marker.shape 縺ォ蠢懊§縺・geometry 逕滂ソスE
  • aux.module 縺ョ遞ョ鬘槭↓蠢懊§縺溯。ィ遉コ・スE・スErid / axis / label 縺ェ縺ゥ・スE・スE

縺薙l繧会ソスE 陦ィ遉コ繝ュ繧ク繝・・ス・ス 縺ァ縺ゅj縲∵ァ矩€繝・・スE繧ソ縺ョ螟画峩縺ァ縺ッ縺ェ縺・・ス・スE viewer 縺ッ appearance.visible 縺ェ縺ゥ繧貞盾辣ァ縺励※繧ゅ€∝€、繧呈嶌縺肴鋤縺医◆繧贋ク頑嶌縺阪@縺溘j縺励↑縺・・ス・スE

2.4.3 marker.text 縺ョ viewer 隗」驥井サ墓ァ・

viewer 縺ッ points.appearance.marker.text 繧・蜚ッ荳€縺ョ隗」驥亥ア、・・abelIndex・峨〒豁」隕丞喧縺励€ヽenderer 縺ッ縺昴・邨先棡縺縺代r蜿ら・縺励※謠冗判縺吶k縲・ 莉・荳九・隕丞援縺ッ viewer 蜀・〒蝗コ螳壹→縺励€}ublic / dist 縺ェ縺ゥ縺ョ繝溘Λ繝シ縺ォ縺ッ驥崎、・ョ夂セゥ繧堤スョ縺九↑縺・€・

  • content・夐撼遨コ譁・ュ怜・縺ェ繧画怙蜆ェ蜈医〒菴ソ逕ィ縲らゥコ縺ェ繧・signification.name 繧定ィ€隱樣・シ・document_meta.i18n 竊・ja 竊・en竊・譛€蛻昴・譁・ュ怜・繧ュ繝シ・峨〒繝輔か繝シ繝ォ繝舌ャ繧ッ縺吶k縲・ 荳。譁ケ遨コ縺ェ繧峨Λ繝吶Ν閾ェ菴薙r逕滓・縺励↑縺・€・-size・・*world 蜊倅ス阪・隲也炊繧オ繧、繧コ**縲AlabelConfig.baseLabelSize=8 繧貞渕貅悶↓ world 鬮倥&縺ク螟画鋤縺吶k縲・ number 莉・螟悶€√∪縺溘・ 0 莉・荳九・ 8 縺ォ繝輔か繝シ繝ォ繝舌ャ繧ッ縲・- plane・啻xy/yz/zx/billboard縲・ billboard 縺ッ繧ォ繝。繝ゥ豁」髱「蝗コ螳壹€~xy 縺ッ +Z 豁」髱「縲~yz 縺ッ +X 豁」髱「縲~zx 縺ッ +Y 豁」髱「繧貞髄縺上€・ 辟。蜉ケ蛟、縺ッ zx 縺ォ繝輔か繝シ繝ォ繝舌ャ繧ッ縲・- align・啻left/center/right テ・top/middle/baseline 繧・left top 縺ョ蠖「蠑上〒謖・ョ壹☆繧九€・ 蝓コ貅也せ・・oint 蠎ァ讓呻シ峨↓蟇セ縺吶k繧「繝ウ繧ォ繝シ菴咲スョ縺ァ縺ゅj縲~baseline 縺ッ 譁・ュ鈴伜沺縺ョ荳狗ォッ縺ィ縺励※謇ア縺・€・ 辟。蜉ケ蛟、縺ッ center middle 縺ォ繝輔か繝シ繝ォ繝舌ャ繧ッ縲・- font・啻string` 繧貞女縺台サ倥¢繧九€・
    • helvetiker_regular 縺セ縺溘・遨コ譁・ュ励・ viewer 縺ョ譌「螳壹ヵ繧ゥ繝ウ繝医↓繝輔か繝シ繝ォ繝舌ャ繧ッ縲・
    • 縺昴l莉・螟悶・ **CSS font-family 譁・ュ怜・**縺ィ縺励※謇ア縺・€・
    • 蜈磯ュ縺ォ italic/oblique/normal 繧・100..900/bold 縺ェ縺ゥ縺ョ繝医・繧ッ繝ウ縺悟性縺セ繧後k蝣エ蜷医・ style / weight 縺ィ縺励※隗」驥医@縲∵ョ九j繧・family 縺ィ縺吶k縲・

2.5 frame / frames 縺ョ謇ア縺・

3DSS 蛛エ縺ョ frames 縺ィ viewer 蛛エ縺ョ frame.current 縺ョ髢「菫ゑソスE谺。縺ョ騾壹j縺ィ縺吶k・スE・スE

  • uiState.frame.current === null 竊・frames 繧堤┌隕悶@縺ヲ蜿ッ隕門愛螳壹☆繧具シ・rame 繝輔ぅ繝ォ繧ソ OFF・スE・スE

  • uiState.frame.current === n 竊・隕∫エ縺ョ appearance.frames 縺・

    • number 縺ョ蝣エ蜷茨シ嗜 縺ィ荳€閾エ縺吶k譎ゅ□縺大庄隕・
    • number[] 縺ョ蝣エ蜷茨シ嗜 繧貞性繧€譎ゅ□縺大庄隕厄シ育ゥコ驟搾ソスE縺ッ蟶ク縺ォ荳榊庄隕厄シ・
  • appearance.frames 譛ェ螳夂セゥ 竊・蜈ィ繝輔Ξ繝シ繝縺ァ蜿ッ隕厄シ・rame.current 縺ォ萓晏ュ倥@縺ェ縺・・ス・スE

frameRange {min,max} 縺ッ detectFrameRange(document) 縺ァ邂暦ソスE縺励€・ frames 縺・1 莉カ繧ら┌縺・・ス・ス蜷茨ソスE range=null 縺ィ縺吶k縲・

2.6 蜿ゑソスE謨エ蜷茨シ・ef 竊・uuid・スE・スE

ref 竊・uuid 縺ョ謨エ蜷茨ソスE 隱ュ霎シ譎ゑソスE Validator 縺御ソ晁ィシ 縺吶k縲・

莉」陦ィ萓具シ・

  • line.end_a.ref 竊・points[*].uuid
  • line.end_b.ref 竊・points[*].uuid
  • 縺晢ソスE莉悶€・DSS 莉墓ァ俶嶌縺ァ螳夂セゥ縺輔l縺ヲ縺・・ス・ス蜈ィ縺ヲ縺ョ蜿ゑソスE

荳肴紛蜷医′縺ゅk蝣エ蜷茨シ・

  • viewer 縺ッ隱ュ霎シ閾ェ菴薙r螟ア謨励&縺帙k・スE・ス萓句、也匱逕滂ソスE繧ィ繝ゥ繝シ繝。繝・・ス・ス繝シ繧ク陦ィ遉コ・スE・ス縲・
  • 蜀・・ス・ス縺ァ縲後〒縺阪k遽・・ス・ス縺縺第緒逕サ縺吶k縲阪→縺・・ス・ス縺滓嫌蜍包ソスE陦後o縺ェ縺・ ・スE・スEartial rendering / best-effort 謠冗判縺ッ縺励↑縺・・ス・ス縲・

runtime 蜀・・ス・ス縺ョ蜀阪メ繧ァ繝・・ス・ス縺ッ荳崎ヲ√〒縺ゅj縲・ 諤ァ閭ス髱「繧貞━蜈医@縺ヲ validation 縺ォ荳€莉サ 縺吶k縲・

2.7 隱ュ霎シ遖∵ュ「繝サ髱槫ッセ雎。繝・・スE繧ソ

viewer 縺ッ莉・荳九r讒矩€繝・・スE繧ソ縺ィ縺励※謇ア繧上↑縺・・ス・スE

  • UI 迥カ諷具シ医き繝。繝ゥ繝サ驕ク謚樒憾諷九↑縺ゥ・スE・スE
  • 繧ウ繝。繝ウ繝医ヵ繧」繝シ繝ォ繝会シ・uthoring 逕ィ縺ョ free text・スE・スE
  • 豕ィ驥茨ソスE繝。繝「繝サ繝ャ繝晢ソスE繝茨シ域ァ矩€螟厄ソスE narrative・スE・スE
  • modeler 縺ョ蜀・・ス・ス諠・・ス・ス・スE・スEndo stack 縺ェ縺ゥ・スE・スE
  • 螟夜Κ蝓九a霎シ縺ソ glTF / 3D 繝「繝・・ス・ス・スE・ス讒矩€螻、縺ィ縺ッ蛻・繝ャ繧、繝、・スE・スE
  • viewer 迢ャ閾ェ蠖「蠑擾ソスE JSON・スE・ス・スE蜉幢ソスE隱ュ霎シ縺ィ繧ゅ↓遖∵ュ「・スE・スE
  • 3DSS-prep・スE・スEuthoring 逕ィ繝溘ル繝槭Ν繧ケ繧ュ繝シ繝橸シ・

讒矩€繝・・スE繧ソ縺ィ縺励※謇ア縺・・スE縺ッ縲・ /schemas/3DSS.schema.json 縺ォ貅匁侠縺励◆ 3DSS 縺ョ縺ソ縺ィ縺吶k縲・

2.8 繝・・スE繧ソ讒矩€縺ォ髢「縺吶k遖∵ュ「莠矩・・ス・スEiewer・スE・スE

viewer 縺ッ讒矩€繝・・スE繧ソ縺ォ蟇セ縺励※縲∵ャ。繧定。後o縺ェ縺・・ス・スE

  1. 讒矩€縺ョ閾ェ蜍穂ソョ蠕ゥ
    • 谺謳阪お繝・・ス・ス繧抵ソスE蜍戊」懷ョ後☆繧・
    • 蜿ゑソスE蛻・・ス・ス繧抵ソスE蜍輔〒蜑企勁縺吶k
  2. 證鈴サ呻ソスE default 莉倅ク・
    • 繧ケ繧ュ繝シ繝槭↓ default 縺後≠縺」縺ヲ繧ゅ€・ runtime 蛛エ縺ァ縺昴l繧貞享謇九↓驕ゥ逕ィ縺励※ JSON 繧呈嶌縺肴鋤縺医↑縺・・ス・スE
  3. 繧ュ繝シ蜷搾ソスE譖ク縺肴鋤縺・
    • name_ja / name_en 縺ェ縺ゥ繧抵ソスE蜍・merge / rename 縺励↑縺・・ス・スE
  4. 蠎ァ讓呻ソスE荳ク繧・ソスE豁」隕丞喧
    • 蟆乗焚轤ケ譯∵焚縺ョ荳ク繧・
    • 迚ケ螳夊サク縺ク縺ョ謚募スア
  5. frame 諠・・ス・ス縺ョ閾ェ蜍慕函謌・
    • frames 譛ェ螳夂セゥ隕∫エ縺ク縺ョ閾ェ蜍穂サ倅ク・
    • time-series 縺ョ陬憺俣
  6. 繧ケ繧ュ繝シ繝槫、夜・・ス・ス縺ョ菫晄戟
    • additionalProperties:false 縺ォ蜿阪☆繧玖ソス蜉繧ュ繝シ繧・ 縲御ク€譌ヲ隱ュ繧薙〒縺九i謐ィ縺ヲ繧九€阪%縺ィ繧り。後o縺ェ縺・・ス・スEalidation 縺ァ reject・スE・ス縲・
  7. UI 迥カ諷具ソスE JSON 菫晏ュ・
    • camera / selection / filters / runtime 繝輔Λ繧ー縺ェ縺ゥ繧・ .3dss.json 縺ク譖ク縺肴綾縺輔↑縺・・ス・スE
  8. normalize / resolve / prune / reorder 縺ョ螳溯。・
    • JSON 縺ョ key 鬆・・ス・ス螟画峩
    • 蜀鈴聞諠・・ス・ス縺ョ蜑企勁
    • 蛻・繝輔か繝シ繝槭ャ繝医∈縺ョ螟画鋤

viewer 縺ッ讒矩€繝・・スE繧ソ繧・ *窶懈焔縺、縺九★縺ョ縺セ縺セ謇ア縺・・ス・ス縺ィ窶・ 縺悟宍蟇・・ス・ス莉墓ァ倥→縺励※鄒ゥ蜍吶▼縺代i繧後k縲・

2.9 Runtime API 讎りヲ・・ス・ス譛€蟆上そ繝・・ス・ス・スE・スE

viewer 縺ッ modeler 縺九i螳鯉ソスE縺ォ迢ャ遶九@縺・read-only 繧「繝励Μ縺ァ縺ゅk縺後€・ UI 繝擾ソスE繝阪せ繝サdev 逕ィ繝・・スE繝ォ繝サ蟆・・ス・ス縺ョ modeler 縺九i縺ョ蜀榊茜逕ィ繧呈Φ螳壹@縲・ 螟夜Κ蜷代¢縺ォ螳牙ョ壹@縺ヲ謠蝉セ帙☆繧・runtime API 縺ョ譛€蟆上そ繝・・ス・ス 繧貞ョ夂セゥ縺吶k縲・

隧ウ邏ー縺ェ API 莉墓ァ假ソスE蛻・邏・runtime_spec 縺ォ蟋費ソスE縲・ 譛ャ遽€縺ァ縺ッ縲後お繝ウ繝医Μ繝昴う繝ウ繝医€阪→縲悟、夜Κ縺九i隕九∴繧・hub 縺ョ鬪ィ譬シ縲阪□縺代r遉コ縺吶€・

2.9.1 繧ィ繝ウ繝医Μ API

  • bootstrapViewer(canvasOrId, threeDSS, options?) 竊・hub

    • validate3DSS 繧貞クク縺ォ螳溯。後@縲∝ソ・・ス・ス縺ェ繧・validateRefIntegrity 繧貞ョ溯。後☆繧九€・
  • bootstrapViewerFromUrl(canvasOrId, url, options?) 竊・Promise<hub>

    • fetch 竊・json 竊・bootstrapViewer 縺ォ貂。縺吶€・
    • strictValidate 縺ョ default 縺ッ true縲・

options・スE・スE

  • devBootLog?: boolean
  • logger?: (line:string)=>void
  • strictValidate?: boolean
  • validateRefIntegrity?: boolean

窶サ BOOT/MODEL 遲会ソスE繝ュ繧ー縺ォ莉倅ク弱☆繧・label 繧・modelUrl 繧呈戟縺溘○縺溘>蝣エ蜷茨ソスE縲・ runtime_spec.viewer.yaml 蛛エ縺ョ options 螳夂セゥ縺ォ霑ス蜉縺励€∽ク。莉墓ァ倥r荳€閾エ縺輔○繧九€・

2.9.2 hub 縺ョ螟門ス「

bootstrapViewer* 縺ョ謌サ繧雁€、 hub 縺ッ縲∝ー代↑縺上→繧よャ。縺ョ繝励Ο繝代ユ繧」繧呈戟縺、・スE・スE

  • hub.core 窶ヲ runtime API 蜷榊燕遨コ髢難シ・rame / camera / selection / mode / micro / filters / runtime / uiState 遲会シ・
  • hub.start() 窶ヲ requestAnimationFrame 繝ォ繝シ繝鈴幕蟋・
  • hub.stop() 窶ヲ 繝ォ繝シ繝怜●豁「
  • hub.pickObjectAt(ndcX, ndcY) 窶ヲ 繝斐ャ繧ュ繝ウ繧ー・スE・スEI 縺九i selectionController 縺ク縺ョ讖区ク。縺暦シ・

莉・髯搾ソスE遶・スE・スE.8 / 7.11 遲会シ峨♀繧茨ソスE runtime_spec 縺ォ縺翫>縺ヲ縲・ hub.core 莉・荳具ソスE蜷・・ス・ス繧ス繝・・ス・ス・スE・スEframe.get/set/step/camera.rotate/pan/zoom/reset` 縺ェ縺ゥ・スE・ス繧・ 隧ウ邏ー縺ォ螳夂セゥ縺吶k縲・

譛ャ遶縺ョ遽・・ス・ス縺ァ縺ッ・スE・スE

  • 縲梧ァ矩€繝・・スE繧ソ縺ッ 3DSS 縺ォ螳鯉ソスE萓晏ュ倥@ read-only縲・
  • 縲袈I 縺九i讒矩€縺ク縺ッ蠢・・ス・ス hub.core.* 邨檎罰縺ァ繧「繧ッ繧サ繧ケ縺吶k縲・

縺ィ縺・・ス・ス 2 轤ケ繧剃サ墓ァ倅ク奇ソスE邏・・ス・ス莠九→縺励※譏守、コ縺吶k縺ォ縺ィ縺ゥ繧√k縲・


3 UI讒具ソスE縺ィ謫堺ス應ス鍋ウサ・スE・スEiewer・スE・スE

viewer 縺ッ讒矩€繝・・スE繧ソ縺ョ邱ィ髮・・ス・ス荳€蛻・・ス・ス繧上★縲・ 髢イ隕ァ繝サ遒コ隱搾ソスE逅・・ス・ス 縺ョ縺溘a縺ョ UI 讒矩€縺縺代r蛯吶∴繧九€・

譛ャ遶縺ァ縺ッ縲・・ス・ス隕ァ蟆ら畑 UI 縺ィ縺励※蠢・・ス・ス縺ェ讖滂ソスE繝サ繝ャ繧、繧「繧ヲ繝茨ソスE謫堺ス應ス鍋ウサ繧貞ョ夂セゥ縺励€・ 邱ィ髮・UI 繧・・ス・ス蟄・UI 縺悟ュ伜惠縺励↑縺・・ス・ス縺ィ繧抵ソスE遒コ縺ォ縺吶k縲・

viewer UI 縺ッ modeler UI 縺ィ蛻・邉サ邨ア縺ァ縺ゅj縲∫キィ髮・・ス・ス蠖吶r蜷ォ縺セ縺ェ縺・・ス・スE

3.1 UI 蜈ィ菴薙Ξ繧、繧「繧ヲ繝・

viewer_dev・スE・ス髢狗匱逕ィ viewer・スE・ス・スE讓呎コ悶Ξ繧、繧「繧ヲ繝茨ソスE谺。縺ョ莠鯉ソスE蜑イ讒具ソスE縺ィ縺吶k・スE・スE

笏娯楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏・
笏・      繝。繧、繝ウ繝薙Η繝シ・スE・スED繝励Ξ繝薙Η繝シ・スE・スE      笏・
笏懌楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏ャ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏、
笏・    諠・・ス・ス繝代ロ繝ォ     笏・ 陦ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ繝代ロ繝ォ  笏・
笏披楳笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏エ笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏€笏・
  • 荳頑ョオ・スE・スthree.js 縺ォ繧医k 3D 繝。繧、繝ウ繝薙Η繝シ・スE・スEanvas・スE・スE
  • 蟾ヲ荳具シ壹Γ繧ソ諠・・ス・ス繝サ繝ュ繧ー繧定。ィ遉コ縺吶k縲梧ュ蝣ア繝代ロ繝ォ縲・
  • 蜿ウ荳具シ喃rame / filter / mode / gizmo 縺ェ縺ゥ縺ョ縲瑚。ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ繝代ロ繝ォ縲・

譛ャ繝ャ繧、繧「繧ヲ繝茨ソスE dev viewer・スE・スEviewer_dev.html`・スE・ス・スE讓呎コ悶→縺励€・ 譛ャ逡ェ蝓九a霎シ縺ソ viewer 縺ァ縺ッ縲・ソスE繧ケ繝茨ソスE UI 驛ス蜷医↓蜷医o縺帙※蜀肴ァ具ソスE縺励※繧医>縲・

3.1.1 PC 蜷代¢ dev viewer 繝ャ繧、繧「繧ヲ繝郁ヲ∽サカ

PC 蜷代¢縺ョ dev viewer 縺ァ縺ッ縲∝ー代↑縺上→繧よャ。繧呈コ€縺溘☆・スE・スE

  • 繝。繧、繝ウ繝薙Η繝シ
    • 3D 繧ュ繝」繝ウ繝舌せ・スE・スE`・スE・ス繧・1 譫壽戟縺、縲・
    • pointerInput・スE・ス・スE繧ヲ繧ケ / 繧ソ繝・・ス・ス・スE・ス繧偵く繝」繝ウ繝舌せ縺ォ縺縺托ソスE繧我ク九£繧九€・
  • 諠・・ス・ス繝代ロ繝ォ・スE・ス蟾ヲ荳具シ・
    • File 諠・・ス・ス・スE・ス繧ス繝シ繧ケ繝代せ / frame range / current frame・スE・スE
    • Model 繝ュ繧ー・スE・スEevBootLog 繧貞性繧€・スE・ス繧偵せ繧ッ繝ュ繝シ繝ォ鬆伜沺縺ィ縺励※陦ィ遉コ縲・
  • 陦ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ繝代ロ繝ォ・スE・ス蜿ウ荳具シ・
    • frame 繧ケ繝ゥ繧、繝€縺ィ蜀咲函繝懊ち繝ウ鄒、
    • points / lines / aux 縺ョ陦ィ遉コ繝輔ぅ繝ォ繧ソ
    • mode HUD・スE・スEacro / meso / micro・スE・ス縺ィ focus 陦ィ遉コ
    • 霆ク繧ョ繧コ繝「縺ョ DOM 繝ゥ繝・・ス・ス・スE・ス蟾ヲ荳・canvas 荳翫↓驥搾ソスE縺ヲ繧ゅh縺・・ス・スE

3.1.2 譛ャ逡ェ viewer 譛€蟆剰ヲ∽サカ

譛ャ逡ェ viewer・スE・スEstro 蝓九a霎シ縺ソ縺ェ縺ゥ・スE・ス縺ァ縺ッ縲∵ャ。縺縺代r譛€菴朱剞縺ィ縺吶k・スE・スE

  • 繝。繧、繝ウ繝薙Η繝シ・スE・スED canvas・スE・スE
  • frame 蛻・・ス・ス UI・スE・ス繧ケ繝ゥ繧、繝€ or +/- 繝懊ち繝ウ or 繧ュ繝シ繝懶ソスE繝会シ・
  • layer 蛻・・ス・ス UI・スE・スEoints / lines / aux 縺ョ ON/OFF・スE・スE
  • 驕ク謚樔クュ隕∫エ縺ョ隴伜挨縺後〒縺阪k陦ィ遉コ・スE・ス萓具シ啅UID / name 縺ョ縺ゥ縺。繧峨°・スE・スE

dev 逕ィ HUD / 繝ュ繧ー繝代ロ繝ォ / 隧ウ邏ー縺ェ繝。繧ソ諠・・ス・ス陦ィ遉コ縺ッ縲・ 譛ャ逡ェ viewer 縺ァ縺ッ莉サ諢上→縺吶k縲・

3.2 繝。繧、繝ウ繝薙Η繝シ縺ィ HUD

3.2.1 繝。繧、繝ウ繝薙Η繝シ・スE・スED 繝励Ξ繝薙Η繝シ・スE・スE

繝。繧、繝ウ繝薙Η繝シ縺ョ雋ャ蜍呻シ・

  • three.js 縺ォ繧医k 3D 謠冗判・スE・スEenderer 螻、縺ョ canvas・スE・スE
  • 繧ォ繝。繝ゥ謫堺ス懶シ・rbit / pan / zoom・スE・ス・スE隕冶ヲ夂噪繝輔ぅ繝シ繝峨ヰ繝・・ス・ス
  • 驕ク謚櫁ヲ∫エ縺ョ繝上う繝ゥ繧、繝郁。ィ遉コ・スE・スEelection + microFX 縺ョ邨先棡・スE・スE
  • frame / filters 縺ォ繧医k陦ィ遉コ蛻・・ス・ス縺ョ邨先棡繧貞渚譏

蛻カ邏・・ス・スE

  • 繝。繧、繝ウ繝薙Η繝シ縺ッ讒矩€繝・・スE繧ソ繧堤キィ髮・・ス・ス縺ェ縺・・ス・スE
  • UI 繧、繝吶Φ繝・竊・camera/frame/selection/mode 縺ク縺ョ蜿肴丐縺ッ
    縺吶∋縺ヲ PointerInput / KeyboardInput 竊・hub.core. 邨檎罰* 縺ィ縺吶k縲・

3.2.2 HUD・スE・ス繝医・繧ケ繝・/ mode 繝斐Ν / focus 繝ゥ繝吶Ν・スE・スE

dev viewer 縺ァ縺ッ縲√Γ繧、繝ウ繝薙Η繝シ荳翫↓谺。縺ョ HUD 繧帝㍾縺ュ繧具シ・

  • 繝茨ソスE繧ケ繝医Γ繝・・ス・ス繝シ繧ク・スE・スEviewerToast`・スE・スE
    • showHudMessage(text, {duration, level}) 逕ア譚・縺ョ邁。譏馴€夂衍縲・
    • 萓具シ啻”Viewer loaded”, ”Camera: HOME”, ”MACRO MODE”` 縺ェ縺ゥ縲・
  • mode 繝斐Ν
    • MACRO / MESO / MICRO 縺ョ 3 縺、縺ョ pill 繧定。ィ遉コ縲・
    • 迴セ蝨ィ mode 縺ォ蟇セ蠢懊☆繧・pill 縺縺・mode-pill-active 繧剃サ倅ク弱€・
  • focus 繝ゥ繝吶Ν
    • 迴セ蝨ィ selection・スE・スEuiState.selection.uuid`・スE・ス繧定。ィ遉コ縲・
    • selection 縺後↑縺・・ス・ス蜷茨ソスE "-" 繧定。ィ遉コ縲・

HUD 縺ッ dev viewer 蟆ら畑縺ョ陬懷勧 UI 縺ィ縺励€・ 譛ャ逡ェ viewer 縺ァ縺ッ莉サ諢乗ゥ滂ソスE縺ィ縺吶k縲・

3.2.3 霆ク繧ョ繧コ繝「・スE・スEizmo・スE・スE

  • DOM 繝呻ソスE繧ケ縺ョ HUD 縺ィ縺励※逕サ髱「蟾ヲ荳九↓驥搾ソスE繧九€・
  • 蠖ケ蜑イ・スE・スE
    • 迴セ蝨ィ繧ォ繝。繝ゥ縺ョ蜷代″繧堤、コ縺咏ー。譏・3D axes 陦ィ遉コ縲・
    • 繧ッ繝ェ繝・・ス・ス縺ァ繧ォ繝。繝ゥ繧剃クサ隕∬サク譁ケ蜷托シ・X / +Y / +Z・スE・ス縺ク snap 縺吶k縲・
    • HOME 繝懊ち繝ウ縺ァ繧ォ繝。繝ゥ蛻晄悄迥カ諷九∈謌サ縺吶€・
  • 螳溯」・・ス・スE
    • viewer/ui/gizmo.js・スE・スEOM 謫堺ス懶シ峨→縺励€》hree.js 縺ョ scene 縺ォ縺ッ蜈・繧後↑縺・・ス・スE
    • 繧ォ繝。繝ゥ謫堺ス懶ソスE viewerHub.core.camera.reset / .snapToAxis(axis) 邨檎罰縺ァ陦後≧縲・

3.3 諠・・ス・ス繝代ロ繝ォ・スE・スEile / Model・スE・スE

諠・・ス・ス繝代ロ繝ォ縺ッ縲∽クサ縺ォ dev viewer 縺ァ蛻ゥ逕ィ縺吶k 繝・・ス・ス繧ケ繝茨ソスE繝シ繧ケ縺ョ繝。繧ソ陦ィ遉コ鬆伜沺 縺ィ縺吶k縲・

3.3.1 File 諠・・ス・ス繝代ロ繝ォ

  • 陦ィ遉コ蜀・・ス・ス・スE・ス萓具シ会シ・
    • Source: ../3dss/sample/frame_aux_demo.3dss.json
    • Frame range: [min, max]
    • Current frame: n
  • 諠・・ス・ス貅撰シ・
    • hub.core.frame.getRange() / hub.core.frame.getActive()
    • bootstrapViewerFromUrl 縺ォ貂。縺励◆ modelUrl

3.3.2 Model 繝ュ繧ー繝代ロ繝ォ

  • 蛻晄悄迥カ諷具シ・

    • "Model" 隕具ソスE縺励→縲~(logs will appear here)` 縺ョ繝励Ξ繝シ繧ケ繝帙Ν繝€縲・
  • devBootLog 繧呈怏蜉ケ縺ォ縺励◆蝣エ蜷茨シ・

    • 襍キ蜍墓凾縺ォ蠢・・ス・ス谺。縺ョ 5 陦後′縺難ソスE繝代ロ繝ォ縺ォ荳ヲ縺カ・スE・スE

      BOOT  <devLabel>
      MODEL <modelUrl or (unknown)>
      CAMERA {"position":[...],"target":[...],"fov":50}
      LAYERS points=on/off lines=on/off aux=on/off
      FRAME  frame_id=<n>
  • 蜃コ蜉帷オ瑚キッ・スE・スE

    • bootstrapViewer 繧ェ繝励す繝ァ繝ウ devBootLog: true 譎ゅ€・
    • options.logger 縺後≠繧鯉ソスE縺昴l繧剃スソ縺・・ス・ス辟。縺代l縺ー console.log 繧堤畑縺・・ス・ス縲・
    • viewer_dev 繝擾ソスE繝阪せ縺ァ縺ッ logger: devLogger 繧呈ク。縺励€・ devLogger 縺・appendModelLog 繧帝€壹§縺ヲ Model 繝代ロ繝ォ縺ク霑ス險倥☆繧九€・

devBootLog 縺ョ隧ウ邏ー莉墓ァ假ソスE 1.8 遽€繧呈ュ」縺ィ縺吶k縲・

3.4 陦ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ繝代ロ繝ォ

陦ィ遉コ繧ウ繝ウ繝医Ο繝シ繝ォ繝代ロ繝ォ縺ッ縲」iewer 縺ョ 迥カ諷九r螟厄ソスE縺九i謫堺ス懊☆繧句髪荳€縺ョ UI 髮・・ス・スE 縺ァ縺ゅk縲・ 縺溘□縺玲悽逡ェ viewer 縺ァ縺ッ縲・・スE鄂ョ繧・・ス・ス縺溽岼縺ッ繝帙せ繝医↓莉サ縺帙€・ API 蜻シ縺ウ蜃コ縺暦シ・ub.core.・スE・ス縺縺代r莉墓ァ倥→縺励※蝗コ螳壹☆繧九€・

3.4.1 Frame 繧ウ繝ウ繝医Ο繝シ繝ォ

dev viewer 縺ョ frame UI 縺ッ谺。縺ョ讒具ソスE縺ィ縺吶k・スE・スE

  • 繧ケ繝ゥ繧、繝€・スE・スE#frame-slider`・スE・スE

    • input 繧、繝吶Φ繝医〒 hub.core.frame.setActive(newValue) 繧貞他縺カ縲・
  • 繝ゥ繝吶Ν・スE・スE#frame-slider-label`・スE・スE

    • hub.core.frame.getActive() 繧定。ィ遉コ縺吶k縲・
  • 繝懊ち繝ウ鄒、

    • btn-rew 窶ヲ hub.core.frame.setActive(range.min)
    • btn-step-back 窶ヲ hub.core.frame.prev()
    • btn-home 窶ヲ hub.core.frame.setActive(range.min)
    • btn-step-forward 窶ヲ hub.core.frame.next()
    • btn-ff 窶ヲ hub.core.frame.setActive(range.max)
    • btn-play 窶ヲ ・スE・スEev harness 蛛エ縺ァ蜀咲函繝医げ繝ォ・スE・スE

蜀咲函繝医げ繝ォ縺ッ dev viewer 蝗コ譛会ソスE螳溯」・・ス・ス縺励€・ 蜀・・ス・ス逧・・ス・ス縺ッ setInterval 遲峨〒 next 繧剃ク€螳夐俣髫斐〒蜻シ縺ウ蜃コ縺吶€・ runtime 譛ャ菴難ソスE莉墓ァ倥→縺励※縺ッ縲掲rame 蜀咲函 API縲阪′縺ェ縺上※繧ゅh縺上€・ 螳溯」・・ス・ス繧句エ蜷茨ソスE hub.core.runtime.* 縺ィ縺励※蛻・騾泌ョ夂セゥ縺吶k縲・

frame UI 縺ョ隕∽サカ・スE・スE

  • frame ID 螟画峩縺ッ 蟶ク縺ォ hub.core.frame.* 邨檎罰 縺ィ縺吶k縲・
  • UI 莉・螟厄シ・eyboardInput・スE・ス縺九i・スE螟画峩縺ッ縲~frameUiLoop` 縺ォ繧医j繧ケ繝ゥ繧、繝€繝サ繝ゥ繝吶Ν縺ク蜿肴丐縺吶k縲・
  • 繝槭え繧ケ繝帙う繝シ繝ォ縺ッ v1 縺ァ縺ッ Zoom 蟆ら畑 縺ィ縺励€’rame 螟画峩縺ォ縺ッ菴ソ繧上↑縺・・ス・スE

3.4.2 Layer 繝輔ぅ繝ォ繧ソ

points / lines / aux 縺ョ陦ィ遉コ蛻・・ス・ス UI 繧呈戟縺、縲・

  • 繝懊ち繝ウ・スE・スE
    • #filter-points
    • #filter-lines
    • #filter-aux
  • 陦ィ遉コ迥カ諷具シ・
    • filter-on / filter-off 繧ッ繝ゥ繧ケ縺ィ邨オ譁・・ス・ス・芋汨・/ 刪・スE・ス縺ァ陦ィ迴セ縲・
  • 繝ュ繧ク繝・・ス・ス・スE・スE
    • 蜷・・スE繧ソ繝ウ縺ッ filters.setTypeEnabled(kind, enabled) 繧貞他縺カ縲・
    • filters.get() 縺ョ邨先棡縺九i UI 迥カ諷九r蜷梧悄縺吶k縲・

蜀・・ス・ス縺ァ縺ッ・スE・スE

  • hub.core.filters.setTypeEnabled(kind, enabled)
    竊・visibilityController.setTypeFilter 縺・uiState.filters.types.* 縺ィ visibleSet 繧呈峩譁ー縺吶k縲・
  • hub.core.filters.get()
    竊・迴セ蝨ィ縺ョ FiltersState 繧定ソ斐☆縲・

3.4.3 Mode / Focus 謫堺ス懶シ・acro / micro + meso optional・スE・スE

  • mode 繝斐Ν・スE・スEUD・スE・スE

    • 陦ィ遉コ縺ョ縺ソ繧貞渕譛ャ縺ィ縺吶k・スE・ス繧ッ繝ェ繝・・ス・ス蛻・・ス・ス縺ッ蠢・・ス・ス縺ァ縺ッ縺ェ縺・・ス・ス縲・
    • host / dev harness 縺ッ hub.core.mode.getSupported() 繧貞盾辣ァ縺励€・ meso === false 縺ョ蝣エ蜷茨ソスE MESO 陦ィ遉コ繧抵ソスE縺輔↑縺・・ス・ス縺セ縺滂ソスE disabled 陦ィ遉コ・スE・ス縲・
  • focus 繝医げ繝ォ繝懊ち繝ウ・スE・スE#mode-focus-toggle`・スE・スE

    • 繧ッ繝ェ繝・・ス・ス譎ゑシ・
      • 迴セ蝨ィ selection 繧貞叙蠕暦シ・hub.core.selection.get()`・スE・ス縲・
      • sel.uuid 縺後≠繧鯉ソスE hub.core.mode.set("micro", sel.uuid) 繧貞他縺カ縲・
      • set() 縺・false 繧定ソ斐@縺溷エ蜷茨ソスE菴輔b縺励↑縺・・ス・ス蠢・・ス・ス縺ェ繧・HUD 繝茨ソスE繧ケ繝医〒騾夂衍・スE・ス縲・
  • MESO pill / 繝懊ち繝ウ・スE・スEptional・スE・スE

    • hub.core.mode.getSupported().meso === true 縺ョ縺ィ縺搾ソスE縺ソ UI 繧抵ソスE縺励※繧医>縲・
    • 繧ッ繝ェ繝・・ス・ス譎ゑシ・
      • selection 縺後≠繧鯉ソスE hub.core.mode.set("meso", sel.uuid) 繧貞他縺カ縲・
      • 縺溘□縺・v1 螳溯」・・ス・ス縺ッ meso 縺ッ *macro 逶ク蠖難シ・icroFX 辟。縺暦シ・ 縺ィ縺励※謇ア縺」縺ヲ繧医¥縲・ 隕九◆逶ョ縺ョ蟾ョ蛻・・ス・ス辟。縺上※繧ゆサ墓ァ倬&蜿阪〒縺ッ縺ェ縺・・ス・スE
    • meso === false 縺ョ迺ー蠅・・ス・ス縺ッ set("meso", ...) 縺ッ false 繧定ソ斐@縲∫憾諷具ソスE螟峨∴縺ェ縺・・ス・スE

mode 縺ィ microFX 縺ョ隧ウ邏ー繝ォ繝シ繝ォ縺ッ 6.8 遽€繝サruntime_spec 繧呈ュ」縺ィ縺励€・ 譛ャ遽€縺ッ縲袈I 縺九i蜻シ縺カ API 繝代ち繝シ繝ウ縲阪→縲稽eso optional縲搾ソスE譚。莉カ縺縺代r螳夂セゥ縺吶k縲・

3.5 蜈・蜉帶桃菴懶シ・ointerInput / KeyboardInput・スE・スE

蜈・蜉帶桃菴懶ソスE runtime 螻、縺ァ縺ッ縺ェ縺・**UI 繝ャ繧、繝、・スE・スEiewer/ui/・スE・スE 縺ォ髮・・ス・スE・ス・ス繧九€・

  • PointerInput / KeyboardInput 縺ッ Host / dev harness 蛛エ縺ァ new 縺励€…anvas / window 縺ォ繧、繝吶Φ繝医r謗・邯壹☆繧九€・
  • runtime 螻、・スE・スEuntime/*・スE・ス縺九aEPointerInput / KeyboardInput 繧・import / new 縺吶k縺薙→縺ッ遖∵ュ「縺吶k縲・
  • 蜈・蜉帙う繝吶Φ繝茨ソスE蠢・・ス・ス hub.core.* / hub.pickObjectAt 縺ォ繝槭ャ繝斐Φ繧ー縺励€,ameraEngine 繧・three.js 繧堤峩謗・隗ヲ繧峨↑縺・・ス・スE

3.5.1 PointerInput・スE・ス・スE繧ヲ繧ケ / 繧ソ繝・・ス・ス・スE・スE

PointerInput 縺ョ雋ャ蜍呻シ・

  • 繧ュ繝」繝ウ繝舌せ荳奇ソスE繝昴う繝ウ繧ソ謫堺ス懊r荳€謇九↓髮・・ス・スE・ス・ス繧九€・
  • camera / selection / mode 縺ク縺ョ螟画峩縺ッ hub.core. 邨檎罰* 縺ァ陦後≧縲・
  • renderer 繧・three.js 繧堤峩謗・隗ヲ繧峨↑縺・・ス・スE 驟咲スョ・スE・スE
  • viewer/ui/pointerInput.js 縺ォ鄂ョ縺擾シ・I 繝ャ繧、繝、・スE・ス縲・
  • runtime 縺九i蜿ゑソスE縺励↑縺・・ス・ス謗・邯夲ソスE host・スE・スEiewerDevHarness 遲会シ峨′陦後≧縲・

v1 縺ョ讓呎コ厄ソスE繝・・ス・ス繝ウ繧ー・スE・ス・スE繧ヲ繧ケ・スE・ス・・

  • 蟾ヲ繝峨Λ繝・・ス・ス・スE・スorbit・スE・ス繧ォ繝。繝ゥ蝗櫁サ「・スE・スE
  • 蜿ウ繝峨Λ繝・・ス・ス or 荳ュ繝峨Λ繝・・ス・ス・スE・スpan・スE・ス繧ォ繝。繝ゥ蟷ウ陦檎ァサ蜍包シ・
  • 繝帙う繝シ繝ォ・スE・スzoom・スE・ス蜑榊セ鯉シ・
  • 繧ッ繝ェ繝・・ス・ス・スE・スE
    • click / pointerup 譎ゅ↓ canvas 蠎ァ讓・竊・NDC 螟画鋤縺励€・
    • hub.pickObjectAt(ndcX, ndcY) 繧貞他縺ウ縲・
    • 繝偵ャ繝医@縺・uuid 縺後≠繧鯉ソスE hub.core.selection.select(uuid) 繧貞他縺カ縲・
    • 縺晢ソスE邨先棡縲[ode / microFX 縺ッ core 蛛エ縺ァ蜀崎ィ育ョ励&繧後k縲・

豕ィ諢擾シ・

  • Frame 縺ョ蠅玲ク帙r繝槭え繧ケ繝帙う繝シ繝ォ縺ォ蜑イ繧雁ス薙※繧九%縺ィ縺ッ遖∵ュ「・スE・スE.4.1 蜿ゑソスE・スE・ス縲・
  • 繝「繝シ繝会ソスE遘サ譚。莉カ・スE・スEanEnter / exit 縺ェ縺ゥ・スE・ス・スE core/modeController 縺ョ雋ャ蜍吶→縺励€・ PointerInput 縺ッ縲慶lick 竊・select縲阪∪縺ァ縺ァ豁「繧√k縲・

3.5.2 KeyboardInput・スE・ス繧ュ繝シ繝懶ソスE繝会シ・

KeyboardInput 縺ョ雋ャ蜍呻シ・

  • window 縺ョ keydown 繧・1 邂・・ス・ス縺ォ髮・・ス・スE・ス・ス繧九€・
  • core.camera / core.frame / core.mode / core.selection 縺ョ縺ソ 繧貞娼縺上€・
  • UI 隕∫エ・スE・スEOM・スE・ス繧・CameraEngine 縺ォ縺ッ逶エ謗・隗ヲ繧後↑縺・・ス・スE 驟咲スョ・スE・スE
  • viewer/ui/keyboardInput.js 縺ォ鄂ョ縺擾シ・I 繝ャ繧、繝、・スE・ス縲・
  • runtime 縺九i蜿ゑソスE縺励↑縺・・ス・ス謗・邯夲ソスE host・スE・スEiewerDevHarness 遲会シ峨′陦後≧縲・

繧ュ繝シ蜈・蜉幢ソスE谺。縺ョ繝ォ繝シ繝ォ縺ォ蠕薙≧・スE・スE

  1. 蜈・蜉帶ャ・・ス・ス螟・

    • ev.target.tagName 縺・INPUT / TEXTAREA 縺ョ蝣エ蜷茨ソスE辟。隕悶€・
  2. Home・スE・ス繧ォ繝。繝ゥ HOME・スE・スE

    • ev.code === "Home" 縺九▽ core.camera.reset 縺悟ュ伜惠縺吶k蝣エ蜷茨シ・
      • ev.preventDefault()
      • core.camera.reset() 繧貞他縺カ縲・
  3. Frame 謫堺ス懶シ・ageUp / PageDown・スE・スE

    • core.frame 縺悟ュ伜惠縺吶k蝣エ蜷茨シ・
      • PageUp 窶ヲ next
      • PageDown 窶ヲ prev
    • frame 遽・・ス・ス螟悶∈縺ッ FrameController 蛛エ縺ァ繧ッ繝ゥ繝ウ繝励☆繧具シ・untime_spec 蜿ゑソスE・スE・ス縲・
  4. Mode 蛻・・ス・ス・スE・スEsc・スE・スE

    • Escape・スE・スE
      • mode.set("macro")
  5. 繧ォ繝。繝ゥ Zoom・スE・スE / -・スE・スE

    • + / NumpadAdd・スE・スE
      • camera.zoom(-ホ・・スE・ス蜑埼€イ・スE・スE
    • - / NumpadSubtract・スE・スE
      • camera.zoom(+ホ・・スE・ス蠕碁€€・スE・スE
    • ホ費シ・OOM_STEP・スE・ス・スE螳溯」・・スE縺ョ螳壽焚・スE・ス萓具シ・.1・スE・ス縺ィ縺吶k縲・
  6. 繧ォ繝。繝ゥ Orbit・スE・ス遏「蜊ー繧ュ繝シ・スE・スE

    • ArrowLeft 窶ヲ camera.rotate(-step, 0)
    • ArrowRight 窶ヲ camera.rotate(+step, 0)
    • ArrowUp 窶ヲ camera.rotate(0, -step)・スE・ス荳翫↓繝√Ν繝茨シ・
    • ArrowDown 窶ヲ camera.rotate(0, +step)・スE・ス荳九↓繝√Ν繝茨シ・
    • Shift 謚シ縺励〒 step 繧貞「励d縺励€∵掠蝗槭@縺ィ縺吶k・スE・ス萓具シ・ツー 竊・4ツー・スE・ス縲・

dev viewer 縺ァ縺ッ縲√%繧後↓蜉縺医※繝擾ソスE繝阪せ蛛エ縺ァ谺。繧定ソス蜉縺励※繧医>・スE・スE

  • Space・スE・スE
    • 蜀咲函繝懊ち繝ウ・スE・スE#btn-play`・スE・ス・スE click 繧剃サ」逅・・ス・ス轣ォ縺励€’rame 蜀咲函繧偵ヨ繧ー繝ォ縺吶k縲・
    • 縺薙l縺ッ viewer_dev 蟆ら畑繧キ繝ァ繝シ繝医き繝・・ス・ス 縺ィ縺励€〉untime 譛ャ菴謎サ墓ァ倥↓縺ッ蜷ォ繧√↑縺・・ス・スE

3.6 dev viewer 蝗コ譛会ソスE諡。蠑オ

viewer_dev・スE・ス髢狗匱逕ィ harness・スE・ス・スE縲∵悽逡ェ viewer 縺ォ蜷ォ繧√↑縺・・ス・ス蜉ゥ讖滂ソスE繧呈戟縺、・スE・スE

  • window.hub 窶ヲ viewerHub 縺ク縺ョ繝・・ス・ス繝・・ス・ス逕ィ蜿ゑソスE
  • window.viewerLog(line) 窶ヲ Model 繝代ロ繝ォ縺ク縺ョ繝ュ繧ー霑ス險・
  • window.viewerToast(text, options) 窶ヲ HUD 繝茨ソスE繧ケ繝郁。ィ遉コ
  • 襍キ蜍墓凾 devBootLog
    • BOOT / MODEL / CAMERA / LAYERS / FRAME 縺ョ 5 陦後r Model 繝代ロ繝ォ縺ク陦ィ遉コ
  • gizmo HOME / axis 繝懊ち繝ウ
    • 繧ォ繝。繝ゥ謫堺ス懊さ繝槭Φ繝会ソスE繧キ繝ァ繝シ繝医き繝・・ス・ス・スE・スEeset / snapToAxis・スE・スE

縺薙l繧会ソスE *縲碁幕逋コ謾ッ謠エ讖滂ソスE縲・ 縺ィ縺励※謇ア縺・・ス・スE 譛ャ逡ェ viewer 莉墓ァ假シ域ゥ滂ソスE隕∽サカ・スE・ス縺ォ縺ッ蜷ォ繧√↑縺・・ス・スE 縺溘□縺励€∝ー・・ス・ス host 繧「繝励Μ縺ァ蜀榊茜逕ィ縺励◆縺・・ス・ス蜷医↓蛯吶∴縲・ 蜷榊燕繝サ雋ャ蜍呻ソスE譛ャ遶縺ョ螳夂セゥ縺九i螟ァ縺阪¥螟悶l縺ェ縺・・ス・ス縺・・ス・ス縺吶k縲・


4 荳画ャ。蜈・・ス・ス逕サ縺ィ繧ォ繝。繝ゥ・スE・スEiewer・スE・スE

viewer 縺ョ謠冗判繧キ繧ケ繝・・ス・ス縺ッ modeler 縺ィ蜷後§ three.js 繧堤畑縺・・ス・ス縺後€・ 髢イ隕ァ蟆ら畑繧「繝励Μ縺ィ縺励※ 騾擾ソスE諤ァ繝サ蠢螳滓€ァ繝サ髱樒キィ髮・・ス・ス 繧呈怙蜆ェ蜈医☆繧九€・

譛ャ遶縺ァ縺ッ縲〉enderer 螻、縺ィ CameraEngine 繧剃クュ蠢・・ス・ス縲・ 荳画ャ。蜈・・ス・ス逕サ繝サvisibleSet繝サmicroFX繝サ繧ォ繝。繝ゥ謖吝虚縺ョ隕冗ッ・・ス・ス螳夂セゥ縺吶k縲・

窶サ 蜈・蜉帙Ξ繧、繝、・スE・スEointerInput / KeyboardInput・スE・ス・スE 3 遶縲√♀繧茨ソスE runtime_spec 繧呈ュ」縺ィ縺吶k縲・ 譛ャ遶縺ァ縺ッ縲鯉ソスE蜉帶ク医∩縺ョ迥カ諷九′ renderer 縺ォ縺ゥ縺・・ス・ス譏縺輔l繧九°縲阪r謇ア縺・・ス・スE

4.1 謠冗判繝ャ繧、繝、讒矩€

viewer 縺ョ謠冗判繝ャ繧、繝、讒矩€縺ッ谺。縺ョ騾壹j縺ィ縺吶k・スE・スE

  • Core 螻、・スE・スEuntime/core・スE・スE
    • uiState / CameraEngine / frameController
    • selectionController / modeController
    • visibilityController / microController
    • 3DSS 讒矩€・スE・スEmmutable・スE・ス縺ィ蜷・・ス・ス index 繧剃ソ晄戟
  • Renderer 螻、・スE・スEuntime/renderer・スE・スE
    • createRendererContext(canvas) 縺・three.js 縺セ繧上j繧剃ク€謇九↓諡・・ス・スE
    • three.js 縺ョ Scene / Camera / Renderer / light / Object3D 鄒、繧抵ソスE驛ィ縺ォ菫晄戟
    • microFX・スE・スExes / bounds / glow / marker / highlight・スE・ス繧貞性繧€
  • Hub 螻、・スE・スEuntime/viewerHub・スE・スE
    • core 縺ィ renderer 繧偵∪縺ィ繧√€・ 豈弱ヵ繝ャ繝シ繝 uiState 縺ョ繧ケ繝翫ャ繝励す繝ァ繝・・ス・ス繧・renderer 縺ォ豬√☆
    • hub.start() / hub.stop() 縺ォ繧医k render loop 繧貞腰荳€邂・・ス・ス縺ァ邂。逅・

4.1.1 謇€譛画ィゥ縺ィ遖∵ュ「莠矩・

  • 3DSS document・スE・ス讒矩€繝・・スE繧ソ・スE・スE
    • Core 螻、縺・deep-freeze 貂医∩縺ョ繧ェ繝悶ず繧ァ繧ッ繝医→縺励※菫晄戟
    • Renderer 螻、縺ッ 蜿ゑソスE縺ョ縺ソ 險ア蜿ッ縲∵嶌縺肴鋤縺育ヲ∵ュ「
  • uiState / visibleSet / microState / cameraState
    • Core 螻、縺悟髪荳€縺ョ豁」隕乗園譛芽€・
    • Renderer 螻、縺ッ hub 邨檎罰縺ァ 隱ュ縺ソ蜿悶j蟆ら畑 縺ィ縺励※蜿励¢蜿悶j縲∝渚譏縺ョ縺ソ陦後≧
  • three.js Object3D 鄒、
    • Renderer 螻、縺梧園譛・
    • Core / UI / hub 縺ッ Object3D 繧堤峩謗・隗ヲ繧峨↑縺・・ス・スEUID 遲峨〒蜿ゑソスE縺吶k縺ョ縺ソ・スE・スE

4.1.2 frame 竊・visibleSet 竊・renderer 縺ョ豬√l・スE・ス豁」隕上Ν繝シ繝茨シ・

  1. Core 縺ョ frameController 縺・uiState.frame.current 繧呈峩譁ー縺吶k縲・

  2. Core 縺ッ 蠢・・ス・ス core.recomputeVisibleSet() 繧貞他縺カ縲・

    • 縺薙l縺・visibleSet 蜀崎ィ育ョ暦ソスE 蜚ッ荳€縺ョ蜈・蜿」 縺ィ縺吶k縲・
    • 蜀・・ス・ス縺ァ frames / appearance.visible / filters・スE・スEoints/lines/aux・スE・ス繧貞粋・スE縺励€・ uiState.visibleSet: Set<uuid> 繧呈峩譁ー縺吶k縲・
  3. hub 縺ョ 1 繝輔Ξ繝シ繝 tick 縺ァ縲・

    • renderer.applyFrame(uiState.visibleSet)・スE・ス縺セ縺滂ソスE蜷檎ュ陰PI・スE・ス縺悟他縺ー繧後€・
    • 蜷・Object3D 縺ョ obj.visible 縺・UUID 繝呻ソスE繧ケ縺ァ譖エ譁ー縺輔l繧九€・

Renderer 縺ッ visibleSet 莉・螟厄ソスE譚。莉カ縺ァ base object 縺ョ陦ィ遉コ・スE・ス髱櫁。ィ遉コ繧貞享謇九↓豎コ繧√※縺ッ縺ェ繧峨↑縺・・ス・スE ・スE・スEverlay / microFX 逕ィ縺ョ霑ス蜉 Object3D 縺ッ縺難ソスE蛻カ邏・・スE蟇セ雎。螟厄シ・

4.2 謠冗判蟇セ雎。隕∫エ・スE・スEoints / lines / aux・スE・スE

4.2.1 Points

points 縺ッ縲檎ゥコ髢謎ク奇ソスE莉」陦ィ轤ケ縲阪→縺励※謠冗判縺吶k縲・

  • 蜿ゑソスE蜈・・ス・スE
    • points[*].position
    • points[*].appearance・スE・スEolor / opacity / marker 縺ェ縺ゥ・スE・スE
  • 譛€菴手ヲ∽サカ・スE・スE
    • 蜷・point 縺ォ縺、縺・1 縺、縺ョ Object3D・スE・ス騾壼クク縺ッ蟆上&縺ェ逅・or billboard・スE・ス繧堤函・スE縺吶k縲・
    • color / opacity 縺ッ appearance.* 縺ョ蛟、繧偵◎縺ョ縺セ縺セ蜿肴丐縺吶k縲・
  • 霑ス蜉陦ィ迴セ・スE・スEptional・スE・ス・・
    • microFX 縺ォ繧医k glow / marker 縺ョ荳贋ケ励○
    • selection 縺ォ繧医k繝上う繝ゥ繧、繝茨シ郁牡・スE・ス螟ェ縺包シ冗匱蜈会シ・

points 縺ォ髢「縺励※ viewer 縺ッ **菴咲スョ縺ョ陬憺俣繧・・ス・ス繧√r陦後o縺ェ縺・*縲・ position 繝吶け繝医Ν縺ッ 3DSS JSON 縺ョ蛟、繧偵◎縺ョ縺セ縺セ world 蠎ァ讓吶→縺励※逕ィ縺・・ス・ス縲・

4.2.2 Lines

lines 縺ッ縲継oints 蜷悟」ォ縺ョ謗・邯夲シ茨ソスE繧ッ繝医Ν・スE・ス縲阪→縺励※謠冗判縺吶k縲・

  • 蜿ゑソスE蜈・・ス・スE
    • lines[*].end_a.ref / end_b.ref 縺九i point UUID 繧定ァ」豎コ
    • lines[*].appearance.shape / arrow / effect / color / opacity 縺ェ縺ゥ
  • 譛€菴手ヲ∽サカ・スE・スE
    • ref 縺ッ strict validation 縺ォ繧医j謨エ蜷医′菫晁ィシ縺輔l繧九€・
    • Renderer 縺ッ end_a.ref / end_b.ref 繧貞ソ・・ス・ス隗」豎コ縺ァ縺阪k蜑肴署縺ァ謠冗判縺吶k縲・
    • 繧ゅ@隗」豎コ縺ァ縺阪↑縺・・ス・ス蜷医€√◎繧鯉ソスE縲瑚ェュ霎シ諡貞凄縺輔l繧九∋縺搾ソスE蜉帙€阪∪縺滂ソスE縲悟ョ溯」・・ス・ス繧ー縲阪→縺励※謇ア縺・・ス・スE
    • 縲瑚ァ」豎コ縺ァ縺阪◆蛻・・ス・ス縺第緒逕サ縺吶k・スE・スEartial rendering・スE・ス縲搾ソスE陦後o縺ェ縺・・ス・スE
  • 邂ュ鬆ュ・スE・スErrow・スE・ス・・
    • arrow.shape / arrow.placement 縺ョ蛟、繧偵◎縺ョ縺セ縺セ蜿肴丐縺吶k縲・
    • 莉墓ァ倥→縺励※縺ッ 3DSS 縺ョ螳夂セゥ繧呈ュ」縺ィ縺励€」iewer 蛛エ縺ァ蜍晄焔縺ォ陬懈ュ」繝サ諡。蠑オ縺励↑縺・・ス・スE
  • effect:
    • effect: none | flow | glow | pulse 縺ッ *謠冗判髯仙ョ夲ソスE隕冶ヲ壼柑譫・ 縺ィ縺励※謇ア縺・・ス・スE
    • none 縺ッ霑ス蜉縺ョ隕冶ヲ壼柑譫懊↑縺励r諢丞袖縺吶k縲・

lineWidth 縺ォ縺、縺・・ス・ス・スE・スE

  • WebGL 螳溯」・・ス・ス繧医j 1px 莉・荳九d蝗コ螳壼ケ・・ス・ス縺ェ繧狗腸蠅・・ス・ス蟄伜惠縺吶k縲・
  • viewer 縺ッ蜀・・ス・ス縺ォ line_width_mode: auto | fixed | adaptive 縺ョ讎ょソオ繧呈戟縺」縺ヲ繧医>縺後€・
    • v1 螳溯」・・ス・ス縺ッ *auto 蝗コ螳・ 縺ィ縺励€・
    • 莉悶Δ繝シ繝会ソスE縲悟ー・・ス・ス諡。蠑オ蛟呵」懊€阪→縺励※譛ャ莉墓ァ倥↓谿九☆縺ォ逡吶a繧九€・

4.2.3 Aux

aux 縺ッ points / lines 莉・螟厄ソスE陬懷勧逧・・ス・ス逕サ隕∫エ縺ァ縺ゅk縲・

莉」陦ィ逧・・ス・ス module 縺ィ v1 縺ォ縺翫¢繧区桶縺・・ス・ス・・

module 蜷・繧ケ繧ュ繝シ繝・Viewer v1 縺ョ謇ア縺・蛯呵€・
grid縺ゅj謠冗判蠢・・ス・ス・井ソ晁ィシ・スE・スEground 繧ー繝ェ繝・・ス・ス縲ょ渕譛ャ繝代Λ繝。繝シ繧ソ縺ョ縺ソ蟇セ蠢懊〒蜿ッ縲・
axis縺ゅj謠冗判莉サ諢擾ソスE辟。隕門庄讒矩€螻、縺ョ霆ク縲・UD 縺ョ gizmo axis 縺ィ縺ッ蛻・迚ゥ縲・
plate縺ゅj謠冗判莉サ諢擾ソスE辟。隕門庄蠎奇ソスE繝ャ繝シ繝茨シ剰レ譎ッ譚ソ縲W1 縺ァ縺ッ髱槫ソ・・ス・ス縲・
shell縺ゅj謠冗判莉サ諢擾ソスE辟。隕門庄螟也坩陦ィ迴セ縲W1 縺ァ縺ッ髱槫ソ・・ス・ス縲・
hud縺ゅj謠冗判莉サ諢擾ソスE辟。隕門庄讒矩€蛛エ HUD縲7iewer UI 縺ァ莉」譖ソ縺吶k諠ウ螳壹€・

v1 縺ァ縺ッ grid 莉・螟厄ソスE aux module 縺ッ縲悟ュ伜惠縺励※繧ら┌隕門庄縲阪→縺励€・ 蟆・・ス・ス蟇セ蠢懈凾縺ォ縺ョ縺ソ譛ャ陦ィ繧呈峩譁ー縺吶k縲・

4.3 frame・スE・ス譎る俣螻、・スE・ス縺ィ陦ィ遉コ蛻カ蠕。

4.3.1 陦ィ遉コ繝ォ繝シ繝ォ

uiState.frame.current = n 縺ョ縺ィ縺阪€∬。ィ遉コ繝ォ繝シ繝ォ縺ッ谺。縺ョ騾壹j・スE・スE

  • uiState.frame.current == n
    竊・frames 縺ォ n 繧貞性繧€隕∫エ縺ョ縺ソ陦ィ遉コ
  • uiState.frame.current 縺・null
    竊・frames 繧堤┌隕悶@縺ヲ蜈ィ隕∫エ繧定。ィ遉コ・スE・スErame 繝輔ぅ繝ォ繧ソ OFF・スE・スE
  • frames 縺梧悴螳夂セゥ縺セ縺滂ソスE遨コ
    竊・蟶ク譎り。ィ遉コ・スE・スEiState.frame.current 縺ォ萓晏ュ倥@縺ェ縺・・ス・スE
  • frame 蛻・・ス・ス縺ッ UI 迥カ諷具シ・iState.frame・スE・ス・スE譖エ譁ー縺ョ縺ソ縺ァ陦後>縲・ 讒矩€繝・・スE繧ソ・スE・スEDSS JSON・スE・ス・スE螟画峩縺励↑縺・・ス・スE

4.3.2 Core / Renderer 縺ョ雋ャ蜍呻ソスE髮「

  • Core・スE・スE
    • frameController.set / step / range 縺ォ繧医j uiState.frame 繧呈峩譁ー縺吶k縲・
    • visibilityController.recompute() 縺ァ uiState.visibleSet 繧抵ソスE險育ョ励☆繧九€・
  • Renderer・スE・スE
    • renderer.applyFrame(uiState.visibleSet) 縺ァ obj.visible 繧呈峩譁ー縺吶k縲・
    • frame ID 繧・frames 驟搾ソスE繧堤峩謗・隱ュ繧€縺薙→縺ッ遖∵ュ「縲・

frames 縺ョ謗ィ貂ャ繝サ陬懷ョ鯉ソスE陬懈ュ」縺ッ陦後o縺ェ縺・・ス・スE 3DSS 縺ォ蜈・縺」縺ヲ縺・・ス・ス frames 諠・・ス・ス縺ョ縺ソ繧呈ュ」縺ィ縺吶k縲・

4.4 microFX 繝ャ繧、繝、縺ィ selection / mode

microFX 縺ッ縲瑚ヲ冶ヲ夊」懷勧繝ャ繧、繝、縲阪〒縺ゅj縲∵ァ矩€繝・・スE繧ソ縺ォ縺ッ荳€蛻・・ス・ス髻ソ縺励↑縺・・ス・スE renderer 蜀・・スE microFX/* 繝「繧ク繝・繝シ繝ォ縺ィ縺励※螳溯」・・ス・ス繧後k縲・

4.4.1 蜈・蜃コ蜉帙→ invariants

  • 蜈・蜉幢シ・
    • uiState.microState・スE・スEicroFXPayload・スE・スE
    • uiState.selection
    • scene metrics・スE・ス荳ュ蠢・・スE蜊雁セ・・ス・ス縺ゥ・スE・スE
  • 蜃コ蜉幢シ・
    • 譌「蟄・Object3D 縺ョ color / opacity / scale 縺ェ縺ゥ縺ョ荳頑嶌縺・
    • 霑ス蜉縺ョ overlay Object3D・スE・スExes / bounds / marker / glow / highlight・スE・ス鄒、
  • 荳榊、画擅莉カ・スE・スE
    • 3DSS document 縺ッ豎コ縺励※螟画峩縺励↑縺・・ス・スE
    • baseStyle・スE・ス・スE縺ョ濶イ繝サ荳埼€擾ソスE蠎ヲ・スE・ス・スE蠢・・ス・ス菫晄戟縺励€[icroFX OFF 縺ァ螳鯉ソスE蠕ゥ蜈・・ス・ス縺阪k縲・
    • 蠎ァ讓咏ウサ縺ッ 3DSS 縺ィ蜷後§縲蛍nitless 縺ェ world 蠎ァ讓咏ウサ縲阪→縺励€}x 縺ェ縺ゥ縺ョ逕サ邏蜊倅ス阪r謖√■霎シ縺セ縺ェ縺・・ス・スE

4.4.2 microFX 繝「繧ク繝・繝シ繝ォ縺ョ蠖ケ蜑イ

莉」陦ィ逧・・ス・ス繝「繧ク繝・繝シ繝ォ縺ョ雋ャ蜍呻シ・

  • axes・スE・スE
    • focus 隕∫エ縺セ繧上j縺ョ繝ュ繝シ繧ォ繝ォ霆ク繧堤ー。譏楢。ィ遉コ縺吶k縲・
    • scene 蜊雁セ・・ス・ス繧ォ繝。繝ゥ霍晞屬縺九i繧ケ繧ア繝シ繝ォ繧呈アコ繧√€∝クク縺ォ隱ュ縺ソ繧・・ス・ス縺・・ス・ス縺阪&縺ォ菫昴▽縲・
  • bounds・スE・スE
    • focus 繧ッ繝ゥ繧ケ繧ソ縺ョ AABB・スE・ス霆ク蟷ウ陦悟「・・ス・ス繝懊ャ繧ッ繧ケ・スE・ス繧呈緒縺上€・
    • shrinkFactor 縺ォ繧医j蟆代@蜀・・スE縺ォ邵ョ繧√※謠上¥縺薙→縺ァ隕冶ェ肴€ァ繧剃ク翫£繧九€・
  • marker・スE・スE
    • focus 菴咲スョ縺ォ蟆上&縺ェ繝橸ソスE繧ォ繝シ繧抵ソスE鄂ョ縺吶k・スE・ス轤ケ or 遏「蜊ー・スE・ス縲・
  • glow・スE・スE
    • focus 隕∫エ縺ォ蟇セ縺励※ halo 逧・・ス・ス glow 繧定ソス蜉縺吶k縲・
  • highlight・スE・スE
    • microState.relatedUuids 縺ォ蜷ォ縺セ繧後k隕∫エ鄒、繧偵€後↑縺槭k縲阪が繝シ繝撰ソスE繝ャ繧、繧呈緒逕サ縺励€・
    • 讒矩€逧・・ス・ス菫ゑシ郁ソ大m・スE・ス邨瑚キッ縺ェ縺ゥ・スE・ス繧貞シキ隱ソ縺吶k縲・

microState 縺ョ隧ウ邏ー縺ェ蠖「縺ッ 7.11 遽€縺翫h縺ウ runtime_spec 縺ョ MicroFXPayload 繧呈ュ」縺ィ縺吶k縲・ 譛ャ遶縺ァ縺ッ縲罫enderer 縺御ス輔r縺励※繧医>縺具シ上@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・ス縲阪□縺代r螳夂セゥ縺吶k縲・

4.4.3 譁懊a邱壹す繝」繝峨え・スE・ス蟆・・ス・ス諡。蠑オ・スE・スE

譁懊a邱夲シ・on-axis-aligned line・スE・ス縺ォ蟇セ縺吶k繧キ繝」繝峨え陦ィ迴セ・スE・スEhadow Convention・スE・ス・スE縲・ microFX 縺ョ蟆・・ス・ス諡。蠑オ譯医→縺励※莉墓ァ倅ク翫↓菫晄戟縺吶k・スE・スE

  • 蟇セ雎。・スE・スE
    • 繝吶け繝医Ν v = (dx, dy, dz) 縺ォ縺翫>縺ヲ隍・・ス・ス霆ク縺ォ髱槭ぞ繝ュ謌撰ソスE繧呈戟縺、邱夲ソスE縲・
  • 譁ケ驥晢シ・
    • 蜷・・ス・ス謌撰ソスE縺斐→縺ォ縲悟スア邱壹€阪r關ス縺ィ縺励€∵婿蜷第─縺ィ螂・陦後″繧定」懷勧縺吶k縲・
  • 螳溯」・・ス・ス辟。・スE・スE
    • v1 縺ョ蠢・・ス・ス隕∽サカ縺ァ縺ッ縺ェ縺・・ス・スE
    • 螳溯」・・ス・ス繧句エ蜷茨ソスE 3DSS 繧剃ク€蛻・・ス・ス譖エ縺帙★縲[icroFX 縺縺代〒螳檎オ舌&縺帙k縲・

隧ウ邏ー縺ェ豼・・ス・ス繧・・ス・ス蜷題ヲ冗ッ・・スE譌ァ 4.7 遽€縺ョ譯医r蜿り€・・ス・ス縺励※繧医>縺後€・ 譛ャ莉墓ァ倥〒縺ッ縲御ササ諢丞ョ溯」・・ス・ス縺ィ縺励※謇ア縺・・ス・スE

4.5 繧ォ繝。繝ゥ莉墓ァ假シ磯夢隕ァ逕ィ CameraEngine・スE・スE

繧ォ繝。繝ゥ縺ッ CameraEngine 縺ォ繧医▲縺ヲ荳€蜈・・ス・ス逅・・ス・ス繧後k縲・ cameraState 縺ッ Core 螻、縺梧戟縺。縲〉enderer 縺ッ豈弱ヵ繝ャ繝シ繝縺昴l繧貞女縺大叙縺」縺ヲ蜿肴丐縺吶k縲・

4.5.1 遨コ髢灘コァ讓咏ウサ縺ィ繧ォ繝。繝ゥ迥カ諷・

遨コ髢灘コァ讓咏ウサ・スE・スE

  • 蜿ウ謇狗ウサ繧貞燕謠舌→縺励€・
  • Z+ 繧堤オカ蟇セ荳頑婿蜷代→縺吶k・スE・スErid / axis 繧ゅ%繧後↓蠕薙≧・スE・ス縲・

cameraState 縺ョ蜈ャ髢句ス「・スE・スEub.core.camera.getState / 襍キ蜍輔Ο繧ー・スE・ス・スE谺。繧呈ュ」縺ィ縺吶k・スE・スE

cameraState = {
  position: [number, number, number],  // world
  target:   [number, number, number],  // world
  fov:      number,                    // deg
  // optional: 謫堺ス懃ウサ縺ョ蜀・・ス・ス陦ィ迴セ・スE・ス螳溯」・・ス・ス蠢・・ス・ス縺ェ繧我スオ險倥@縺ヲ繧医>・スE・スE
  theta?:    number,
  phi?:      number,
  distance?: number,
}
  • 襍キ蜍輔Ο繧ー CAMERA {…} 縺ッ蟆代↑縺上→繧・position/target/fov 繧貞性繧€ JSON 繧抵ソスE蜉帙☆繧九€・
  • Renderer 縺ッ position/target/fov 繧貞女縺大叙繧翫€√◎縺ョ縺セ縺セ camera 縺ォ蜿肴丐縺吶k縲・
  • theta/phi/distance 縺ッ CameraEngine 縺ョ蜀・・ス・ス驛ス蜷医〒菫晄戟縺励※繧医>縺後€・ソスE髢句ス「縺ィ遏帷崟縺輔○縺ェ縺・

4.5.2 蛻晄悄繧ォ繝。繝ゥ

bootstrapViewer 縺ァ縺ッ縲〉enderer 縺ョ scene metrics 縺九i蛻晄悄繧ォ繝。繝ゥ繧呈アコ繧√k・スE・スE

  1. renderer.syncDocument() 蠕後↓ scene 縺ョ bounding sphere・スE・スEenter, radius・スE・ス繧貞叙蠕励☆繧九€・
  2. target = center 縺ィ縺吶k縲・
  3. distance 竕・radius テ・2.4 遞句コヲ髮「縺励€∵ァ矩€蜈ィ菴薙′逕サ髱「縺ォ蜿弱∪繧玖キ晞屬繧堤「コ菫昴☆繧九€・
  4. theta / phi 縺ッ繧上★縺九↓菫ッ迸ー・スE・ス繧・aE・ス・ス繧∽ク奇シ峨→縺ェ繧九h縺・・ス・ス險ュ螳壹☆繧九€・

縺難ソスE蛻晄悄迥カ諷具ソスE uiState.cameraState 縺ォ縺ョ縺ソ菫晄戟縺励€・ 3DSS document 縺ク譖ク縺肴綾縺励※縺ッ縺ェ繧峨↑縺・・ス・スE

4.5.3 CameraEngine API

CameraEngine 縺ッ蟆代↑縺上→繧よャ。繧呈署萓帙☆繧具シ郁ゥウ邏ー縺ッ runtime_spec・スE・ス・・

  • rotate(dTheta, dPhi)
    • theta += dTheta, phi += dPhi 縺ィ縺励※ orbit 繧定。後≧縲・
    • phi 縺ッ讌オ轤ケ莉倩ソ代〒繧ッ繝ゥ繝ウ繝励@縲√き繝。繝ゥ縺ョ陬剰ソ斐j・スE・スEimbal lock・スE・ス繧帝∩縺代k縲・
  • pan(dx, dy)
    • 逕サ髱「蠎ァ讓咏ウサ縺ォ豐ソ縺」縺ヲ target 繧貞ケウ陦檎ァサ蜍輔☆繧九€・
    • distance / FOV 縺ォ蠢懊§縺ヲ pan 縺ョ螳溯キ晞屬繧偵せ繧ア繝シ繝ェ繝ウ繧ー縺吶k縲・
  • zoom(delta)
    • distance += delta 縺ィ縺励※蜑榊セ檎ァサ蜍輔☆繧九€・
    • MIN_DISTANCE / MAX_DISTANCE 縺ァ繧ッ繝ゥ繝ウ繝励☆繧九€・
    • 繧ュ繝シ繝懶ソスE繝会シ擾ソスE繧、繝シ繝ォ縺ョ隨ヲ蜿キ隕冗エ・・スE縲瑚イ縺ァ蜑埼€イ・スE・ス繧コ繝シ繝繧、繝ウ・スE・ス縲阪→縺吶k縲・
  • reset()
    • 蛻晄悄繧ォ繝。繝ゥ迥カ諷九↓謌サ縺呻シ・ootstrap 譎ゅ↓險倬鹸縺励※縺翫¥・スE・ス縲・
  • snapToAxis(axis: 'x' | 'y' | 'z')
    • 謖・・ス・ス霆ク譁ケ蜷代°繧画ァ矩€繧剃ソッ迸ー縺吶k隗貞コヲ・スE・スEheta, phi・スE・ス縺ク繧ケ繝翫ャ繝励☆繧九€・
    • target / distance 縺ッ邯ュ謖√☆繧九€・
  • setFOV(value) / setState(partial) / getState()

Renderer 蛛エ縺ァ縺ッ縲∵ッ弱ヵ繝ャ繝シ繝・スE・スE

  1. camState = cameraEngine.getState()
  2. renderer.updateCamera(camState)
  3. renderer.render()

縺ィ縺・・ス・ス豬√l縺ァ蜿肴丐縺吶k縲・

4.5.4 蜈・蜉帙Ξ繧、繝、縺ィ縺ョ髢「菫・

  • Mouse / Wheel / Keyboard / Gizmo 縺ェ縺ゥ縺ョ迚ゥ逅・・スE蜉幢ソスE縲・
    • PointerInput / KeyboardInput / gizmo.js 縺悟女縺大叙繧翫€・
    • hub.core.camera.rotate / pan / zoom / reset / snapToAxis 縺縺代r蜻シ縺ウ蜃コ縺吶€・
  • CameraEngine 閾ェ菴薙r UI 繧・renderer 縺九i逶エ謗・蜿ゥ縺上%縺ィ縺ッ遖∵ュ「縺吶k縲・

蜈・蜉幢ソスE繝・・ス・ス繝ウ繧ー縺ョ隧ウ邏ー縺ッ 3.5 遽€縺翫h縺ウ runtime_spec 縺ョ KeyboardInput / PointerInput 繧貞盾辣ァ縺吶k縲・

4.6 繧ォ繝。繝ゥ繝「繝シ繝会シ・acro / micro + meso optional・スE・ス縺ィ謠冗判

mode・スE・スEmacro” / “micro” / “meso”・スE・ス・スE縲後←縺ョ繧ケ繧ア繝シ繝ォ縺ァ讒矩€繧定ヲ九k縺九€阪r陦ィ縺吶€・ uiState.mode 繧貞髪荳€縺ョ豁」隕冗憾諷九→縺励€[odeController 縺檎ョ。逅・・ス・ス繧九€・

縺溘□縺・meso 縺ッ optional 縺ィ縺励€」1 螳溯」・・ス・ス縺ッ *macro 逶ク蠖難シ・icroFX 辟。縺暦シ・ 縺ィ縺励※謇ア縺」縺ヲ繧医> ・スE・ス・拯eso 繧貞ョ溯」・・ス・ス縺ェ縺・/ 蜿礼炊縺励※繧りヲ九◆逶ョ縺・macro 縺ィ蜷御ク€縲√←縺。繧峨〒繧ゆサ墓ァ倬&蜿阪〒縺ッ縺ェ縺・・ス・ス縲・

4.6.1 繝「繝シ繝牙ョ夂セゥ

繝「繝シ繝・逕ィ騾・隱ャ譏・
macro蜈ィ菴謎ソッ迸ー繧キ繝シ繝ウ蜈ィ菴薙r菫ッ迸ー縺吶k蝓コ譛ャ繝「繝シ繝峨€・
meso霑大m繧ッ繝ゥ繧ケ繧ソoptional縲W1 縺ァ縺ッ macro 逶ク蠖薙〒繧ょ庄・スE・スEicroFX 辟。縺暦シ峨€ょー・・ス・ス縲・・ス・ス謚櫁ソ大m繧ッ繝ゥ繧ケ繧ソ隕ウ蟇溘↓諡。蠑オ縺励※繧医>縲・
micro1 隕∫エ蜴溽せ1 隕∫エ繧貞次轤ケ縺ィ縺ソ縺ェ縺呵ソ第磁隕ウ蟇溘Δ繝シ繝峨€・
  • v1 縺ョ蠢・・ス・ス螳溯」・・スE macro / micro縲・
  • meso 縺ッ譛ェ蟇セ蠢懊〒繧ゅh縺・・ス・ス譛ェ蟇セ蠢懈凾縲ゞI 縺ッ meso 繧抵ソスE縺輔↑縺・・ス・ス縺セ縺滂ソスE辟。蜉ケ蛹厄シ峨%縺ィ縲・

4.6.2 繝「繝シ繝峨→ microFX 縺ョ髢「菫ゑシ・1・スE・スE

  • macro

    • microFX 縺ッ辟。蜉ケ・スE・スEuiState.microState = null`・スE・ス縲・
    • 蜈ィ繧ェ繝悶ず繧ァ繧ッ繝医r baseStyle 縺ョ縺セ縺セ陦ィ遉コ縺吶k縲・
  • meso・スE・スEptional・スE・スE

    • v1 縺ァ縺ッ macro 縺ィ蜷御ク€謖吝虚縺ァ繧医>・スE・スEicroFX 辟。縺励€[icroState 縺ッ null・スE・ス縲・
    • 蟆・・ス・ス諡。蠑オ縺ァ microState 繧定ィ育ョ励@縺ヲ霑大m蠑キ隱ソ繝サ驕譁ケ繝輔ぉ繝シ繝臥ュ峨r螳溯」・・ス・ス縺ヲ繧医>縲・
  • micro

    • focus 隕∫エ繧剃クュ蠢・・ス・ス縺励※ axes / bounds / glow / highlight 遲会ソスE microFX 繧帝←逕ィ縺吶k縲・
    • 髱・focus 隕∫エ縺ッ繝輔ぉ繝シ繝峨@縲∝ア€謇€讒矩€繧定ェュ繧√k縺薙→繧貞━蜈医☆繧九€・

4.6.3 繝「繝シ繝会ソスE遘サ縺ィ selection・スE・スEeso optional・スE・スE

modeController 縺ッ谺。縺ョ繝ォ繝シ繝ォ繧呈コ€縺溘☆・スE・スE

  • micro 縺ォ蜈・繧九→縺搾シ・

    • selection 縺ォ uuid 縺後↑縺代l縺ー蜈・繧後↑縺・・ス・スE
    • canEnter(uuid) 縺・false 縺ョ蝣エ蜷茨ソスE驕キ遘サ縺励↑縺・・ス・スE
  • meso 縺ォ蜈・繧九→縺搾シ・ptional・スE・ス・・

    • getSupported().meso === false 縺ョ蝣エ蜷茨ソスE驕キ遘サ隕∵アゅr reject 縺吶k・スE・ス迥カ諷具ソスE螟峨∴縺ェ縺・・ス・ス縲・
    • getSupported().meso === true 縺ョ蝣エ蜷医〒繧ゅ€」1 縺ァ縺ッ macro 逶ク蠖薙〒繧医>・スE・スEicroFX 辟。縺暦シ峨€・
  • Esc 繧ュ繝シ・スE・スE

    • 縺ゥ縺ョ繝「繝シ繝峨°繧峨〒繧・macro 縺ク謌サ繧具シ・election 縺ッ邯ュ謖√@縺ヲ繧医>・スE・ス縲・
  • frame 蜀咲函髢句ァ区凾・スE・ス謗ィ螂ィ・スE・ス・・

    • mode 繧・macro 縺ォ謌サ縺励€[icroFX 繧・OFF 縺ォ縺吶k縲・

繝「繝シ繝会ソスE遘サ縺ッ蠢・・ス・ス core.mode.set(mode, uuid?) 繧堤オ檎罰縺励€・ renderer 蛛エ縺ァ迢ャ閾ェ縺ォ mode 繧貞愛螳壹@縺ヲ縺ッ縺・・ス・ス縺ェ縺・・ス・スE

4.7 謠冗判繝代ヵ繧ゥ繝シ繝槭Φ繧ケ隕∽サカ

viewer 縺ッ髢イ隕ァ蟆ら畑縺ァ縺ゅj縲∵ャ。繧堤岼讓吶→縺吶k・スE・スE

  • frame 蛻・・ス・ス・スE・スE00ms 莉・蜀・
  • 2000縲・000 隕∫エ縺ァ譏守「コ縺ェ驕・・ス・ス縺ェ縺・
  • 繧ォ繝。繝ゥ謫堺ス懶シ・0fps 莉・荳奇シ亥ョ溯。檎腸蠅・・ス・ス蟄假シ・
  • aux 蛻・・ス・ス・スE・ス繝ヲ繝シ繧カ謫堺ス懊°繧・1 繝輔Ξ繝シ繝莉・蜀・・ス・ス蜿肴丐
  • selection / microFX・スE・スE 繝輔Ξ繝シ繝莉・蜀・・ス・ス隕冶ヲ夂噪螟牙喧縺瑚ヲ九∴繧九%縺ィ

繝代ヵ繧ゥ繝シ繝槭Φ繧ケ蜷台ク奇ソスE縺溘a縺ォ・スE・スE

  • instancing / LOD / caching / frustum culling 縺ェ縺ゥ縺ョ譛€驕ゥ蛹悶r陦後▲縺ヲ繧医>縲・
  • 縺溘□縺励%繧後i縺ッ *viewer 蜀・・ス・ス縺ァ螳檎オ・ 縺輔○縲・DSS 繧・uiState 縺ョ諢丞袖繧貞、峨∴縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

萓九∴縺ー・スE・スE

  • 驕譎ッ縺ァ縺ッ points 繧・billboard 縺ク關ス縺ィ縺・
  • 髟キ螟ァ縺ェ polyline 繧定キ晞屬縺ォ蠢懊§縺ヲ邁。逡・蛹悶☆繧・

縺ィ縺・・ス・ス縺滓怙驕ゥ蛹厄ソスE險ア螳ケ縺輔l繧九′縲・ 蜈・・スE讒矩€繝・・スE繧ソ縺後€後%縺・・ス・ス縺」縺ヲ縺・・ス・ス縲阪→隱、隗」縺輔l繧九h縺・・ス・ス謠冗判縺ッ驕ソ縺代k縲・

4.8 謠冗判遖∵ュ「莠矩・・ス・スEiewer・スE・スE

viewer 縺ッ谺。縺ョ陦檎ぜ繧定。後▲縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

  1. 菴咲スョ縺ョ荳ク繧・ソスE陬懷ョ・
    • 萓具シ壼コァ讓吶r蜍晄焔縺ォ謨エ謨ー縺ク荳ク繧√k縲∵シ蟄千せ縺ク繧ケ繝翫ャ繝励☆繧九€√↑縺ゥ縲・
  2. 繧ク繧ェ繝。繝医Μ縺ョ謗ィ貂ャ繝サ陬懈ュ」
    • 萓具シ壼コァ讓吶′霑代>縺九i縺ィ縺・・ス・ス縺ヲ閾ェ蜍輔〒謗・邯夂キ壹r霑ス蜉縺吶k縲・
  3. ref 謨エ蜷茨ソスE菫ョ蠕ゥ
    • 萓具シ壼ュ伜惠縺励↑縺・UUID 縺ォ蟇セ縺励※縲後◎繧後i縺励>縲・point 繧貞享謇九↓陬懷ョ後☆繧九€・
  4. 讒矩€繝・・スE繧ソ縺ォ蟄伜惠縺励↑縺・・ス・ス邏縺ョ霑ス蜉
    • 萓具シ夂キ夲ソスE繧定」懷ョ後☆繧九◆繧・ソスE縲御サョ諠ウ繝趣ソスE繝峨€阪r 3DSS 荳翫↓逕溘d縺吶€・
  5. 謠冗判迥カ諷九r JSON 縺ク譖ク縺肴綾縺・
    • camera / frame / filters / selection 縺ェ縺ゥ縺ョ UI 迥カ諷九r 3DSS 縺ォ菫晏ュ倥@縺ェ縺・・ス・スE
  6. 繧ォ繝。繝ゥ迥カ諷具ソスE菫晏ュ假シ域ーク邯壼喧・スE・スE
    • session 蜀・・ス・ス菫晄戟縺吶k縺ョ縺ッ繧医>縺後€∵ァ矩€繝・・スE繧ソ繧・・ス・ス驛ィ繧ケ繝医Ξ繝シ繧ク縺ォ險倬鹸縺励↑縺・・ス・スE
  7. viewer 迢ャ閾ェ繝・・スE繧ソ縺ョ 3DSS 縺ク縺ョ莉倅ク・
    • 萓具シ嘛iewerConvenience 縺ェ縺ゥ縺ョ繝輔ぅ繝シ繝ォ繝峨r 3DSS 縺ォ霑ス險倥☆繧九€・
  8. modeler 縺ョ邱ィ髮・UI 縺ョ豺キ蜈・
    • viewer 縺九i讒矩€繧堤キィ髮・・ス・ス縺阪k繧医≧縺ェ UI 繧堤エ帙l霎シ縺セ縺帙↑縺・・ス・スE
  9. 豕ィ驥茨ソスE繝ャ繝晢ソスE繝育ュ峨r謠冗判縺ク莉具ソスE縺輔○繧・
    • 繝・・ス・ス繧ケ繝医Ξ繝晢ソスE繝育函謌舌d繧ウ繝。繝ウ繝茨ソスE UI 螻、縺ァ陦後>縲∵緒逕サ隕冗ッ・・ス・ス蟠ゥ縺輔↑縺・・ス・スE
  10. 譖イ邱夲ソスE蠎ァ讓呻ソスE縲鯉ソスE蜍穂ソョ豁」縲・
    • 萓具シ夂峩邱壹〒螳夂セゥ縺輔l縺ヲ縺・・ス・ス繧ゑソスE繧・spline 縺ァ繧ケ繝繝シ繧ク繝ウ繧ー縺吶k縲√↑縺ゥ縲・

縺薙l繧会ソスE遖∵ュ「莠矩・・ス・ス驕募渚縺吶k螳溯」・・ス・ス隕九▽縺九▲縺溷エ蜷医€・ 莉墓ァ倅ク奇ソスE縲計iewer 繝舌げ縲阪→縺励※謇ア縺・・ス・ス菫ョ豁」蟇セ雎。縺ィ縺吶k縲・

譛ャ遶縺ァ縺ッ縲∵緒逕サ隕冗ッ・・ス・ス繧ォ繝。繝ゥ謖吝虚繧貞ョ夂セゥ縺吶k縲・


5 UI 繧、繝吶Φ繝医→迥カ諷狗ョ。逅・・ス・スEiewer・スE・スE

viewer 縺ョ UI 繧、繝吶Φ繝茨ソスE縲・ **讒矩€繝・・スE繧ソ・スE・スEDSS・スE・ス繧剃ク€蛻・・ス・ス譖エ縺帙★**縲・ 蜀・・ス・ス縺ョ uiState 繧呈峩譁ー縺吶k縺薙→縺ァ螳檎オ舌☆繧九€・

譛ャ遶縺ァ縺ッ縲ゞI 繧、繝吶Φ繝・竊・core 竊・renderer 縺セ縺ァ縺ョ迥カ諷具ソスE遘サ縺ィ縲・ 縲後←縺ョ邨瑚キッ縺縺代′豁」隕上Ν繝シ繝医°縲阪r謨エ逅・・ス・ス繧九€・

5.1 uiState 縺ョ蠖ケ蜑イ縺ィ謇€譛画ィゥ

uiState 縺ョ逶ョ逧・・スE谺。縺ョ 2 轤ケ・スE・スE

  1. 髢イ隕ァ菴馴ィ薙↓蠢・・ス・ス縺ェ荳€譎ら憾諷具シ・election / frame / filters / mode / runtime / microFX・スE・ス繧剃ソ晄戟縺吶k
  2. 讒矩€繝・・スE繧ソ・スE・スEDSS・スE・ス縺ク縺ョ螟画峩繧帝亟縺舌◆繧√€∵ァ矩€螻、縺ィ螳鯉ソスE蛻・・ス・ス縺吶k

謇€譛画ィゥ・スE・スE

  • data・スE・スEDSS 讒矩€・スE・ス・喞ore 縺御ソ晄戟繝サdeep-freeze 貂医∩繝サread-only
  • uiState・スE・スcore 縺悟髪荳€縺ョ譖ク縺崎セシ縺ソ讓ゥ繧呈戟縺、
  • visibleSet / microState / cameraState・スE・スuiState 縺ョ荳€驛ィ縺ィ縺励※ core 縺檎ョ。逅・
  • renderer / ui / hub 縺ッ uiState 繧・**隱ュ繧€縺縺・*・スE・スEore 縺ョ API 邨檎罰・スE・スE

uiState 縺ョ隧ウ邏ー讒矩€縺ッ 2.3 遽€縺翫h縺ウ runtime_spec 縺ョ uiState 螳夂セゥ繧呈ュ」縺ィ縺吶k縲・

5.2 繧、繝吶Φ繝医た繝シ繧ケ縺ィ豁」隕上Ν繝シ繝・

UI 繧、繝吶Φ繝茨ソスE荳サ縺ェ繧ス繝シ繧ケ・スE・スE

  • PointerInput・スE・ス・スE繧ヲ繧ケ / 繧ソ繝・・ス・ス・スE・スE
  • KeyboardInput・スE・ス繧ュ繝シ繝懶ソスE繝会シ・
  • dev 繝擾ソスE繝阪せ・スE・スErame 繧ケ繝ゥ繧、繝€ / 蜀咲函繝懊ち繝ウ / filter 繝懊ち繝ウ / gizmo 繝懊ち繝ウ・スE・スE
  • 蟆・・ス・ス縺ョ繝帙せ繝医い繝励Μ縺九i縺ョ逶エ謗・ API 蜻シ縺ウ蜃コ縺暦シ・hub.core.*`・スE・スE

豁」隕上Ν繝シ繝茨シ亥髪荳€縺ョ譖ク縺肴鋤縺育オ瑚キッ・スE・ス・・

DOM Event
  竊・
PointerInput / KeyboardInput / viewerDevHarness
  竊難シ・ub.core.* 縺ョ縺ソ・スE・スE
Core controllers / CameraEngine・スE・ス迥カ諷区峩譁ー・スE・スE
  竊・
core.recomputeVisibleSet()   竊・豢セ逕溽憾諷具ソスE蜚ッ荳€縺ョ蜀崎ィ育ョ暦ソスE蜿」
  - visibleSet 蜀崎ィ育ョ暦シ・rames / appearance.visible / filters 蜷茨ソスE・スE・スE
  - selection 縺ョ null 謨エ蜷育カュ謖・・ス・ス蠢・・ス・ス縺ェ繧・null 蛹厄シ・
  - mode 縺ィ遏帷崟縺励↑縺・・ス・ス縺・・ス・ス蜷茨シ井セ具シ嗄icro 縺ェ縺ョ縺ォ selection=null 繧堤ヲ∵ュ「・スE・スE
  - microState 縺ョ譖エ譁ー/隗」髯、・スE・スEode 縺ォ蠕薙≧・スE・スE
  竊・
hub・スE・スEender loop・スE・スE
  竊・
renderer.applyFrame / applyMicroFX / applySelection / updateCamera
  竊・
three.js Scene 縺ォ蜿肴丐

遖∵ュ「莠矩・・ス・スE

  • UI 螻、縺・uiState 繧堤峩謗・譖ク縺肴鋤縺医※縺ッ縺ェ繧峨↑縺・
  • UI 螻、縺・CameraEngine 繧・three.js 縺ョ camera / scene 縺ォ逶エ謗・隗ヲ繧後※縺ッ縺ェ繧峨↑縺・
  • renderer 螻、縺・uiState 繧・3DSS 繧呈嶌縺肴鋤縺医※縺ッ縺ェ繧峨↑縺・
  • visibleSet / microState 繧・controller 蛛エ縺ァ繝舌Λ繝舌Λ縺ォ蜀崎ィ育ョ励@縺ヲ縺ッ縺ェ繧峨↑縺・ ・スE・ス・スE險育ョ暦ソスE蠢・・ス・ス core.recomputeVisibleSet() 縺ォ髮・・ス・スE・ス・ス繧具シ・

5.3 Frame 邉サ繧、繝吶Φ繝・

5.3.1 繧、繝吶Φ繝医た繝シ繧ケ

  • dev viewer 縺ョ frame 繧ケ繝ゥ繧、繝€ / 繝懊ち繝ウ
  • KeyboardInput・スE・スEageUp / PageDown・スE・スE
  • 蟆・・ス・ス・スE・ス・スE繧ケ繝医い繝励Μ縺九i縺ョ hub.core.frame.* 蜻シ縺ウ蜃コ縺・

5.3.2 豁」隕上Ν繝シ繝・

萓具シ喃rame 繧ケ繝ゥ繧、繝€謫堺ス懶シ・ev viewer・スE・スE

  1. #frame-slider 縺ョ input 繧、繝吶Φ繝育匱轣ォ
  2. viewerDevHarness 蜀・・スE initFrameControls 縺・frameAPI.set(v) 繧貞他縺カ
    • frameAPI 縺ッ viewerHub.core.frame 縺ョ繝ゥ繝・・ス・ス
  3. core/frameController.set(v) 縺悟他縺ー繧後k
  4. uiState.frame.current 繧呈峩譁ー縺励€∝ソ・・ス・ス縺ェ繧峨け繝ゥ繝ウ繝・
  5. frameController 縺ッ uiState.frame.current 繧呈峩譁ー縺励€∝ソ・・ス・ス縺ェ繧峨け繝ゥ繝ウ繝励☆繧・
  6. 蠢・・ス・ス core.recomputeVisibleSet() 繧貞他縺ウ縲・
    • uiState.visibleSet 繧呈峩譁ー
    • selection / mode / microState 縺ョ謨エ蜷医r蟠ゥ縺輔↑縺・
  7. hub 縺ョ谺。繝輔Ξ繝シ繝 tick 縺ァ
    • renderer.applyFrame(uiState.visibleSet)
    • renderer.render()

KeyboardInput・スE・スEageUp / PageDown・スE・ス繧ょ酔讒倥↓・スE・スE

  • frame.step(+1) / frame.step(-1) 繧堤オ檎罰縺励※
    frameController.step 竊・uiState.frame.current 竊・visibleSet 竊・renderer
    縺ィ縺・・ス・ス繝ォ繝シ繝茨ソスE縺ソ繧剃スソ縺・・ス・スE

5.3.3 遖∵ュ「莠矩・・ス・スErame・スE・スE

  • renderer 縺・frames 繧堤峩謗・隱ュ繧薙〒陦ィ遉コ蜿ッ蜷ヲ繧呈アコ繧√k
  • UI 螻、縺・uiState.frame.current 縺ォ逶エ謗・譖ク縺崎セシ繧€
  • frame 遽・・ス・ス螟悶↓閾ェ逕ア縺ォ鬟幢ソスE縺励€√◎縺ョ蠕後〒蜍晄焔縺ォ繧ッ繝ゥ繝ウ繝励☆繧・ ・スE・ス繧ッ繝ゥ繝ウ繝暦ソスE frameController 蛛エ縺ョ雋ャ蜍吶→縺吶k・スE・スE

5.4 Filter / Layer 邉サ繧、繝吶Φ繝・

5.4.1 繧、繝吶Φ繝医た繝シ繧ケ

  • dev viewer 縺ョ filter 繝懊ち繝ウ・スE・スEoints / lines / aux・スE・スE
  • 蟆・・ス・ス・スE・ス・スE繧ケ繝医い繝励Μ縺九i縺ョ hub.core.filters.*

5.4.2 豁」隕上Ν繝シ繝・

  1. 繝ヲ繝シ繧カ縺・filter 繝懊ち繝ウ・スE・ス萓具シ啻#filter-lines`・スE・ス繧偵け繝ェ繝・・ス・ス
  2. viewerDevHarness 縺ョ initFilterControls 縺・ filtersAPI.setTypeEnabled("lines", enabled) 繧貞他縺カ
  3. filtersAPI 縺ッ hub.core.filters 縺ョ繝ゥ繝・・ス・ス
  4. visibilityController.setTypeFilter("lines", enabled) 縺悟他縺ー繧後k
  5. uiState.filters.types.lines 繧呈峩譁ー縺励◆繧峨€・蠢・・ス・ス* core.recomputeVisibleSet() 繧貞他縺カ
    ・スE・スEilters / frames / appearance.visible 繧貞粋謌舌@縺ヲ visibleSet 繧呈峩譁ー縺励€∵紛蜷医r菫昴▽・スE・スE
  6. hub 縺ョ谺。繝輔Ξ繝シ繝 tick 縺ァ renderer.applyFrame(visibleSet) 縺悟渚譏
  7. syncFilterUI() 縺・filtersAPI.get() 繧定ェュ繧薙〒
    繝懊ち繝ウ縺ョ繧ッ繝ゥ繧ケ・スE・スEilter-on / filter-off・スE・ス縺ィ icon・スE・ス早E/ 刪・スE・ス繧呈峩譁ー

5.4.3 遖∵ュ「莠矩・・ス・スEilter・スE・スE

  • renderer 縺・appearance.visible 繧・frames 繧定ヲ九※迢ャ閾ェ縺ォ filter 縺吶k
    • filter 蜷茨ソスE・スE・スErames / appearance.visible / filters.types・スE・ス・スE
      visibilityController 縺ォ荳€蜈・・ス・ス 縺吶k
  • UI 螻、縺・uiState.visibleSet 繧堤峩謗・譖ク縺肴鋤縺医k

5.5 Selection / Picker 邉サ繧、繝吶Φ繝・

5.5.1 繧、繝吶Φ繝医た繝シ繧ケ

  • PointerInput 縺ォ繧医k canvas click・スE・スEay picking・スE・スE
  • 蟆・・ス・ス・スE・スUI 縺九i逶エ謗・ hub.core.selection.select(uuid) 繧貞他縺カ繧ア繝シ繧ケ

v1 螳溯」・・ス・ス縺ッ PointerInput 縺・hub.pickObjectAt 繧剃スソ縺」縺ヲ驕ク謚槭r陦後≧縲・

5.5.2 豁」隕上Ν繝シ繝・

  1. 繝ヲ繝シ繧カ縺・canvas 荳翫r繧ッ繝ェ繝・・ス・ス
  2. PointerInput 縺・pointerup / click 繧偵ヵ繝・・ス・ス縺励€・
    • 逕サ髱「蠎ァ讓・竊・NDC 蠎ァ讓吶∈螟画鋤
    • hub.pickObjectAt(ndcX, ndcY) 繧貞他縺カ
  3. viewerHub 縺・renderer.pickObjectAt 縺ォ蟋碑ュイ縺励€・
    • userData.uuid 繧呈戟縺、譛€蜑埼擇繝偵ャ繝医r霑斐☆・スE・ス縺ェ縺代l縺ー null・スE・スE
  4. PointerInput 縺・uuid 繧貞女縺大叙繧翫€・
    • hub.core.selection.select(uuid) 繧貞他縺カ
  5. selectionController.select(uuid) 縺・
    • structIndex 縺九i kind 繧定ァ」豎コ
    • uiState.selection = {kind, uuid} 繧呈峩譁ー
  6. 蠢・・ス・ス core.recomputeVisibleSet() 繧貞他縺ウ縲・
    • selection 縺・visibleSet 縺ィ遏帷崟縺励↑縺・・ス・ス縺ィ繧剃ソ晁ィシ
    • mode / microState 繧剃サ墓ァ倬€壹j縺ォ譖エ譁ー・スE・ス蠢・・ス・ス縺ェ繧・micro 繧定ァ」髯、・スE・スE
  7. hub 縺ョ谺。繝輔Ξ繝シ繝 tick 縺ァ
    • renderer.applySelection(uiState.selection)
    • renderer.applyMicroFX(uiState.microState)
    • renderer.render()

5.5.3 遖∵ュ「莠矩・・ス・スEelection・スE・スE

  • UI 螻、縺・uiState.selection 繧堤峩謗・譖ク縺・
  • renderer 縺後€梧怙蠕後↓ hit 縺励◆繧ェ繝悶ず繧ァ繧ッ繝医€阪r蜍晄焔縺ォ selection 縺ィ縺励※謇ア縺・
  • modeController 繧定ソょ屓縺励※ microState 繧堤峩謗・譖ク縺肴鋤縺医k

5.6 Mode / MicroFX 邉サ繧、繝吶Φ繝茨シ・eso optional・スE・スE

5.6.1 繧、繝吶Φ繝医た繝シ繧ケ

  • KeyboardInput・スE・スEsc・スE・スE
  • dev viewer 縺ョ focus 繝医げ繝ォ繝懊ち繝ウ・スE・ス繧ッ繝ェ繝・・ス・ス・スE・スE
  • ・スE・スEptional・スE・スMESO UI・スE・ス繧ッ繝ェ繝・・ス・ス縲AgetSupported().meso === true` 縺ョ縺ィ縺搾ソスE縺ソ陦ィ遉コ・スE・スE
  • 蟆・・ス・ス・スE・ス・スE繧ケ繝医い繝励Μ縺九i縺ョ hub.core.mode.* 蜻シ縺ウ蜃コ縺・

5.6.2 豁」隕上Ν繝シ繝・

  • micro 縺ク・スE・スE

    1. UI 縺・selection.get() 縺ァ迴セ蝨ィ selection 繧貞叙蠕・
    2. sel.uuid 縺後≠繧鯉ソスE mode.set("micro", sel.uuid) 繧貞他縺カ
    3. modeController.set("micro", uuid) 縺鯉ソスE遘サ蜿ッ蜷ヲ繧貞愛螳壹@ uiState.mode 繧呈峩譁ー
    4. 蠢・・ス・ス core.recomputeVisibleSet() 繧貞他縺ウ縲[icroState 繧貞性繧€豢セ逕溽憾諷九r譖エ譁ー縺吶k
    5. 谺。繝輔Ξ繝シ繝縺ァ renderer.applyMicroFX(microState) 縺悟渚譏縺輔l繧・
  • macro 謌サ繧奇シ・sc・スE・ス・・

    • mode.set("macro") 竊・uiState.mode="macro" 竊・core.recomputeVisibleSet()
      ・スE・スEicroState 繧・null 縺ォ縺励※ microFX OFF・スE・スE
  • meso・スE・スEptional・スE・ス・・

    • getSupported().meso === false 縺ョ迺ー蠅・・ス・ス縺ッ set("meso", ...) 縺ッ false 繧定ソ斐@菴輔b縺励↑縺・・ス・スE
    • v1 螳溯」・・ス・ス縺ッ meso 縺ッ **macro 逶ク蠖難シ・icroFX 辟。縺暦シ・*縺ァ繧ゆサ墓ァ倬&蜿阪〒縺ッ縺ェ縺・・ス・スE

5.6.3 遖∵ュ「莠矩・・ス・スEode / MicroFX・スE・スE

  • renderer 縺・uiState.mode 繧堤峡閾ェ隗」驥医@縺ヲ microFX 繝ュ繧ク繝・・ス・ス繧呈戟縺、縺薙→縺ッ遖∵ュ「
    ・スE・ス蟇セ雎。豎コ螳夲ソスE core 蛛エ・スE・スrecomputeVisibleSet() 縺ォ髮・・ス・スE・ス・スE
  • UI 螻、縺・uiState.microState 繧堤峩謗・譖ク縺肴鋤縺医k縺ョ縺ッ遖∵ュ「
  • modeController 繧堤オ檎罰縺帙★ microController 繧堤峩謗・蜿ゥ縺擾ソスE縺ッ遖∵ュ「

5.7 Camera 邉サ繧、繝吶Φ繝・

5.7.1 繧、繝吶Φ繝医た繝シ繧ケ

  • PointerInput・スE・ス繝峨Λ繝・・ス・ス / 繝帙う繝シ繝ォ・スE・スE
  • KeyboardInput・スE・ス遏「蜊ー繧ュ繝シ / Home / +/-・スE・スE
  • gizmo 繝懊ち繝ウ・スE・スEOME / axis・スE・スE
  • dev viewer 縺ョ霑ス蜉繧キ繝ァ繝シ繝医き繝・・ス・ス・スE・ス萓具シ唏ome 繧ュ繝シ 竊・reset・スE・スE

5.7.2 豁」隕上Ν繝シ繝・

PointerInput・スE・スErbit / zoom / pan・スE・ス・・

  • 蟾ヲ繝峨Λ繝・・ス・ス・スE・スE
    • 繝峨Λ繝・・ス・ス驥上°繧・dTheta / dPhi 繧堤ョ暦ソスE縺励€~camera.rotate(dTheta, dPhi)`
  • 蜿ウ or 荳ュ繝峨Λ繝・・ス・ス・スE・スE
    • 逕サ髱「蠎ァ讓吝キョ蛻・・ス・ス繧・dx / dy 繧堤ョ暦ソスE縺励€~camera.pan(dx, dy)`
  • 繝帙う繝シ繝ォ・スE・スE
    • deltaY 縺九i邵ョ蟆コ繧呈アコ繧√※ camera.zoom(delta)

KeyboardInput・スE・スE

  • ArrowLeft/Right/Up/Down・スE・スE
    • camera.rotate(ツアstep, 0) / camera.rotate(0, ツアstep)
  • Home・スE・スE
    • camera.reset()
  • + / - / NumpadAdd / NumpadSubtract・スE・スE
    • camera.zoom(ツアZOOM_STEP)

gizmo・スE・スE

  • HOME 繝懊ち繝ウ・スE・スE
    • camera.reset()
  • X/Y/Z 繝懊ち繝ウ・スE・スE
    • camera.snapToAxis('x'|'y'|'z')

縺・・ス・ス繧後b譛€邨ら噪縺ォ縺ッ CameraEngine 縺ョ繝。繧ス繝・・ス・ス縺ォ髮・・ス・スE・ス・ス繧後€・ uiState.cameraState 繧呈峩譁ー縺吶k縲・

5.7.3 遖∵ュ「莠矩・・ス・スEamera・スE・スE

  • UI 螻、縺・uiState.cameraState 繧堤峩謗・譖ク縺肴鋤縺医k
  • renderer 縺・camera.position 繧貞享謇九↓蜍輔°縺励€,ameraEngine 縺ィ莠碁㍾邂。逅・・ス・ス繧・
  • modeController 繧・microController 縺檎峩謗・ camera 繧呈桃菴懊☆繧・ ・スE・ス蠢・・ス・ス縺ェ繧・CameraEngine API 繧帝€壹☆・スE・スE

5.8 runtime 繝輔Λ繧ー・スE・スEsFramePlaying / isCameraAuto・スE・スE

uiState.runtime 縺ッ縲・ソスE逕溽憾諷具ソスE閾ェ蜍輔き繝。繝ゥ迥カ諷九↑縺ゥ縺ョ
繝ゥ繝ウ繧ソ繧、繝繝ャ繝吶Ν縺ョ繝輔Λ繧ー 繧剃ソ晄戟縺吶k縲・

uiState.runtime = {
  isFramePlaying: boolean,
  isCameraAuto:   boolean,
}

v1 縺ァ縺ッ・スE・スE

  • dev viewer 縺ョ蜀咲函繝懊ち繝ウ・スE・スElay/Stop・スE・ス・スE
    繝擾ソスE繝阪せ蜀・・ス・ス縺ョ setInterval 縺ァ螳檎オ舌@縺ヲ縺翫j縲・ isFramePlaying 縺ッ縺セ縺 runtime API 縺九i縺ッ菴ソ逕ィ縺励※縺・・ス・ス縺・・ス・スE
  • 蟆・・ス・ス縲’rame 蜀咲函繝ュ繧ク繝・・ス・ス繧・core/frameController 蛛エ縺ク遘サ縺吝エ蜷茨ソスE縲・
    • hub.core.runtime.startFramePlayback() / .stopFramePlayback() 縺ェ縺ゥ繧定ソス蜉縺励€・
    • uiState.runtime.isFramePlaying 繧・core 縺悟髪荳€縺ョ豁」隕上Ν繝シ繝医→縺励※譖エ譁ー縺吶k縲・

遖∵ュ「莠矩・・ス・スE

  • UI 螻、縺・runtime 繝輔Λ繧ー繧堤峩謗・譖ク縺肴鋤縺医€・ core 蛛エ縺ョ繝ュ繧ク繝・・ス・ス縺ィ遏帷崟繧定オキ縺薙☆縺薙→
  • renderer 縺・runtime 繝輔Λ繧ー繧定ヲ九※迢ャ閾ェ縺ョ迥カ諷具ソスE繧キ繝ウ繧呈戟縺、縺薙→

5.9 dev 繝擾ソスE繝阪せ・スE・スEiewerDevHarness.js・スE・ス・スE雋ャ蜍・

viewer_dev 逕ィ繝擾ソスE繝阪せ縺ッ縲・ UI 縺ィ hub 縺ョ繝悶Μ繝・・ス・ス縺ァ縺ゅj縲〉untime 縺晢ソスE繧ゑソスE縺ァ縺ッ縺ェ縺・・ス・スE

雋ャ蜍呻シ・

  • 襍キ蜍包シ・
    • window.load 竊・boot() 繧・1 蝗槭□縺大ョ溯。・
    • bootstrapViewerFromUrl(canvasId, modelUrl, options) 繧貞他縺ウ蜃コ縺・
  • devBootLog 縺ョ驟咲キ夲シ・
    • options.devBootLog = true / options.logger = devLogger
    • Model 繝ュ繧ー繝代ロ繝ォ縺ク
      BOOT / MODEL / CAMERA / LAYERS / FRAME 繧定。ィ遉コ
  • UI 謗・邯夲シ・
    • frame 繧ケ繝ゥ繧、繝€ / 繝懊ち繝ウ 竊・hub.core.frame.*
    • filter 繝懊ち繝ウ 竊・hub.core.filters.*
    • mode HUD / focus 繝医げ繝ォ 竊・hub.core.mode.* / hub.core.selection.get()
    • gizmo 竊・hub.core.camera.reset / snapToAxis
    • Keyboard shortcuts・スE・スEpace 竊・Play・スE・ス縺ェ縺ゥ縲・ dev 蟆ら畑繧キ繝ァ繝シ繝医き繝・・ス・ス縺ョ螳溯」・
  • HUD / 繝。繧ソ諠・・ス・ス陦ィ遉コ・スE・スE
    • File 繝代ロ繝ォ・スE・スEource / frame range / current frame・スE・スE
    • Model 繝代ロ繝ォ・スE・ス繝ュ繧ー・スE・スE
    • HUD 繝茨ソスE繧ケ繝茨シ・iewerToast・スE・スE

蛻カ邏・・ス・スE

  • runtime 螻、・スE・スEore / renderer・スE・ス・スE蜀・・ス・ス讒矩€縺ォ縺ッ隗ヲ繧後↑縺・
    • 隗ヲ縺」縺ヲ繧医>縺ョ縺ッ viewerHub 縺ョ蜈ャ髢・API・スE・スEhub.core.*/hub.pickObjectAt/hub.start/hub.stop`・スE・ス・スE縺ソ
  • KeyboardInput / PointerInput 縺ョ繝ュ繧ク繝・・ス・ス繧剃ク頑嶌縺阪@縺ェ縺・
    • 萓句、厄ソスE縲郡pace 竊・Play縲阪↑縺ゥ dev 蝗コ譛峨す繝ァ繝シ繝医き繝・・ス・ス縺ョ縺ソ

莉・荳翫↓繧医j縲ゞI 繧、繝吶Φ繝茨ソスE縺吶∋縺ヲ
縲計iewerDevHarness / PointerInput / KeyboardInput 竊・hub.core.* 竊・core 竊・uiState 竊・renderer縲・ 縺ィ縺・・ス・ス荳€譛ャ蛹悶&繧後◆邨瑚キッ繧帝€壹k縺薙→縺御ソ晁ィシ縺輔l繧九€・

5.10 豢セ逕溽憾諷具ソスE蜀崎ィ育ョ励→謨エ蜷域€ァ・スE・ス蠢・・ス・ス・・

viewer 縺ッ豢セ逕溽憾諷具シ・isibleSet / microState・スE・ス繧定、・・ス・ス邂・・ス・ス縺ァ險育ョ励@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

  • core.recomputeVisibleSet() 縺・**蜚ッ荳€縺ョ蜀崎ィ育ョ暦ソスE蜿」**縺ァ縺ゅj縲・ 縺吶∋縺ヲ縺ョ UI 繧、繝吶Φ繝亥セ後↓蠢・・ス・ス縺ォ蠢懊§縺ヲ縺薙l繧貞他縺カ縲・

core.recomputeVisibleSet() 縺ッ蟆代↑縺上→繧よャ。繧剃ソ晁ィシ縺吶k・スE・スE

  1. visibleSet 縺ッ蟶ク縺ォ
    frames + appearance.visible + filters.types 縺ョ蜷茨ソスE邨先棡縺ァ縺ゅk
  2. selection 縺ッ蟶ク縺ォ null-safe 縺ァ縺ゅk
    ・スE・スEisibleSet 縺ィ遏帷崟縺吶k selection 縺ッ null 蛹悶☆繧九€√↑縺ゥ・スE・スE
  3. mode 縺ッ selection 縺ィ遏帷崟縺励↑縺・ ・スE・ス萓具シ嗄icro 縺ェ縺ョ縺ォ selection=null 縺ョ迥カ諷九r菴懊i縺ェ縺・・ス・スE
  4. microState 縺ッ mode 縺ォ蠕薙▲縺ヲ譖エ譁ー/隗」髯、縺輔l繧・ ・スE・スEacro 縺ァ縺ッ蠢・・ス・ス null縲[icro 縺ァ縺ッ蠢・・ス・ス蜀崎ィ育ョ暦シ・

縺薙l縺ォ繧医j縲√€檎憾諷具ソスE莠碁㍾邂。逅・・ス・ス縲鯉ソスE險育ョ玲シ上l縲阪€稽ode 縺ィ selection 縺ョ遏帷崟縲阪r莉墓ァ倅ク顔ヲ∵ュ「縺吶k縲・


6 繝ュ繧ー繝サ險コ譁ュ繝サ螟夜Κ騾」謳コ縺ィ遖∵ュ「讖滂ソスE・スE・スEiewer・スE・スE

viewer 縺ッ讒矩€繝・・スE繧ソ繧貞、画峩縺励↑縺・・ス・ス隕ァ蟆ら畑繧「繝励Μ縺ァ縺ゅk縺ィ蜷梧凾縺ォ縲・ 髢狗匱繝サ讀懆ィシ縺ョ縺溘a縺ョ 險コ譁ュ繝ュ繧ー 繧抵ソスE蜉帙〒縺阪k dev viewer・スE・スEiewer_dev・スE・ス繧呈戟縺、縲・

譛ャ遶縺ァ縺ッ縲・

  • 繝ュ繧ー・スE・ス迚ケ縺ォ devBootLog・スE・ス・スE莉墓ァ・
  • 繧ィ繝ゥ繝シ蝣ア蜻翫→繝ヲ繝シ繧カ蜷代¢繝。繝・・ス・ス繝シ繧ク
  • runtime API 繧剃サ九@縺溷、夜Κ騾」謳コ
  • 繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス・スE・ス繧ィ繧ッ繧ケ繝晢ソスE繝域ゥ滂ソスE縺ョ謇ア縺・
  • microFX 縺ョ驕狗畑繝ォ繝シ繝ォ・スE・ス隧ウ邏ー迚茨シ・

繧貞ョ夂セゥ縺吶k縲・

6.1 繝ュ繧ー縺ョ蝓コ譛ャ譁ケ驥・

6.1.1 繝ュ繧ー繝ャ繧、繝、

viewer 縺ョ繝ュ繧ー縺ッ螟ァ縺阪¥ 3 繝ャ繧、繝、縺ォ蛻・・ス・ス繧後k・スE・スE

  1. dev viewer UI 繝ュ繧ー
    • viewer_devHarness 蜀・・ス・ス謇ア縺・・ス・スModel 繝代ロ繝ォ縲咲ュ峨∈縺ョ蜃コ蜉・
    • 莠コ髢薙′髢狗匱譎ゅ↓遒コ隱阪☆繧九◆繧・ソスE繧ゑソスE
  2. 繝悶Λ繧ヲ繧カ繧ウ繝ウ繧ス繝シ繝ォ繝ュ繧ー
    • console.log / console.warn / console.error 縺ォ繧医k蜃コ蜉・
    • 髢狗匱譎ゑソスE繝・・ス・ス繝・・ス・ス縲√♀繧茨ソスE譛ャ逡ェ縺ァ繧ょソ・・ス・ス譛€蟆城剞縺ョ繧ィ繝ゥ繝シ騾夂衍縺ォ蛻ゥ逕ィ
  3. *繝帙せ繝医い繝励Μ蛛エ繝ュ繧ー・スE・ス莉サ諢擾シ・
    • Astro / 螟夜Κ JS 縺ェ縺ゥ縺・viewer 縺ョ繧、繝吶Φ繝医r諡セ縺」縺ヲ縲・ 繧オ繝シ繝舌Ο繧ョ繝ウ繧ー繧・・ス・ス閾ェ UI 縺ォ蜃コ縺吝エ蜷・
    • viewer 莉墓ァ倥→縺励※縺ッ縲後う繝吶Φ繝磯€夂衍縺ョ蠖「縲阪∪縺ァ繧剃ソ晁ィシ縺励€・ 螳滄圀縺ョ繝ュ繧ー繧ケ繝医Ξ繝シ繧ク縺ッ繝帙せ繝茨ソスE雋ャ蜍吶→縺吶k

6.1.2 繝ュ繧ー縺ョ逶ョ逧・

繝ュ繧ー縺ョ荳サ逶ョ逧・・スE谺。縺ョ騾壹j縺ィ縺吶k・スE・スE

  • 3DSS 繝ュ繝シ繝会ソスE讀懆ィシ繝サ蛻晄悄蛹厄ソスE謌仙粥・スE・ス螟ア謨励r蜿ッ隕門喧縺吶k
  • frame / filter / selection / mode / camera 縺ョ謖吝虚繧定ィコ譁ュ縺吶k
  • microFX 繧・structIndex 縺ェ縺ゥ縲・ソスE驛ィ蜃ヲ逅・・スE荳肴紛蜷医r讀懃衍縺吶k

騾・・ス・ス縲・

  • 繧ィ繝ウ繝峨Θ繝シ繧カ蜷代¢縺ョ蟶ク譎ゅΟ繧ー繝薙Η繝シ繧「繧呈署萓帙☆繧・
  • 3DSS 縺ョ蜀・・ス・ス繧偵€後Ο繧ー縺ィ縺励※繧ィ繧ッ繧ケ繝晢ソスE繝医€阪☆繧・

縺ィ縺・・ス・ス縺溽畑騾費ソスE viewer 譛ャ菴難ソスE雋ャ蜍吝、悶→縺吶k縲・

6.2 devBootLog・スE・ス襍キ蜍輔Ο繧ー・スE・ス莉墓ァ・

6.2.1 蠖ケ蜑イ

devBootLog 縺ッ縲‥ev viewer 襍キ蜍墓凾縺ォ *譛€菴・1 蝗槭□縺・ 蜃コ蜉帙&繧後k
讓呎コ門ス「蠑擾ソスE襍キ蜍輔Ο繧ー鄒、縺ァ縺ゅk縲・

逶ョ逧・・ス・スE

  • 襍キ蜍慕オ瑚キッ縺御サ墓ァ倥←縺翫j縺ォ縺ェ縺」縺ヲ縺・・ス・ス縺九r遒コ隱阪☆繧・
  • model URL / 蛻晄悄 camera / layers / frame 迥カ諷九r荳€逶ョ縺ァ謚頑升縺吶k
  • 繝・・ス・ス繝・・ス・ス譎ゅ↓縲瑚オキ蜍輔∪縺ァ縺ッ豁」蟶ク縺九€阪r邏譌ゥ縺擾ソスE繧奇ソスE縺代k

6.2.2 蜃コ蜉帛ス「蠑・

襍キ蜍募ョ御コ・・ス・ス縲∵ャ。縺ョ 5 繝ャ繧ウ繝シ繝峨r縺難ソスE鬆・・ス・ス蜃コ蜉帙☆繧具シ・

BOOT  <devLabel>
MODEL <modelUrl or (unknown)>
CAMERA {"position":[x,y,z],"target":[x,y,z],"fov":number}
LAYERS points=on|off lines=on|off aux=on|off
FRAME  frame_id=<number>
  • BOOT
    • 繝ゥ繝吶Ν譁・・ス・ス・スE・スE・ス騾壼クク縺ッ "viewer_dev"・スE・ス繧貞・縺吶€・
  • MODEL
    • JSON 繝ュ繝シ繝会ソスE縺ョ URL・スE・スEmodelUrl・スE・ス繧貞・縺吶€・ 譛ェ險ュ螳夲ソスE蝣エ蜷茨ソスE ”MODEL (unknown)”` 縺ィ縺吶k縲・
  • CAMERA
    • cameraEngine.getState() 縺ェ縺ゥ縺九i cameraState 繧貞叙蠕励@縲・
      • position: [x,y,z]・スE・ス蟄伜惠縺励↑縺・・ス・ス蜷茨ソスE [0,0,0]・スE・スE
      • target: [x,y,z]・スE・ス蟄伜惠縺励↑縺・・ス・ス蜷茨ソスE [0,0,0]・スE・スE
      • fov: number・スE・ス蟄伜惠縺励↑縺・・ス・ス蜷茨ソスE 50・スE・スE
    • 繧・JSON 譁・・ス・ス・スE縺ィ縺励※蝓九a霎シ繧€縲・
  • LAYERS
    • uiState.filters.types.{points,lines,aux} 繧貞━蜈医@縲・
  • FRAME
    • uiState.frame.current 縺セ縺滂ソスE frameController.get() 縺ョ蛟、繧抵ソスE縺吶€・

6.2.3 蜃コ蜉幢ソスE縺ィ繧ェ繝励す繝ァ繝ウ

bootstrapViewer / bootstrapViewerFromUrl 縺ョ options 縺ィ縺励※・スE・スE

  • devBootLog: boolean
    • true 縺ョ蝣エ蜷茨ソスE縺ソ devBootLog 繧抵ソスE蜉帙☆繧九€・
  • devLabel?: string
    • BOOT 陦後↓蝓九a霎シ繧€繝ゥ繝吶Ν・スE・ス逵∫払譎・"viewer_dev"・スE・ス縲・
  • modelUrl?: string
    • MODEL 陦後↓蜃コ縺・model URL縲・
  • logger?: (line: string) => void
    • 繝ュ繧ー蜃コ蜉幃未謨ー縲ら怐逡・譎ゑソスE console.log 繧堤畑縺・・ス・ス縲・

viewer_dev 繝擾ソスE繝阪せ縺ァ縺ッ騾壼クク・スE・スE

  • devBootLog: true
  • devLabel: "viewer_dev"
  • modelUrl: jsonUrl
  • logger: devLogger・スE・スEevLogger 縺ッ Model 繝代ロ繝ォ縺ク霑ス險假シ・

縺ィ縺励※蜻シ縺ウ蜃コ縺吶€・

6.2.4 dev / 譛ャ逡ェ縺ァ縺ョ謇ア縺・・ス・スE-10 蟇セ蠢懶シ・

  • dev viewer・スE・スEiewer_dev.html・スE・ス・・
    • 荳願ィ・5 陦後r *蠢・・ス・スE 縺ィ縺吶k縲・
    • 蜃コ蜉幢ソスE縺ッ UI・スE・スEodel 繝代ロ繝ォ・スE・ス・・繧ウ繝ウ繧ス繝シ繝ォ繧呈Φ螳壹€・
  • 譛ャ逡ェ viewer・スE・スE
    • 蜷後§繝輔か繝シ繝槭ャ繝茨ソスE繝ュ繧ー繧・莉サ諢上〒 蜃コ蜉帙@縺ヲ繧医>縲・
    • 蠢・・ス・ス縺ァ縺ッ縺ェ縺・・ス・ス縲∬ィコ譁ュ荳頑怏逕ィ縺ェ縺溘a蟆・・ス・ス逧・・ス・ス蜀榊茜逕ィ繧呈Φ螳壹☆繧九€・

縺、縺セ繧・devBootLog 縺ッ縲慧ev viewer 縺ァ蠢・・ス・ス縲∵悽逡ェ縺ァ莉サ諢上€搾ソスE險コ譁ュ繝ュ繧ー縺ィ縺吶k縲・ 繝輔か繝シ繝槭ャ繝茨ソスE蟆・・ス・ス繧ょョ会ソスE縺ォ螟画峩縺励↑縺・・ス・スE

6.3 霑ス蜉繝ュ繧ー繧ォ繝・・ス・ス繝ェ・スE・ス髢狗匱逕ィ・スE・スE

螳溯」・・ス・ス縲∵ャ。縺ョ繧医≧縺ェ繧ォ繝・・ス・ス繝ェ繧・DEBUG 繝輔Λ繧ー莉倥″縺ァ謖√▲縺ヲ繧医>・スE・スE

  • HUB (DEBUG_HUB)
    • hub 縺ョ繝輔Ξ繝シ繝縺斐→縺ョ迥カ諷九せ繝翫ャ繝励す繝ァ繝・・ス・ス
    • 萓具シ啻[hub] frame n { cam, visibleSet, selection }`
  • POINTER (DEBUG_POINTER)
    • PointerInput 縺ョ pointerdown / move / up / click 繧、繝吶Φ繝・
  • KEYBOARD (DEBUG_KEYBOARD)
    • KeyboardInput 縺ョ keydown 繧、繝吶Φ繝・
  • MICROFX (DEBUG_MICROFX)
    • microFX 驕ゥ逕ィ蜑榊セ鯉ソスE state 螟牙喧・スE・スEocusUuid / relatedUuids / localBounds 遲会シ・

縺薙l繧会ソスE 繝・・ス・ス繧ゥ繝ォ繝・OFF 縺ィ縺励€・ 髢狗匱譎ゅ↓縺ョ縺ソ true 縺ォ縺励※菴ソ縺・・ス・スE

遖∵ュ「莠矩・・ス・スE

  • DEBUG 繝輔Λ繧ー OFF 譎ゅ↓繧ょ、ァ驥擾ソスE繝ュ繧ー繧抵ソスE縺礼カ壹¢繧九%縺ィ
  • 蛟倶ココ諠・・ス・ス縺ェ縺ゥ 3DSS 螟夜Κ縺ョ繝・・スE繧ソ繧貞享謇九↓繝ュ繧ー縺ク譖ク縺崎セシ繧€縺薙→

6.4 繧ィ繝ゥ繝シ蜃ヲ逅・・ス・ス繝ヲ繝シ繧カ繝。繝・・ス・ス繝シ繧ク

6.4.1 3DSS 繝ュ繝シ繝会シ乗、懆ィシ繧ィ繝ゥ繝シ

bootstrapViewerFromUrl 縺ッ谺。繧定。後≧・スE・スE

  1. loadJSON(url) 縺ァ fetch
  2. JSON parse
  3. ensureValidatorInitialized()・スE・スEJV 縺ォ繝ュ繝シ繧ォ繝ォ繧ケ繧ュ繝シ繝槭r隱ュ縺ソ霎シ繧€・スE・スE
  4. validate3DSS(doc) 縺ァ strict validation
  5. NG 縺ョ蝣エ蜷茨ソスE謨エ蠖「縺励◆ Error 繧・throw・スE・スEub 縺ッ逕滂ソスE縺励↑縺・・ス・スE

繧ィ繝ゥ繝シ遞ョ蛻・・スE・スEev 陦ィ遉コ逕ィ・スE・ス・・

  • NETWORK_ERROR 窶ヲ fetch 螟ア謨暦シ・04 / CORS / offline 遲会シ・
  • JSON_ERROR 窶ヲ JSON parse 螟ア謨・
  • VALIDATION_ERROR 窶ヲ strict validation NG

dev viewer 縺ァ縺ッ・スE・スE

  • File 繝代ロ繝ォ縺ォ
    • ERROR: <遞ョ蛻・> 縺ィ繝。繝・・ス・ス繝シ繧ク
    • (no struct loaded) 繧抵ソスE遉コ
  • Model 繝代ロ繝ォ縺ォ
    • 隧ウ邏ー・スE・スEalidation 縺ョ instancePath / message 縺ェ縺ゥ・スE・ス繧・<pre> 縺ァ陦ィ遉コ

譛ャ逡ェ viewer 縺ァ縺ッ・スE・スE

  • 繝ヲ繝シ繧カ縺ォ縺ッ邁。譏薙Γ繝・・ス・ス繝シ繧ク縺ョ縺ソ・スE・ス萓具シ啻”繝・・スE繧ソ隱ュ霎シ繧ィ繝ゥ繝シ”`・スE・スE
  • 隧ウ邏ー縺ッ繧ウ繝ウ繧ス繝シ繝ォ・スE・ス・スE繧ケ繝茨ソスE繝ュ繧ョ繝ウ繧ー縺ァ謇ア縺・
  • 縺・・ス・ス繧鯉ソスE繧ィ繝ゥ繝シ縺ァ繧・*hub 繧堤函謌舌○縺・ render loop 繧帝幕蟋九@縺ェ縺・

6.4.2 繝ゥ繝ウ繧ソ繧、繝繧ィ繝ゥ繝シ

繝ゥ繝ウ繧ソ繧、繝繧ィ繝ゥ繝シ・スE・ス萓具シ嗄icroFX 蜀・・ス・ス null 蜿ゑソスE縺ェ縺ゥ・スE・ス・スE・スE・スE

  • 蜿ッ閭ス縺ェ髯舌j try/catch 縺ァ謠。繧翫▽縺、縲・
    • console.warn / console.error 縺ォ險倬鹸
  • viewer 蜈ィ菴難ソスE繧ッ繝ゥ繝・・ス・ス繝・繧帝∩縺代k譁ケ蜷代〒繝上Φ繝峨Μ繝ウ繧ー縺吶k

縺溘□縺励€√き繝。繝ゥ繧・frame 謫堺ス懊′螳鯉ソスE縺ォ荳搾ソスE縺ォ縺ェ繧九h縺・・ス・ス閾エ蜻ス逧・・ス・ス繝ゥ繝シ縺ッ縲・ 繝ヲ繝シ繧カ UI 縺ォ繧らー。譏薙↑繧ィ繝ゥ繝シ陦ィ遉コ・スE・ス繝医・繧ケ繝育ュ会シ峨r蜃コ縺励※繧医>縲・

6.5 runtime API 縺ィ螟夜Κ騾」謳コ・スE・スEublic surface・スE・スE

viewer 縺ョ螟夜Κ蜈ャ髢矩擇・スE・スEublic surface・スE・ス・スE谺。縺ョ 2 縺、縺ァ讒具ソスE縺輔l繧具シ・

  1. *runtime entry・スE・ス蠢・・ス・ス・スE豁」隕擾シ・

    • bootstrapViewer(canvasOrId, threeDSS, options?) 竊・hub
    • bootstrapViewerFromUrl(canvasOrId, url, options?) 竊・Promise<hub>
    • 霑斐k hub 縺ョ hub.core.* 縺悟、夜Κ謫堺ス懶ソスE蜚ッ荳€縺ョ蜈・蜿」縺ァ縺ゅk
  2. *viewerCore・スE・ス莉サ諢擾ソスE繝帙せ繝亥髄縺題埋縺・・ス・ス繝・・ス・ス・スE・スE

    • 譛ャ逡ェ繝帙せ繝茨シ・stro 遲会シ峨〒菴ソ縺・・ス・ス縺吶¥縺吶k縺溘a縺ョ *阮・・ス・ス繝輔ぃ繧オ繝シ繝・ 縺ィ縺励※謠蝉セ帙@縺ヲ繧医>
    • viewerCore 縺ッ蜀・・ス・ス縺ァ蠢・・ス・ス bootstrapViewer* 繧貞他縺ウ縲”ub 繧剃ソ晄戟縺励※蟋碑ュイ縺吶k縺縺代↓縺吶k
    • viewerCore 繧剃スソ縺・・ス・ス縺ゥ縺・・ス・ス縺ッ繝帙せ繝茨ソスE蜷茨シ亥ソ・・ス・ス縺ァ縺ッ縺ェ縺・・ス・スE

繝ャ繧、繝、繝ェ繝ウ繧ー隕冗ッ・・ス・スE

  • Host 縺ッ *bootstrapViewer 繧ゅ@縺擾ソスE viewerCore 縺ョ縺ゥ縺。繧峨°**繧抵ソスE蜿」縺ォ縺吶k
  • Host 縺ッ runtime/core/* / runtime/renderer/* 繧堤峩 import 縺励※縺ッ縺ェ繧峨↑縺・
  • Host 縺ッ three.js / Object3D 縺ォ逶エ謗・隗ヲ繧後※縺ッ縺ェ繧峨↑縺・・ス・ス隗ヲ縺」縺ヲ縺医∴縺ョ縺ッ hub 縺ョ API 縺縺托シ・

險ア蜿ッ縺輔l繧区桃菴懶シ・ub.core.* 邨檎罰・スE・ス・・

  • frame / filter / mode / selection / camera / runtime 繝輔Λ繧ー縺ョ get / set / step
  • pick・スE・スEhub.pickObjectAt`・スE・ス縺ォ繧医k UUID 蜿門セ・
  • ・スE・ス蟆・・ス・ス・スE・ス繧、繝吶Φ繝郁ウシ隱ュ・スE・スonFrameChanged, onSelectionChanged 遲・

遖∵ュ「縺輔l繧区桃菴懶シ・

  • 3DSS document 縺ョ譖ク縺肴鋤縺・
  • exporter / 菫晏ュ・/ 3DSS 縺ク縺ョ譖ク縺肴綾縺・
  • viewer 蜀・・ス・ス縺ョ three.js / Object3D 縺ク縺ョ逶エ謗・繧「繧ッ繧サ繧ケ

6.5.1 API 繝ャ繧、繝、繝ェ繝ウ繧ー

  • viewerCore・スE・ス螟夜Κ蜈ャ髢具シ・
    • createViewerCore(canvasOrId, options) 縺ェ縺ゥ繧帝€壹§縲・
    • 蜀・・ス・ス縺ァ bootstrapViewerFromUrl / bootstrapViewer 繧貞他縺ウ縲・
    • hub 縺ク縺ョ螳会ソスE縺ェ繝輔ぃ繧オ繝シ繝峨r謠蝉セ帙☆繧九€・
  • hub・スE・ス・スE驛ィ・スE・スE
    • hub.core.* / hub.pickObjectAt / hub.start / hub.stop 繧呈戟縺、縲・
  • core / renderer・スE・ス螳鯉ソスE蜀・・ス・ス・スE・スE
    • 螟夜Κ縺九i逶エ謗・隗ヲ繧峨↑縺・・ス・スE

繝帙せ繝医い繝励Μ縺ッ 蠢・・ス・ス viewerCore 邨檎罰 縺ァ viewer 繧呈桃菴懊☆繧九€・ hub / core / renderer 繧堤峩 import 縺励※縺ッ縺ェ繧峨↑縺・・ス・スE

6.5.2 險ア蜿ッ縺輔l繧区桃菴・

runtime API 繧帝€壹§縺ヲ險ア蜿ッ縺輔l繧区桃菴懶ソスE・スE・スE

  • frame / filter / mode / selection / camera / runtime 繝輔Λ繧ー縺ォ髢「縺吶k
    • 隱ュ縺ソ蜿悶j・スE・スEet 邉サ・スE・スE
    • 譖ク縺崎セシ縺ソ・スE・スEet / step / next / prev 邉サ・スE・スE
  • pick・スE・スEpickObjectAt`・スE・ス縺ォ繧医k UUID 蜿門セ・
  • 繧、繝吶Φ繝郁ウシ隱ュ・スE・ス蟆・・ス・ス諡。蠑オ・スE・ス・・
    • 萓具シ啻onFrameChanged, onSelectionChanged`

遖∵ュ「縺輔l繧区桃菴懶ソスE・スE・スE

  • 3DSS document 縺ョ譖ク縺肴鋤縺・
  • 3DSS 縺ョ縲御ソ晏ュ倥€阪d縲後お繧ッ繧ケ繝晢ソスE繝医€阪→縺励※縺ョ蛻ゥ逕ィ
  • viewer 蜀・・ス・ス縺ョ three.js / Object3D 縺ク縺ョ逶エ謗・繧「繧ッ繧サ繧ケ

6.6 繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス繝サ繧ィ繧ッ繧ケ繝晢ソスE繝域ゥ滂ソスE・スE・スE-11・スE・スE

6.6.1 繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス

viewer 譛ャ菴難シ・untime / viewerCore / hub・スE・ス・スE縲・ **繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス逕滂ソスE API 繧呈署萓帙@縺ヲ縺ッ縺ェ繧峨↑縺・*縲・

  • toDataURL / toBlob 縺ェ縺ゥ縺ァ canvas 縺九i逕サ蜒上r蜿悶k陦檎ぜ縺ッ縲・
    • 繝帙せ繝医い繝励Μ・スE・スETML / Astro・スE・ス・スE雋ャ蜍吶→縺吶k縲・
  • viewer 縺檎峡閾ェ縺ョ縲後せ繧ッ繧キ繝ァ繝懊ち繝ウ縲阪r謖√■縲・ 蜀・・ス・ス縺ァ逕サ蜒冗函謌撰ソスE繝€繧ヲ繝ウ繝ュ繝シ繝峨r陦後≧縺薙→縺ッ遖∵ュ「縲・

逅・・ス・ス・スE・スE

  • viewer 縺ッ縲梧ァ矩€縺ョ髢イ隕ァ繝サ菴馴ィ薙€阪↓迚ケ蛹悶@縲・ 逕サ蜒冗函謌舌ヤ繝シ繝ォ蛹悶r驕ソ縺代k縲・
  • 蟆ら畑 API 繧定ィュ險医☆繧九→縲√Δ繝・・ス・ス縺斐→縺ォ莉墓ァ倥′閹ィ繧会ソスE縺溘a縲・

6.6.2 讒矩€繧ィ繧ッ繧ケ繝晢ソスE繝・

viewer 譛ャ菴難ソスE谺。縺ョ繧ィ繧ッ繧ケ繝晢ソスE繝域ゥ滂ソスE繧呈戟縺」縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

  • glTF / OBJ / FBX 遲・3D 繝「繝・・ス・ス蠖「蠑上∈縺ョ繧ィ繧ッ繧ケ繝晢ソスE繝・
  • CSV / TSV 遲峨ユ繧ュ繧ケ繝亥ス「蠑上∈縺ョ繧ィ繧ッ繧ケ繝晢ソスE繝・
  • SVG / PDF / 逕サ蜒擾ソスE繧ッ繝医Ν蠖「蠑上∈縺ョ繧ィ繧ッ繧ケ繝晢ソスE繝・
  • 縲檎樟蝨ィ縺ョ filter / selection / frame 迥カ諷九€阪r蜷ォ繧薙□ 3DSS 縺ク縺ョ譖ク縺肴綾縺・

3DSS 縺九i莉門ス「蠑上∈縺ョ螟画鋤縺ッ *modeler 繧・・ス・ス逕ィ繝・・スE繝ォ縺ョ雋ャ蜍・ 縺ィ縺励€・ viewer 縺ッ read-only 縺ョ縺セ縺セ菫昴▽縲・

6.6.3 萓句、厄シ夲ソスE繧ケ繝茨ソスE繝ヲ繝シ繝・・ス・ス繝ェ繝・・ス・ス

繝帙せ繝医い繝励Μ縺檎峡閾ェ縺ォ・スE・スE

  • canvas 繧偵く繝」繝励メ繝」縺励※逕サ蜒上ム繧ヲ繝ウ繝ュ繝シ繝会ソスE繧ソ繝ウ繧定ィュ鄂ョ
  • API 縺九i 3DSS 繧貞叙蠕励@縺ヲ蛻・繝・・スE繝ォ縺ク貂。縺・

縺ィ縺・・ス・ス縺溷ョ溯」・・ス・ス縺吶k縺薙→縺ッ險ア蜿ッ縺輔l繧九€・ 縺溘□縺励◎繧鯉ソスE viewer 莉墓ァ假ソスE荳€驛ィ縺ァ縺ッ縺ェ縺上€・ 繝帙せ繝亥崋譛会ソスE繝ヲ繝シ繝・・ス・ス繝ェ繝・・ス・ス縺ィ縺励※菴咲スョ縺・縺代k縲・

6.7 髢狗匱譎ゑソスE繝・・ス・ス繝茨ソスE繝・・ス・ス繝・・ス・ス謖・・スE・スE・ス髱櫁ヲ冗ッ・・ス・スE

譛ャ遽€縺ッ謗ィ螂ィ莠矩・・ス・ス縺ゅj縲∝ソ・・ス・ス縺ァ縺ッ縺ェ縺・・ス・スE

6.7.1 譛€菴朱剞遒コ隱阪☆縺ケ縺阪Ν繝シ繝・

髢狗匱譎ゅ↓譛€菴朱剞遒コ隱阪☆繧九∋縺埼・・ス・ス・スE・スE

  • 襍キ蜍輔Ν繝シ繝・
    • viewer_dev.html 竊・viewerDevHarness 竊・bootstrapViewerFromUrl 竊・hub.start
  • 蜈・蜉・
    • 繝槭え繧ケ繝峨Λ繝・・ス・ス・スE・スorbit / pan / zoom
    • PageUp / PageDown・スE・スframe ツア1・スE・スElider / label 霑ス髫擾シ・
    • Esc・スE・スmode 蛻・・ス・ス・スE・スEUD pill / toast・スE・スE
    • Home・スE・スcamera reset・スE・スEizmo HOME 縺ィ荳€閾エ・スE・スE
  • devBootLog
    • Model 繝代ロ繝ォ縺ォ BOOT / MODEL / CAMERA / LAYERS / FRAME 縺ョ 5 陦後′荳ヲ縺カ縺薙→
  • filter
    • points / lines / aux 縺ョ ON/OFF 縺悟庄隕悶↓蜿肴丐縺輔l繧九%縺ィ
  • selection / microFX
    • 繧ッ繝ェ繝・・ス・ス縺ァ selection / focus UUID 縺梧峩譁ー縺輔l縲・
    • microFX・スE・スExes / bounds / marker / glow / highlight・スE・ス縺梧Φ螳壹←縺翫j蜃コ繧九%縺ィ

6.7.2 DEBUG 繝輔Λ繧ー縺ョ驕狗畑

  • DEBUG_* 縺ッ git commit 蜑阪↓ false 縺ォ謌サ縺吶°縲・ 迺ー蠅・・ス・ス謨ー繧・・ス・ス繝ォ繝峨ヵ繝ゥ繧ー縺ァ蛻・・ス・ス譖ソ縺医k縲・
  • 荳€譎ら噪縺ェ console.log / debugger 縺ェ縺ゥ縺ッ
    繝ュ繝シ繧ォ繝ォ讀懆ィシ蠕後↓蜑企勁縺励€.EBUG 繝輔Λ繧ー莉倥″繝ュ繧ャ繝シ縺ク遘サ縺吶€・

6.8 microFX 驕狗畑繝ォ繝シ繝ォ・スE・ス隧ウ邏ー・スE・スE

譛ャ遽€縺ッ縲・.4 遽€縺ァ霑ー縺ケ縺・microFX 縺ョ陬懆カウ縺ィ縺励※縲・ runtime_spec / 7.11 遽€縺ョ MicroFXPayload 繧定ク上∪縺医◆驕狗畑繝ォ繝シ繝ォ繧堤、コ縺吶€・

6.8.1 microState・スE・スEicroFXPayload・スE・ス・スE蜑肴署

microState 縺ッ豢セ逕溽憾諷九〒縺ゅj縲・*core 縺檎函謌撰ソスE譖エ譁ー繝サ隗」髯、繧剃ク€蜈・・ス・ス逅・*縺吶k縲・

  • microState 縺ッ uiState.microState 縺ォ縺ョ縺ソ菫晄戟縺吶k
  • 逕滂ソスE繝サ隗」髯、縺ョ豁」隕上Ν繝シ繝茨ソスE core.recomputeVisibleSet() 縺ィ縺吶k ・スE・スEode / selection / visibleSet 謨エ蜷医→蜷梧凾縺ォ譖エ譁ー縺吶k・スE・スE

renderer 縺ッ microState 繧定ェュ繧€縺縺代〒縲∵嶌縺肴鋤縺医※縺ッ縺ェ繧峨↑縺・・ス・スE

6.8.3 focus / selection / mode 縺ィ縺ョ髢「菫ゑシ・eso optional・スE・スE

  • microFX 縺ッ蟶ク縺ォ mode 縺ォ蠕灘ア槭☆繧具シ・

    • mode = macro 竊・microState = null・スE・スEicroFX OFF・スE・スE
    • mode = micro 竊・microState != null・スE・ス蠢・・ス・ス縺ェ payload 繧定ィ育ョ暦シ・
    • mode = meso 竊・optional
      • v1 縺ァ縺ッ meso 繧・**macro 逶ク蠖難シ・icroFX 辟。縺暦シ・*縺ィ縺励※繧ゆサ墓ァ倬&蜿阪〒縺ッ縺ェ縺・
      • meso 繧貞ョ溯」・・ス・ス繧句エ蜷茨ソスE縺ソ microState != null 繧定ィア蜿ッ縺吶k
  • focusUuid 縺ッ蜴溷援 selection.uuid 縺ィ荳€閾エ縺吶k

6.8.4 microFX 縺ョ ON/OFF

ON/OFF 縺ッ core 縺ョ雋ャ蜍吶〒縺ゅj縲〉enderer 縺ッ microState === null 縺九←縺・・ス・ス縺縺代〒蛻、譁ュ縺吶k縲・

  • microState === null
    • microFX overlay 繧偵☆縺ケ縺ヲ隗」髯、縺励€|aseStyle 縺ォ螳鯉ソスE蠕ゥ蜈・・ス・ス繧・
  • microState !== null
    • focusUuid / relatedUuids / localBounds 遲峨↓蠕薙▲縺ヲ overlay 繧帝←逕ィ縺吶k

豕ィ諢擾シ・

  • microFX 縺ョ隗」髯、・スE・ス蠕ゥ蜈・・スE **蟶ク縺ォ螳鯉ソスE蜿ッ騾・*縺ァ縺ゅk縺薙→・スE・スEaseStyle 縺ョ菫晄戟縺悟ソ・・ス・ス・・
  • 隗」髯、縺悟ソ・・ス・ス縺ェ繧ソ繧、繝溘Φ繧ー・スE・ス萓具シ嗄acro 謌サ繧・/ selection 縺ョ null 蛹厄シ会ソスE core.recomputeVisibleSet() 縺御ソ晁ィシ縺吶k

6.8.5 renderer 蜀・・ス・ス縺ァ縺ョ遖∵ュ「莠矩・

renderer / microFX 螳溯」・・ス・ス陦後▲縺ヲ縺ッ縺ェ繧峨↑縺・・ス・ス縺ィ・スE・スE

  • microState 繧呈嶌縺肴鋤縺医k
  • struct・スE・スEDSS・スE・ス繧貞盾・スE縺帙★縺ォ迢ャ閾ェ縺ョ縲梧э蜻ウ縲阪r豎コ繧√k
    • 萓具シ啅UID 譛ォ蟆セ縺ョ險伜捷繧・・ス・ス蜑阪↓蠢懊§縺ヲ迚ケ蛻・謇ア縺・・ス・ス繧・
  • uiState.mode / selection 繧堤峩謗・譖ク縺肴鋤縺医k
  • 讒矩€繝・・スE繧ソ縺ォ萓晏ュ倥☆繧九h縺・・ス・ス縲梧£荵・・ス・ス縺ェ陬懈ュ」縲阪r蜀・・ス・ス縺ォ繧ュ繝」繝・・ス・ス繝・縺吶k

microFX 縺ッ縺ゅ¥縺セ縺ァ縲檎エ皮イ九↑隕冶ヲ壼柑譫懊Ξ繧、繝、縲阪〒縺ゅj縲・ 讒矩€繝・・スE繧ソ繧・・ス・ス諷具ソスE遘サ繝ュ繧ク繝・・ス・ス縺ォ縺ッ莉具ソスE縺励↑縺・・ス・スE


7 諡。蠑オ繝サ莠呈鋤諤ァ・スE・スEiewer・スE・スschema 縺ョ螟牙喧縺ク縺ョ霑ス蠕難シ・

7.1 viewer 縺ョ諡。蠑オ譁ケ驥晢シ亥渕譛ャ蜴溷援・スE・スE

viewer 縺ッ 3DSS 縺ォ蟇セ縺励※縲√▽縺ュ縺ォ谺。縺ョ蜴溷援繧貞ョ医k縲・

  1. *讒矩€繝・・スE繧ソ縺ッ邨カ蟇セ縺ォ螟画峩縺励↑縺・・ス・スEtrict read-only・スE・スE

    • .3dss.json 縺ッ AJV 縺ォ繧医k strict validation 繧帝€夐℃縺励◆蠕後€・ core.data / core.document3dss 縺ィ縺励※ deep-freeze 縺輔l繧九€・
    • runtime / renderer / UI 縺ョ縺・・ス・ス縺ェ繧句ア、繧ゅ€√%縺ョ讒矩€繧・mutate 縺励※縺ッ縺ェ繧峨↑縺・・ス・スE
  2. *繧ケ繧ュ繝シ繝樊コ匁侠繧呈怙蜆ェ蜈医@縲∝ッ帛ョケ繝「繝シ繝峨r謖√◆縺ェ縺・

    • 謗。逕ィ荳ュ縺ョ 3DSS.schema.json 縺ォ蜷茨ソスE縺励↑縺・・ス・ス繧。繧、繝ォ縺ッ隱ュ縺ソ霎シ縺ソ繧ィ繝ゥ繝シ縺ィ縺吶k縲・
    • additionalProperties:false 蜑肴署縺ァ驕狗畑縺励€∵悴遏・繝励Ο繝代ユ繧」縺ョ鮟呵ェ搾ソスE陦後o縺ェ縺・・ス・スE
  3. *窶懃炊隗」縺ッ縺励↑縺上※繧ゅh縺・・ス・ス縲∝」翫@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

    • viewer 縺瑚。ィ遉コ繧・UI 縺ォ菴ソ繧上↑縺・・ス・スE・ス・ス縺ァ縺ゅ▲縺ヲ繧ゅ€∵ァ矩€縺ィ縺励※縺ッ縺晢ソスE縺セ縺セ菫晄戟縺吶k縲・
    • 荳崎ヲ√→隕九↑縺励◆鬆・・ス・ス縺ョ蜑企勁繝サ豁」隕丞喧繝サ陬懷ョ後↑縺ゥ縺ッ荳€蛻・・ス・ス繧上↑縺・・ス・スE ・スE・ス陬懆カウ・スE・ス縺薙%縺ァ縺・・ス・ス縲御ソ晄戟縲阪→縺ッ縲・*繧ケ繧ュ繝シ繝槭〒險ア蜿ッ縺輔l縺ヲ縺・・ス・ス繝輔ぅ繝シ繝ォ繝・*繧・ viewer 縺悟茜逕ィ縺励↑縺上※繧らエ譽・・スE豁」隕丞喧縺励↑縺・・ス・ス縺ィ縺・・ス・ス諢丞袖縺ァ縺ゅk縲・ 繧ケ繧ュ繝シ繝槫、夜・・ス・ス縺ッ strict validation 縺ォ繧医j隱ュ霎シ諡貞凄縺吶k縲・
  4. *諡。蠑オ縺ョ菴吝慍縺ッ UI・スE・ス謠冗判陬懷勧縺ョ縺ソ縺ォ髯仙ョ壹☆繧・

    • microFX繝サHUD繝サgizmo 縺ェ縺ゥ縲∫エ皮イ九↓謠冗判繝ャ繧、繝、縺ォ髢峨§縺滓ゥ滂ソスE縺ョ縺ソ霑ス蜉蜿ッ閭ス縲・
    • 讒矩€繝・・スE繧ソ縺ォ蠖ア髻ソ縺吶k諡。蠑オ・スE・ス菫晏ュ假ソスE邱ィ髮・・スE繝槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ遲会シ会ソスE蜈ィ縺ヲ遖∵ュ「縲・

7.2 繧ケ繧ュ繝シ繝橸ソスE蟆・・ス・ス諡。蠑オ縺ク縺ョ蟇セ蠢・

3DSS 繧ケ繧ュ繝シ繝橸ソスE SemVer・スE・スEMAJOR.MINOR.PATCH`・スE・ス縺ォ蠕薙▲縺ヲ譖エ譁ー縺輔l繧九€・ viewer 縺ッ **隱ュ縺ソ蜿悶j蟆ら畑繧ッ繝ゥ繧、繧「繝ウ繝・*縺ィ縺励※縲√%繧後↓縺薙≧霑ス蠕薙☆繧九€・

7.2.1 SemVer 縺ィ validator

  • 繧ケ繧ュ繝シ繝槭ヵ繧。繧、繝ォ縺ッ蟶ク縺ォ蜊倅ク€縺ョ 3DSS.schema.json 繧・canonical 縺ィ縺吶k縲・
  • viewer 縺ッ襍キ蜍墓凾縺ォ縺難ソスE schema 繧・AJV 縺ク隱ュ縺ソ霎シ縺ソ縲《trict 繝「繝シ繝峨〒 validator 繧呈ァ具ソスE縺吶k縲・
    • removeAdditional = false
    • useDefaults = false
    • coerceTypes = false
    • allErrors = true
    • strict 邉サ繧ェ繝励す繝ァ繝ウ縺ッ隴ヲ蜻翫〒縺ッ縺ェ縺上お繝ゥ繝シ縺ィ縺励※謇ア縺・・ス・スE
  • 蜈・蜉・.3dss.json 縺ョ
    • document_meta.version・スE・スEDSS 繝峨く繝・繝。繝ウ繝茨ソスE繝撰ソスE繧ク繝ァ繝ウ・スE・スE
    • schema 蛛エ $id / $defs 遲・ 繧貞盾辣ァ縺励€・*major 繝撰ソスE繧ク繝ァ繝ウ縺・schema 縺ィ荳€閾エ縺励※縺・・ス・ス縺薙→**繧堤「コ隱阪☆繧九€・

7.2.2 minor / patch 縺ァ縺ョ霑ス蜉繝サ螟画峩

MAJOR 縺御ク€閾エ縺励€~MINOR/PATCH` 縺ョ蟾ョ蛻・・ス・ス schema 蛛エ縺ァ蜷ク蜿主庄閭ス縺ェ蝣エ蜷茨シ・

  • viewer 縺梧眠縺励> schema 縺ォ霑ス蠕捺ク医∩縺ョ蝣エ蜷・
    • 譁ー隕擾ソスE繝ュ繝代ユ繧」繝サenum 蛟、繝サ$defs 縺ェ縺ゥ縺ッ縲∵ァ矩€縺ィ縺励※縺晢ソスE縺セ縺セ deep-freeze 縺励※菫晄戟縺吶k縲・
    • viewer 縺後∪縺諢丞袖繧堤炊隗」縺励※縺・・ス・ス縺・・ス・スE・ス・ス縺ッ
      • UI 縺ォ蜃コ縺輔↑縺・・ス・ス繧ゅ@縺上・縲罫aw JSON縲阪→縺励※陬懷勧陦ィ遉コ縺吶k縺ォ逡吶a繧九€・
      • 蛟、縺ョ螟画鋤繧・・ス・ス螳鯉ソスE陦後o縺ェ縺・・ス・スE
  • viewer 縺悟商縺・schema 縺ョ縺セ縺セ縺ョ蝣エ蜷・
    • additionalProperties:false 縺ォ繧医j譛ェ遏・繝励Ο繝代ユ繧」縺ッ validation NG 縺ィ縺ェ繧九€・
    • 縺難ソスE蝣エ蜷医€」iewer 縺ッ繝輔ぃ繧、繝ォ蜈ィ菴難ソスE隱ュ縺ソ霎シ縺ソ繧呈拠蜷ヲ縺励€・ modeler 繧・schema 譖エ譁ー蛛エ縺ョ蟇セ蠢懊r蠕・・ス・ス縲・

窶サ縲悟商縺・viewer 縺梧眠縺励> schema 繧堤キゥ縺丞女縺托ソスE繧後k縲肴嫌蜍包ソスE謗。逕ィ縺励↑縺・・ス・スE

7.2.3 major 繝撰ソスE繧ク繝ァ繝ウ縺ョ髱樔コ呈鋤螟画峩

  • major 荳堺ク€閾エ = 隱ュ霎シ荳榊庄 縺ィ縺吶k縲・
    • 萓具シ嘖chema 2.x 縺ォ蟇セ縺励※ 1.x 縺ョ繝輔ぃ繧、繝ォ縲√b縺励¥縺ッ縺晢ソスE騾・・ス・スE
  • viewer 縺瑚。後▲縺ヲ繧医>縺ョ縺ッ縲」alidation 繧ィ繝ゥ繝シ縺ィ縺励※蝣ア蜻翫☆繧九→縺薙m縺セ縺ァ縲・
  • **繝槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ繝サ閾ェ蜍募、画鋤繝サ謗ィ貂ャ陬懷ョ・*縺ッ荳€蛻・・ス・ス豁「縲・
    • 驕主悉 竊・迴セ陦後€∵悴譚・ 竊・迴セ陦・縺・・ス・ス繧鯉ソスE譁ケ蜷代b蜷梧ァ倥€・
  • 縲悟ッ帛ョケ繝「繝シ繝峨€阪€鯉ソスE蜍輔い繝・・スE繧ー繝ャ繝シ繝峨€阪↑縺ゥ縺ッ
    modeler 繧・・ス・ス逕ィ螟画鋤繝・・スE繝ォ縺ョ雋ャ莉サ遽・・ス・ス縺ィ縺吶k縲・

7.3 aux.extension 縺ョ謇ア縺・

aux.extension 縺ッ縲∵ァ矩€繝・・スE繧ソ蛛エ縺ョ諡。蠑オ逕ィ繝輔ャ繧ッ縺ァ縺ゅj縲」iewer 縺ッ谺。縺ョ繧医≧縺ォ謇ア縺・・ス・スE

7.3.1 extension 縺ョ蟄伜惠縺ッ險ア螳ケ縺吶k

  • internal state・スE・スEore.data・スE・ス縺ォ縺ッ 縺晢ソスE縺セ縺セ菫晄戟 縺吶k・スE・スEeep-freeze 蟇セ雎。・スE・ス縲・
  • viewer 縺檎炊隗」縺ァ縺阪k譛€蟆丞腰菴搾シ井セ具シ壻ス咲スョ繝サ繝吶け繝医Ν繝サ濶イ縺ェ縺ゥ・スE・ス・スE縺ソ謠冗判縺ォ蛻ゥ逕ィ縺励※繧医>縲・
  • extension 蜀・・スE諢丞袖隲悶↓縺、縺・・ス・ス
    • 閾ェ蜍戊」懷ョ鯉ソスE謗ィ隲也函謌撰ソスE遖∵ュ「縲・
    • 縲瑚カウ繧翫↑縺・・ス・ス蝣ア繧・AI 縺ァ蝓九a繧九€阪↑縺ゥ繧らヲ∵ュ「縲・

7.3.2 extension 蟆ら畑 UI 縺ッ莉サ諢擾シ磯夢隕ァ髯仙ョ夲シ・

  • 險ア縺輔l繧具ソスE縺ッ莉・荳具ソスE繧医≧縺ェ 髢イ隕ァ陬懷勧 UI 縺ォ髯舌i繧後k・スE・スE
    • extension 縺ョ逕・JSON 繧定。ィ遉コ縺吶k繧、繝ウ繧ケ繝壹け繧ソ
    • extension 縺ョ荳€驛ィ繝輔ぅ繝シ繝ォ繝峨r繝ゥ繝吶Ν繧・tooltip 縺ォ陦ィ遉コ
  • extension 繧堤キィ髮・・スE菫晏ュ倥☆繧・UI・スE・ス霑ス蜉 / 蜑企勁 / 譖エ譁ー・スE・ス・スE viewer 縺九i縺ッ謠蝉セ帙@縺ェ縺・・ス・スE 縺薙l繧会ソスE modeler 縺セ縺滂ソスE蛻・繝・・スE繝ォ縺ョ雋ャ蜍吶→縺吶k縲・

7.4 蜑肴婿莠呈鋤諤ァ・スE・ス譛ェ譚・繝撰ソスE繧ク繝ァ繝ウ・スE・スE

譛ェ譚・縺ョ schema 縺ォ蜷医o縺帙※菴懊i繧後◆ .3dss.json 縺ォ縺、縺・・ス・ス・スE・スE

  • 迴セ蝨ィ謗。逕ィ荳ュ縺ョ 3DSS.schema.json 縺ォ縺ェ縺・・ス・スE・ス・ス 竊・additionalProperties:false 縺ォ繧医j NG縲・
  • $defs 縺ェ縺ゥ縺ォ譛ェ遏・縺ョ螳夂セゥ縺悟性縺セ繧後※縺・・ス・ス繧ょ酔讒倥↓ NG縲・
  • 縲梧悴譚・繝撰ソスE繧ク繝ァ繝ウ繧堤キゥ縺剰ェュ縺ソ霎シ繧€縲阪%縺ィ縺ッ縺励↑縺・・ス・スE

縺薙%縺ァ縺・・ス・ス viewer 縺ィ縺ッ縲∵悽逡ェ蛻ゥ逕ィ繧呈Φ螳壹@縺・runtime/*・スE・スEore / hub / renderer・スE・ス縺ァ縺ゅj縲・ 髢狗匱閠・・ス・ス縺托ソスE螳滄ィ薙Ο繝シ繝€繧・・ス・ス繝舌ャ繧ャ・スE・スEev-only 繝・・スE繝ォ・スE・ス・スE縺難ソスE髯舌j縺ァ縺ッ縺ェ縺・・ス・スE 縺昴l繧・dev 逕ィ繝・・スE繝ォ縺ッ viewer 莉墓ァ假ソスE蟇セ雎。螟悶→縺吶k縲・

7.5 蠕梧婿莠呈鋤諤ァ・スE・ス驕主悉繝撰ソスE繧ク繝ァ繝ウ・スE・スE

蜿、縺・3DSS 繝輔ぃ繧、繝ォ縺ォ縺、縺・・ス・ス・スE・スE

  • 蠢・・ス・ス鬆・・ス・ス荳崎カウ 竊・required 縺ァ NG・スE・スEiewer 縺瑚」懷ョ後@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・ス縲・
  • 蝙倶ク堺ク€閾エ 竊・NG・スE・ス謨ー蛟、繧呈枚蟄暦ソスE縺ィ縺励※邱ゥ蜥後☆繧九↑縺ゥ縺ッ NG・スE・ス縲・
  • 蜿、縺・・ス・ス騾 竊・NG・スE・ス莠呈鋤繝ャ繧、繝、縺ッ謖√◆縺ェ縺・・ス・ス縲・
  • viewer 縺檎峡閾ェ縺ォ譌ァ繝撰ソスE繧ク繝ァ繝ウ繧貞、画鋤繝サ陬應ソョ縺吶k縺薙→縺ッ遖∵ュ「縲・

驕主悉繝撰ソスE繧ク繝ァ繝ウ縺九i迴セ陦後ヰ繝シ繧ク繝ァ繝ウ縺ク縺ョ遘サ陦鯉ソスE縲・ modeler / 蟆ら畑螟画鋤繧ケ繧ッ繝ェ繝励ヨ / 莠コ髢難ソスE菴懈・ュ遽・・ス・ス縺ァ縺ゅj縲」iewer 縺ョ蠖ケ蜑イ螟悶→縺吶k縲・

7.6 viewer 蛛エ縺ョ險ア螳ケ縺輔l繧区僑蠑オ

viewer 縺梧僑蠑オ縺励※繧医>縺ョ縺ッ UI 繝ャ繧、繝、縺ィ謠冗判陬懷勧繝ャ繧、繝、縺ョ縺ソ縲・

險ア螳ケ縺輔l繧区僑蠑オ萓・

  • 繝・・スE繝橸ソスE譖ソ・スE・ス繝ゥ繧、繝・/ 繝€繝シ繧ッ縺ェ縺ゥ・スE・スE
  • HUD 隕∫エ
    • 霆ク繝サ繧ー繝ェ繝・・ス・ス蠑キ隱ソ
    • 蜃。萓具ソスE繧ケ繧ア繝シ繝ォ繝撰ソスE
    • 繝「繝シ繝会ソスE繝輔Ξ繝シ繝繝サ繝輔ぅ繝ォ繧ソ迥カ諷具ソスE陦ィ遉コ
  • 繧ォ繝。繝ゥ謫堺ス懶ソスE謾ケ蝟・
    • ease 莉倥″ orbit / pan / zoom
    • 隕也せ繝励Μ繧サ繝・・ス・ス・スE・スEront / side / top / iso 遲会シ・
  • microFX 邉サ縺ョ隕冶ヲ夊」懷勧
    • focus 蜻ィ霎コ縺ョ glow / bounds / axes 陦ィ遉コ縺ェ縺ゥ
  • 陦ィ遉コ譛€驕ゥ蛹・
    • instancing / caching / LOD 縺ェ縺ゥ縲∵ァ矩€荳榊、会ソスE遽・・ス・ス縺ァ縺ョ譛€驕ゥ蛹・

縺・・ス・ス繧後b *3DSS 縺ョ讒矩€・スE・スEoints / lines / aux / document_meta・スE・ス繧呈嶌縺肴鋤縺医↑縺・
縺ィ縺・・ス・ス譚。莉カ繧呈コ€縺溘☆髯舌j縲・ソスE逕ア縺ォ諡。蠑オ縺励※繧医>縲・

7.7 遖∵ュ「縺輔l繧区僑蠑オ

viewer 縺ォ蟇セ縺励※縲∵ャ。縺ョ繧医≧縺ェ諡。蠑オ繧定ソス蜉縺励※縺ッ縺ェ繧峨↑縺・・ス・スE

  1. 讒矩€繝・・スE繧ソ縺ョ邱ィ髮・・ス・ス・スE
    • 鬆・・ス・ス縺ョ霑ス蜉繝サ譖エ譁ー繝サ蜑企勁
    • Undo / Redo
    • annotation / comment / note 縺ェ縺ゥ邱ィ髮・・ス・ス蠢オ
  2. 讒矩€繝・・スE繧ソ縺ョ菫ョ蠕ゥ繝サ陬懷ョ鯉ソスE繝槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ
    • 谺謳榊€、縺ョ謗ィ貂ャ蝓九a
    • 譛ェ譚・繧ケ繧ュ繝シ繝樣・・ス・ス縺ョ謗ィ貂ャ逕滂ソスE
    • 縲計iewer 迢ャ閾ェ蠖「蠑上€阪∈縺ョ菫晏ュ・
  3. AI 陬懷ョ鯉ソスE螟画鋤
    • 諢丞袖隲悶↓蝓コ縺・縺擾ソスE蜍募、画鋤繝サ隕∫エ・・スE蜀搾ソスE鄂ョ
    • extension 縺ョ蜀・・ス・ス繧・AI 縺ァ閾ェ蜍戊」懷ョ・
  4. viewerSettings 縺ョ豌ク邯壼喧
    • viewerSettings 繧・JSON 縺ィ縺励※菫晏ュ倥@縲・ソスE隱ュ縺ソ霎シ縺ソ縺吶k縺薙→・スE・ス隧ウ邏ー縺ッ 5.x 蜿ゑソスE・スE・ス縲・
    • v1 縺ァ縺ッ UI 迥カ諷具ソスE繧サ繝・・ス・ス繝ァ繝ウ蜀・・スE荳€譎ら憾諷九↓髯仙ョ壹☆繧九€・
  5. 繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス / export 讖滂ソスE縺ョ蜀・・ス・ス
    • glTF / SVG / CSV 縺ェ縺ゥ縺ク縺ョ讒矩€ export 繧・viewer runtime 縺ォ逶エ謗・謖√◆縺帙k縺薙→縲・
    • Canvas 縺ョ繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス蜿門セ・API 繧・viewer 縺ョ豁」蠑乗ゥ滂ソスE縺ィ縺励※謠蝉セ帙☆繧九%縺ィ縲・ ・スE・ス蠢・・ス・ス縺ェ繧・host 蛛エ縺後ヶ繝ゥ繧ヲ繧カ讓呎コ匁ゥ滂ソスE繧・・ス・ス驛ィ繝・・スE繝ォ縺ァ蜿門セ励☆繧九€ゑシ・

縺薙l繧会ソスE遖∵ュ「莠矩・・ス・ス縺励※譏守、コ縺励€」iewer 縺ッ 邏秘夢隕ァ繧「繝励Μ 縺ァ縺ゅk縺薙→繧剃ソ晁ィシ縺吶k縲・

7.8 莉墓ァ伜、画峩譎ゑソスE viewer 蛛エ縺ョ蟇セ蠢・

3DSS 繧ケ繧ュ繝シ繝槭d viewer 莉墓ァ倥′譖エ譁ー縺輔l縺溷エ蜷医€」iewer 縺瑚。後≧縺ケ縺榊ッセ蠢懶ソスE莉・荳九↓髯仙ョ壹&繧後k縲・

  1. Validator 縺ョ譖エ譁ー

    • 謗。逕ィ縺吶k 3DSS.schema.json 繧貞キョ縺玲崛縺医€、JV 蛻晄悄蛹悶r譖エ譁ー縺吶k縲・
    • validation 繧ィ繝ゥ繝シ縺ョ繝ュ繧ー繝サ繝。繝・・ス・ス繝シ繧ク蠖「蠑上r蠢・・ス・ス縺ォ蠢懊§縺ヲ隱ソ謨エ縺吶k縲・
  2. 謠冗判繝ュ繧ク繝・・ス・ス縺ョ譛€蟆城剞縺ョ譖エ譁ー

    • appearance / aux.module 縺ェ縺ゥ縲《chema 諡。蠑オ縺ォ蠢懊§縺ヲ renderer 縺ョ隗」驥医r諡。蠑オ縺吶k縲・
    • 譌「蟄假ソスE讒矩€隗」驥医r螢翫&縺ェ縺・・ス・スE・ス・ス縺ァ縺ョ縺ソ螟画峩縺吶k縲・
  3. UI 縺ョ隱ソ謨エ

    • 譁ー縺励> module / signification / tags 縺ェ縺ゥ繧偵ヵ繧」繝ォ繧ソ繝サ蜃。萓九↓霑ス蜉縺吶k縲・
    • 荳崎ヲ√↓縺ェ縺」縺・UI 隕∫エ繧貞炎髯、縺吶k縲・
  4. 讒矩€繝・・スE繧ソ縺ク縺ョ譖ク縺肴綾縺暦ソスE遖∵ュ「

    • 莉墓ァ伜、画峩繧堤炊逕ア縺ォ viewer 蛛エ縺鯉ソスE蜍募、画鋤繧定。後>縲・ 譁ー縺励> .3dss.json 繧呈嶌縺搾ソスE縺吶%縺ィ縺ッ陦後o縺ェ縺・・ス・スE

7.9 諡。蠑オ繝サ莠呈鋤諤ァ縺ォ髢「縺吶k遖∵ュ「莠矩・・ス・ス邨ア蜷茨シ・

譛ャ遶縺ョ蜀・・ス・ス繧偵∪縺ィ繧√k縺ィ縲」iewer 縺ッ谺。繧偵@縺ヲ縺ッ縺ェ繧峨↑縺・・ス・スE

  1. 謗。逕ィ荳ュ縺ョ 3DSS.schema.json 縺ォ螳夂セゥ縺輔l縺ヲ縺・・ス・ス縺・・ス・スE・ス・ス・スE・ス繧ケ繧ュ繝シ繝槫、夜・・ス・ス・スE・ス・スE隱ュ霎シ繝サ菫晄戟繝サ隗」驥医€・
  2. major 荳堺ク€閾エ縺ョ 3DSS 繝輔ぃ繧、繝ォ繧偵€悟ッ帛ョケ繝「繝シ繝峨€阪〒隱ュ縺ソ霎シ繧€縺薙→縲・
  3. 讒矩€繝・・スE繧ソ縺ョ菫ョ蠕ゥ繝サ閾ェ蜍戊」懷ョ鯉ソスE繝槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ縲・
  4. AI 縺ォ繧医k讒矩€謗ィ貂ャ繝サ霑ス蜉鬆・・ス・ス縺ョ逕滂ソスE縲・
  5. 邱ィ髮・UI・スE・スEdd / update / remove / undo / redo・スE・ス・スE蟆趣ソスE縲・
  6. viewerSettings 繧呈ーク邯壼喧縺励€∵ャ。蝗櫁オキ蜍墓凾縺ォ閾ェ蜍募セゥ蜈・・ス・ス繧九%縺ィ縲・
  7. extension 縺ョ諢丞袖隗」驥茨ソスE讒矩€逕滂ソスE繝サ陬懷ョ鯉シ域ァ矩€螟画峩縺ォ逶ク蠖薙☆繧九b縺ョ・スE・ス縲・
  8. 繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・・ス・ス / export 繧・viewer runtime 縺ョ雋ャ蜍吶→縺励※蜀・・ス・ス縺吶k縺薙→縲・

縺薙l繧峨r遖√§繧九%縺ィ縺ァ縲」iewer 縺ッ *縲茎trict 縺九▽髱樒エ螢翫↑髢イ隕ァ蟆ら畑繧ッ繝ゥ繧、繧「繝ウ繝医€・ 縺ィ縺励※ 髟キ譛溽噪縺ェ莠呈鋤諤ァ繧堤カュ謖√☆繧九€・

7.10 Frame UI 謫堺ス懶ソスE繝ェ繧キ繝シ・スE・ス繝輔Ξ繝シ繝謫堺ス懆ヲ冗ッ・・ス・スE

7.10.1 蝓コ譛ャ譁ケ驥・

  • frame 縺ッ荳€谺。蜈・・スE謨エ謨ー ID 縺ァ邂。逅・・ス・ス繧具シ・frameId: number`・スE・ス縲・
  • frame.range = {min, max} 繧呈コ€縺溘☆ min 竕、 frameId 竕、 max 縺ョ髮「謨」蛟、縺ョ縺ソ繧呈桶縺・・ス・スE
  • viewer 繧ウ繧「・スE・スEcore.frameController`・スE・ス・スE *髮「謨」繧ケ繝・・ス・ス繝・ 縺ィ縺励※ frame 繧堤ョ。逅・・ス・ス縲・ 騾」邯壼€、繧・・ス・ス髢薙・謇ア繧上↑縺・・ス・スE
  • frame 蛻・・ス・ス縺ョ雋ャ蜍呻ソスE
    • 蜈・蜉帶桃菴・竊・activeFrameId 譖エ譁ー
    • 縺昴l縺ォ莨エ縺・visibleSet 蜀崎ィ育ョ・ 縺ォ髯仙ョ壹@縲・D 繧ソ繧、繝繝ゥ繧、繝ウ UI 縺ョ陦ィ迴セ繧・・ス・スE・ス・ス縺ッ UI 螻、縺ォ蟋費ソスE繧九€・

7.10.2 謫堺ス應ス鍋ウサ・スE・スツア1 繧ケ繝・・ス・ス繝嶺クュ蠢・・ス・スE

v1 縺ョ蝓コ譛ャ謫堺ス懶ソスE縲・ツア1 繧ケ繝・・ス・ス繝暦ソスE繝夲ソスE繧ク騾√j* 繧剃クュ蠢・・ス・ス險ュ險医☆繧九€・

  • UI 繝懊ち繝ウ
    • Step Back: prev
    • Step Forward: next
    • Rew/Home: frame.set(range.min)
    • FF: frame.set(range.max)
    • Play: 荳€螳夐俣髫斐〒 next・スE・ス譛ォ蟆セ蛻ー驕疲凾縺ッ range.min 縺ォ繝ォ繝シ繝暦シ・
  • 繧ケ繝ゥ繧、繝€
    • range.min縲彖range.max` 縺ョ謨エ謨ー蛟、縺ョ縺ソ繧貞叙繧九€・
    • input / change 繧、繝吶Φ繝医〒 frame.set(value) 繧貞他縺カ縲・
  • 繧ュ繝シ繝懶ソスE繝会シ域ィ呎コ悶ワ繝ウ繝峨Μ繝ウ繧ー・スE・スE
    • PageUp: next
    • PageDown: prev
    • 縺薙l繧会ソスE KeyboardInput 竊・hub.core.frame.next/hub.core.frame.prev/ 邨檎罰縺ァ蜃ヲ逅・・ス・ス縲・ UI 繝擾ソスE繝阪せ蛛エ縺九i逶エ謗・ frameController 繧定ァヲ繧峨↑縺・・ス・スE

Space 竊・Play/Pause 繝医げ繝ォ縺ェ縺ゥ縲ゞI 蟆ら畑繧キ繝ァ繝シ繝医き繝・・ス・ス縺ッ
viewerDevHarness 蛛エ縺ァ縺ョ縺ソ螳溯」・・ス・ス縺ヲ繧医>・スE・ス譛ャ逡ェ viewer 縺ァ縺ッ莉サ諢擾シ峨€・

7.10.3 mode / microFX 縺ィ縺ョ髢「菫・

  • 蜊倡匱縺ョ frame 遘サ蜍包シ按ア1 step / slider・スE・ス・スE macro / meso / micro 縺・・ス・ス繧鯉ソスE mode 縺九i繧ょョ溯。後@縺ヲ繧医>縲・

    • 縺溘□縺励€’rame 螟画峩蠕鯉ソスE豢セ逕溽憾諷区峩譁ー縺ッ 蠢・・ス・ス core.recomputeVisibleSet() 縺ォ髮・・ス・スE・ス・ス繧九€・ ・スE・スEisibleSet / selection謨エ蜷・/ microState 縺ョ譖エ譁ー/隗」髯、繧貞性繧€・スE・スE
  • *frame 蜀咲函・スE・スElay・スE・ス荳ュ縺ョ蛻カ邏・

    • 蜀咲函髢句ァ区凾縺ォ uiState.mode 繧・"macro" 縺ォ謌サ縺吶€・
    • uiState.runtime.isFramePlaying = true 縺ィ縺励€[icroFX 繧堤┌蜉ケ蛹悶☆繧九€・
    • 蜀咲函荳ュ縺ッ core.recomputeVisibleSet() 縺・ uiState.microState = null 繧剃ソ晁ィシ縺吶k縲・
    • 蜀咲函蛛懈ュ「譎ゅ↓ isFramePlaying = false 縺ィ縺励€∝ソ・・ス・ス縺ェ繧・ core.recomputeVisibleSet() 縺ァ microState 繧抵ソスE隧穂セ。縺吶k縲・

豕ィ險假シ・

  • v1 縺ァ縺ッ meso 縺ッ optional 縺ィ縺励€∝ョ溯」・・ス・ス辟。縺・・ス・ス蜷茨ソスE macro 逶ク蠖難シ・icroFX辟。縺暦シ峨→縺励※謇ア縺」縺ヲ繧医>縲・

7.10.4 camera / filter 縺ィ縺ョ髢「菫・

  • frame 謫堺ス懶ソスE繧ォ繝。繝ゥ state 繧堤峩謗・螟画峩縺励↑縺・・ス・ス・スE蜍輔き繝。繝ゥ縺ッ蟆・・ス・ス諡。蠑オ・スE・ス縲・
  • filter・スE・スEoints/lines/aux・スE・ス螟画峩譎ゅ→蜷梧ァ倥↓縲’rame 螟画峩蠕鯉ソスE
    • visibleSet 繧抵ソスE險育ョ・
    • microFX / selection 繝上う繝ゥ繧、繝医r蠢・・ス・ス縺ォ蠢懊§縺ヲ蜀埼←逕ィ
      縺吶k縺ョ縺ソ縺ィ縺励€∵ァ矩€繝・・スE繧ソ縺ォ縺ッ莉具ソスE縺励↑縺・・ス・スE

7.10.5 髻ウ螢ー繝昴Μ繧キ繝シ

viewer / modeler 縺ィ繧ゅ↓ **UI 蜉ケ譫憺浹縺ッ謗。逕ィ縺励↑縺・*縲・

  • 繧ウ繝ウ繝・・ス・ス繝・・スE・スE・ス蜍慕判繝サ3D 繧「繝九Γ繝シ繧キ繝ァ繝ウ遲会シ峨′迢ャ閾ェ縺ォ魑エ繧峨☆髻ウ縺ッ萓句、悶€・
  • viewer UI 縺ョ謫堺ス懶シ・rame 遘サ蜍包ソスE蜀咲函繝懊ち繝ウ繝サgizmo 遲会シ会ソスE螳鯉ソスE繧オ繧、繝ャ繝ウ繝医→縺吶k縲・
  • 險ュ螳夂判髱「縺ォ繧ゅ€郡ound縲阪€郡FX縲阪↑縺ゥ縺ョ鬆・・ス・ス縺ッ霑ス蜉縺励↑縺・・ス・スE

7.11 microFX 窶・繝溘け繝ュ隕冶ヲ夊」懷勧繧「繝ォ繧エ繝ェ繧コ繝・スE・スEiewer 蟆ら畑・スE・スE

7.11.0 讎りヲ√→繝「繧ク繝・繝シ繝ォ讒矩€

microFX 縺ッ縲梧ァ矩€繝・・スE繧ソ繧剃ク€蛻・・ス・ス譖エ縺帙★縲[icro / meso 繝「繝シ繝画凾縺ョ螻€謇€讒矩€繧・ 隱ュ縺ソ蜿悶j繧・・ス・ス縺上☆繧九◆繧・ソスE隕冶ヲ夊」懷勧縲搾ソスE邱冗ァー縺ィ縺吶k縲・

蜀・・ス・ス逧・・ス・ス縺ッ谺。縺ョ 3 繝ャ繧、繝、縺ォ蛻・・ス・ス繧後k縲・

  1. *microState・スE・スEore.microController・スE・スE
    • selection / cameraState / structIndex 縺ェ縺ゥ縺九i縲・ 繝輔か繝シ繧ォ繧ケ UUID繝サ蜴溽せ蠎ァ讓呻ソスE螻€謇€繝舌え繝ウ繝・・ス・ス繝ウ繧ー縺ェ縺ゥ繧定ィ育ョ励☆繧九€・
    • three.js 縺ョ Object3D 縺ォ縺ッ萓晏ュ倥@縺ェ縺・・ス・ス繝峨Γ繧、繝ウ螻、縲・
  2. microFX-core
    • visibleSet 繧貞燕謠舌↓縲√ヵ繧ゥ繝シ繧ォ繧ケ蜴溽せ縺九i縺ョ霍晞屬繝サ謗・邯夐未菫ゅ↑縺ゥ繧定ゥ穂セ。縺励€・ 縲後←縺ョ uuid 繧偵←縺ョ遞句コヲ蠑キ隱ソ / 貂幄。ー縺吶k縺九€阪r豎コ螳壹☆繧九€・
    • opacity繝サcolor 縺ェ縺ゥ縺ク縺ョ蠖ア髻ソ蠎ヲ・スE・ス菫よ焚・スE・ス繧堤ョ暦ソスE縺吶k縲・
  3. *microFX-overlays・スE・スEenderer 蛛エ・スE・スE
    • microState 縺ィ microFX-core 縺ョ邨先棡繧貞女縺大叙繧翫€・ three.js 繧キ繝シ繝ウ蜀・・ス・ス glow / bounds / axes / highlight 縺ェ縺ゥ縺ョ
      陬懷勧繧ェ繝悶ず繧ァ繧ッ繝医r霑ス蜉繝サ譖エ譁ー繝サ蜑企勁縺吶k縲・

7.11.1 microState 縺ョ蠖「蠑・

microState 縺ッ MicroFXPayload 縺ィ蜻シ縺カ蜀・・ス・ス繧ェ繝悶ず繧ァ繧ッ繝医〒縲∵ヲゑソスE谺。縺ョ蠖「繧偵→繧九€・

type MicroFXPayload = {
  focusUuid: string;                      // 繝輔か繝シ繧ォ繧ケ蟇セ雎。縺ョ UUID
  kind: "points" | "lines" | "aux" | null;
  focusPosition: [number, number, number];// 繝橸ソスE繧ォ繝シ遲会ソスE蝓コ貅紋ス咲スョ・スE・スEorld 蠎ァ讓呻シ・
  relatedUuids: string[];                 // 1hop 謗・邯壹↑縺ゥ縲・・ス・ス騾」 UUID 鄒、
  localBounds: {
    center: [number, number, number];
    size:   [number, number, number];
  } | null;
};
  • core.microController 縺ッ selection / structIndex / cameraState 繧偵b縺ィ縺ォ
    豈弱ヵ繝ャ繝シ繝縺ァ縺ッ縺ェ縺上€∝ソ・・ス・ス縺ェ縺ィ縺阪□縺・MicroFXPayload | null 繧呈峩譁ー縺吶k縲・
  • uiState.microState 縺ォ縺難ソスE payload 縺御ソ晄戟縺輔l縲」iewerHub 竊・renderer 縺ォ莨晞#縺輔l繧九€・

7.11.2 驕ゥ逕ィ譚。莉カ・スE・スEode繝サ繝ゥ繝ウ繧ソ繧、繝迥カ諷具シ・

microFX 縺ッ谺。縺ョ譚。莉カ繧偵☆縺ケ縺ヲ貅€縺溘☆縺ィ縺搾ソスE縺ソ譛牙柑縺ィ縺ェ繧九€・

  1. uiState.mode === "micro"
    • mode 縺ョ螳夂セゥ繝サ驕キ遘サ譚。莉カ縺ッ隨ャ 4.6 遽€・スE・ス繧ォ繝。繝ゥ繝「繝シ繝会シ峨r蜿ゑソスE縲・
  2. uiState.viewerSettings.fx.micro.enabled === true
  3. uiState.runtime.isFramePlaying === false
  4. uiState.runtime.isCameraAuto === false・スE・ス蟆・・ス・ス縺ョ閾ェ蜍輔き繝。繝ゥ逕ィ繝輔Λ繧ー・スE・スE

縺・・ス・ス繧後°縺梧コ€縺溘&繧後↑縺・・ス・ス蜷医€〉enderer 縺ッ

  • applyMicroFX(null) 逶ク蠖難ソスE蜃ヲ逅・・ス・ス陦後>縲・
  • visibleSet 蜀・・スE蜈ィ隕∫エ縺ョ謠冗判螻樊€ァ繧・baseStyle・スE・ス讒矩€縺ォ蝓コ縺・縺上ョ繝輔か繝ォ繝茨シ峨∈謌サ縺吶€・

7.11.3 microFX-overlays・スE・スEarker / glow / axes / bounds / highlight・スE・スE

microFX-overlays 縺ッ縲[icroState 繧抵ソスE縺ォ three.js 繧キ繝シ繝ウ蜀・・ス・ス霑ス蜉縺輔l繧・ 陬懷勧繧ェ繝悶ず繧ァ繧ッ繝育セ、縺ョ邱冗ァー縺ィ縺吶k縲・

v1 縺ァ縺ッ谺。縺ョ繝「繧ク繝・繝シ繝ォ繧呈Φ螳壹☆繧九€・

  • marker
    • focusPosition 繧貞渕貅悶↓縲∝ー上&縺ェ繝橸ソスE繧ォ繝シ・スE・ス繧「繧、繧ウ繝ウ・スE・ス繧定。ィ遉コ縺吶k縲・
  • glow
    • 繝輔か繝シ繧ォ繧ケ隕∫エ縺ョ蜻ィ霎コ縺ォ逅・・ス・ス / 繝√Η繝シ繝也憾縺ョ繝上Ο繝シ繧帝㍾縺ュ繧九€・
  • axes
    • microFocus 蜻ィ霎コ縺ォ螻€謇€蠎ァ讓呵サク・スE・スE/Y/Z・スE・ス繧定。ィ遉コ縺吶k縲・
  • bounds
    • localBounds 縺ォ蝓コ縺・縺丞ア€謇€ bounding box 繧定。ィ遉コ縺吶k縲・
  • highlight
    • 繝輔か繝シ繧ォ繧ケ隕∫エ縺ォ豐ソ縺」縺溘が繝シ繝撰ソスE繝ャ繧、邱壹r謠冗判縺吶k縲・

蜈ア騾壹Ν繝シ繝ォ・スE・スE

  • 縺・・ス・ス繧後b struct・スE・スEDSS・スE・ス縺ォ縺ッ荳€蛻・・ス・ス繧後★縲》hree.js 縺ョ Object3D 霑ス蜉繝サ蜑企勁縺ィ
    material・スE・スEolor / opacity / transparent 遲会シ会ソスE螟画峩縺ョ縺ソ縺ァ螳溯」・・ス・ス繧九€・
  • macro 繝「繝シ繝峨〒縺ッ microFX-overlays 縺ッ蟶ク縺ォ辟。蜉ケ・スE・スE.11.7 蜿ゑソスE・スE・ス縲・

v1 縺ァ縺ッ *highlight 繧貞ソ・・ス・スE 縺ィ縺励€√◎縺ョ莉厄ソスE繝「繧ク繝・繝シ繝ォ縺ッ optional 縺ィ縺吶k縲・

7.11.4 霍晞屬繝輔ぉ繝シ繝峨→謗・邯壼シキ隱ソ

microFX-core 縺ッ縲√ヵ繧ゥ繝シ繧ォ繧ケ蜴溽せ縺ィ縺ョ霍晞屬縺ィ謗・邯夐未菫ゅ↓蝓コ縺・縺・ 蜷・・ス・ス邏縺ョ謠冗判蠑キ蠎ヲ繧呈アコ繧√k縲・

  1. *霍晞屬繝輔ぉ繝シ繝・

    • 莉サ諢剰ヲ∫エ u 縺ォ蟇セ縺励€√◎縺ョ莉」陦ィ菴咲スョ p(u) 縺ィ focusPosition 縺ィ縺ョ霍晞屬 d 繧定ィ育ョ励☆繧九€・
    • 霍晞屬 d 縺ォ蝓コ縺・縺・・ス・ス 0縲・ 縺ョ繝輔ぉ繝シ繝我ソよ焚 fade(d) 繧貞ョ夂セゥ縺吶k縲・
    • 萓具シ・
      • d 竕、 R1 竊・fade = 1.0・スE・ス螳鯉ソスE荳埼€擾ソスE・スE・スE
      • d 竕・ R2 竊・fade = minOpacity・スE・ス驕譁ケ縺ッ阮・・ス・ス・スE・スE
      • R1 < d < R2 竊・邱壼ス「陬憺俣縲√b縺励¥縺ッ ease 莉倥″繧ォ繝シ繝・
  2. *謗・邯壼シキ隱ソ・スE・スE hop 蜻ィ霎コ・スE・スE

    • 繝輔か繝シ繧ォ繧ケ縺・point 縺ョ蝣エ蜷茨シ・
      • 縺晢ソスE point 繧堤ォッ轤ケ縺ォ謖√▽ line 繧・1hop line 縺ィ縺吶k縲・
      • 縺昴l繧会ソスE line 縺ョ繧ゅ≧荳€譁ケ縺ョ遶ッ轤ケ point 繧・1hop point 縺ィ縺吶k縲・
    • 繝輔か繝シ繧ォ繧ケ縺・line 縺ョ蝣エ蜷茨シ・
      • 縺晢ソスE line 縺ョ遶ッ轤ケ point 繧・1hop point 縺ィ縺吶k縲・
      • 縺薙l繧峨→縺、縺ェ縺後k line 繧・1hop line 縺ィ縺吶k縲・
    • 1hop 隕∫エ縺ッ霍晞屬繝輔ぉ繝シ繝峨↓蜉縺医※縲∝刈轤ケ・スE・ス・スE繧九&蠅励@繝サ螟ェ縺募「励@縺ェ縺ゥ・スE・ス縺ァ蠑キ隱ソ縺励※繧医>縲・

蜈キ菴鍋噪縺ェ菫よ焚繧・・ス・ス繝シ繝厄ソスE renderer/microFX/config.js 縺ォ髮・・ス・スE・ス・ス縲・ 謨ー蛟、繝√Η繝シ繝九Φ繧ー縺ッ縺晢ソスE繝輔ぃ繧、繝ォ縺ョ縺ソ繧貞、画峩縺吶l縺ー繧医>險ュ險医→縺吶k縲・

7.11.5 繝代ヵ繧ゥ繝シ繝槭Φ繧ケ縺ィ繧ケ繧ウ繝シ繝・

  • microFX 縺ッ 蟶ク縺ォ visibleSet 蜀・・スE隕∫エ縺ョ縺ソ 繧貞ッセ雎。縺ィ縺吶k縲・
    • 髱櫁。ィ遉コ隕∫エ縺ォ蟇セ縺励※霍晞屬險育ョ励d overlay 繧定。後o縺ェ縺・・ス・スE
  • 螟ァ隕乗ィ。繝・・スE繧ソ縺ォ蟇セ縺励※繧らエ邯サ縺励↑縺・・ス・ス縺・・ス・スE
    • per-frame 縺ァ縺ョ螟ァ驥・new 繧帝∩縺代k・スE・ス・スE蛻暦ソスE蛻ゥ逕ィ縺ェ縺ゥ・スE・ス縲・
    • 繧ェ繝シ繝撰ソスE繝ャ繧、逕ィ Object3D 縺ョ蜀榊茜逕ィ・スE・スEensure*` 繝代ち繝シ繝ウ・スE・ス繧貞渕譛ャ縺ィ縺吶k縲・
  • frame / filter 螟画峩譎ゑソスE縺ソ蜀崎ゥ穂セ。縺励€√き繝。繝ゥ縺ョ蠕ョ蟆冗ァサ蜍輔#縺ィ縺ォ
    蜈ィ菴薙r蜀崎ィ育ョ励@縺ェ縺・・ス・ス縺・・ス・ス螳溯」・・ス・ス縺ヲ繧医>・スE・ス霑台シシ縺ョ遽・・ス・ス縺ァ・スE・ス縲・

7.11.6 renderer 縺ィ縺ョ繧、繝ウ繧ソ繝輔ぉ繝シ繧ケ

renderer 蛛エ縺ョ microFX 髢「騾」 API 縺ッ谺。縺ョ繧医≧縺ェ譛€蟆上う繝ウ繧ソ繝輔ぉ繝シ繧ケ縺ィ縺吶k縲・

  • applyMicroFX(microState: MicroFXPayload | null): void
    • null 縺ョ蝣エ蜷茨シ夲ソスE繧ェ繝シ繝撰ソスE繝ャ繧、繧貞炎髯、縺励€|aseStyle 縺ォ謌サ縺吶€・
    • payload 縺後≠繧句エ蜷茨シ・
      • microFX-overlays 繧・ensure*/update*/remove* 縺ァ譖エ譁ー縲・
      • 蟇セ雎。隕∫エ縺ョ material 繧偵ヵ繧ァ繝シ繝我ソよ焚縺ォ蠢懊§縺ヲ螟画峩縲・
  • renderer 縺ッ microState 縺ョ繝輔ぅ繝シ繝ォ繝峨r *隱ュ縺ソ蜿悶k縺縺・ 縺ァ繧医>縲・ struct 縺ォ譖ク縺肴綾縺吶%縺ィ繧・・ス・スmicroState 繧・mutate 縺吶k縺薙→縺ッ遖∵ュ「縲・

7.11.7 mode繝サ莉匁ゥ滂ソスE縺ィ縺ョ逶ク莠剃ス懃畑

  • *macro 繝「繝シ繝・

    • microFX 縺ッ蟶ク縺ォ辟。蜉ケ・スE・スEenderer 縺ッ applyMicroFX(null) 縺ョ迥カ諷九r菫昴▽・スE・ス縲・
    • 螻€謇€蠑キ隱ソ縺ッ 7.12 遽€縺ョ selection 繝上う繝ゥ繧、繝医↓蟋費ソスE繧九€・
  • *meso 繝「繝シ繝会シ・ptional・スE・スE

    • v1 縺ァ縺ッ meso 縺ッ **螳溯」・・ス・ス縺ェ縺上※繧医>**縲・
    • 螳溯」・・ス・ス縺ェ縺・・ス・ス蜷医€[eso 縺ッ macro 縺ィ蜷檎ュ会ソスE隕九∴譁ケ ・スE・スEicroFX 辟。縺・/ microState = null・スE・ス縺ァ蝠城。後↑縺・・ス・スE
    • meso 繧貞ョ溯」・・ス・ス繧句エ蜷茨ソスE縺ソ縲[eso 蟆ら畑縺ョ microState 繧貞ー趣ソスE縺励※繧医>縲・
  • frame 蜀咲函

    • 蜀咲函髢句ァ区凾縺ォ uiState.mode = "macro" 縺ィ縺励€[icroState 繧偵け繝ェ繧「縺吶k縲・
    • 蜀咲函荳ュ縺ォ microFX 縺鯉ソスE蠎ヲ譛牙柑蛹悶&繧後↑縺・・ス・ス縺ィ繧・ uiState.runtime.isFramePlaying 縺ィ core.recomputeVisibleSet() 縺ァ菫晁ィシ縺吶k縲・
  • filter 蛻・・ス・ス / frame 蛻・・ス・ス

    • filter / frame 縺ョ螟画峩蠕鯉ソスE縲∵エセ逕溽憾諷区峩譁ー繧・蠢・・ス・ス core.recomputeVisibleSet() 縺ォ髮・・ス・スE・ス・ス繧九€・
    • renderer 縺ッ縲梧ク。縺輔l縺・visibleSet 縺ィ microState縲阪□縺代r蜿肴丐縺励€・ 閾ェ蜑阪〒蜀崎ィ育ョ励@縺ェ縺・・ス・スE

7.12 Selection 繝上う繝ゥ繧、繝茨シ・acro 繝「繝シ繝臥畑・スE・スE

7.12.1 逶ョ逧・

selection 繝上う繝ゥ繧、繝茨ソスE縲・*macro 繝「繝シ繝画凾縺ォ縲檎樟蝨ィ驕ク謚樔クュ縺ョ 1 隕∫エ縲阪r譏守、コ縺吶k**縺溘a縺ョ
霆ス驥上↑蠑キ隱ソ陦ィ迴セ縺ィ縺吶k縲・

  • macro・スE・ス・スE菴謎ソッ迸ー・スE・ス縲後←繧後r驕ク繧薙□縺九€阪r荳ュ蠢・・ス・ス selection 繝上う繝ゥ繧、繝医r菴ソ縺・・ス・スE
  • micro・スE・スmicroFX 繧剃クュ蠢・・ス・ス縺励€《election 繝上う繝ゥ繧、繝茨ソスE謚大宛縺吶k縲・

縺難ソスE蠖ケ蜑イ蛻・・ス・ス縺ォ繧医j縲∝酔縺・uuid 縺ォ蟇セ縺励※
縲稽acro 縺ァ縺ッ selection highlight縲阪€稽icro 縺ァ縺ッ microFX縲阪→縺・・ス・ス
蛻・・ス・ス繧翫d縺吶>謖吝虚縺ォ邨ア荳€縺吶k縲・

7.12.2 驕ゥ逕ィ譚。莉カ

selection 繝上う繝ゥ繧、繝茨ソスE縲∵ャ。縺ョ譚。莉カ繧偵☆縺ケ縺ヲ貅€縺溘☆縺ィ縺阪↓縺ョ縺ソ謠冗判縺輔l繧九€・

  1. uiState.mode === "macro"
  2. uiState.selection 縺・{kind, uuid} 縺ァ縲~uuid` 縺碁撼 null
  3. uuid 縺・visibleSet 縺ォ蜷ォ縺セ繧後※縺・・ス・ス

縺難ソスE譚。莉カ繧呈コ€縺溘&縺ェ縺・・ス・ス蜷医€〉enderer 縺ッ selection 繝上う繝ゥ繧、繝育畑繧ェ繝シ繝撰ソスE繝ャ繧、繧定ァ」髯、縺励€・ baseStyle・スE・ス讒矩€縺ォ蝓コ縺・縺上ョ繝輔か繝ォ繝茨シ会ソスE縺ソ繧定。ィ遉コ縺吶k縲・

7.12.3 蛻カ蠕。繝輔Ο繝シ縺ィ雋ャ蜍呻ソスE諡・

  • core.selectionController

    • selection 縺ョ蜚ッ荳€縺ョ豁」隕上Ν繝シ繝医→縺吶k縲・
    • select(uuid) / clear() / get() 繧呈署萓帙@縲・ uiState.selection 繧呈峩譁ー縺吶k縲・
    • selection 縺・visibleSet 縺九i螟悶l縺溷エ蜷茨ソスE謨エ蜷茨シ・ull蛹也ュ会シ峨b core.recomputeVisibleSet() 縺御ソ晁ィシ縺吶k縲・
  • viewerHub

    • render loop 縺ョ tick 縺ァ uiState 縺ョ繧ケ繝翫ャ繝励す繝ァ繝・・ス・ス繧定ェュ縺ソ蜿悶j縲・ 谺。繧偵%縺ョ鬆・・ス・ス renderer 縺ォ驕ゥ逕ィ縺吶k・スE・スE
      • renderer.applyFrame(uiState.visibleSet)
      • renderer.applySelection(uiState.selection)・スE・スEacro 縺ョ縺ソ譛牙柑譚。莉カ縺ッ renderer 蛛エ縺ァ蛻、螳壹@縺ヲ繧医>・スE・スE
      • renderer.applyMicroFX(uiState.microState)
      • renderer.updateCamera(uiState.cameraState)
      • renderer.render()
  • renderer

    • applySelection({kind, uuid} | null) 繧貞女縺代※ macro 繝「繝シ繝臥畑縺ョ霆ス縺・・ス・ス隱ソ・スE・ス荳頑嶌縺搾シ峨r陦後≧縲・
    • visibleSet 縺ォ蜷ォ縺セ繧後↑縺・uuid 縺ォ縺ッ繝上う繝ゥ繧、繝医r謠冗判縺励↑縺・・ス・スE
    • 隗」髯、譎ゑソスE baseStyle 縺ォ螳鯉ソスE蠕ゥ蜈・・ス・ス縺阪k縺薙→・スE・ス蜿ッ騾・・ス・ス繧剃ソ晁ィシ縺吶k縲・

7.12.4 microFX / mode 驕キ遘サ縺ィ縺ョ髢「菫・

  • macro 竊・micro 縺ク縺ョ驕キ遘サ
    • modeController.setMode("micro", uuid) 縺ォ繧医j micro 繝「繝シ繝峨∈蜈・繧九→縺阪€・
      • uiState.selection 閾ェ菴難ソスE菫晄戟縺励※繧医>縺後€・
      • 謠冗判荳奇ソスE selection 繝上う繝ゥ繧、繝茨ソスE辟。蜉ケ蛹悶☆繧具シ・clearAllHighlights()`・スE・ス縲・
    • 蜷後§ uuid 繧偵ヵ繧ゥ繝シ繧ォ繧ケ縺ィ縺励◆ microFX・スE・スE.11・スE・ス縺梧怏蜉ケ縺ォ縺ェ繧九€・
  • micro 竊・macro 縺ク縺ョ驕キ遘サ
    • modeController.setMode("macro") 縺ァ謌サ縺」縺滓凾轤ケ縺ァ縲・
      • microFX 縺ッ applyMicroFX(null) 縺ォ繧医j隗」髯、縲・
      • selectionController 蛛エ縺ァ縲∫樟蝨ィ縺ョ selection 繧貞渕縺ォ
        setHighlight({kind, uuid}) 繧抵ソスE驕ゥ逕ィ縺吶k縲・
  • *frame / filter 螟画峩譎・
    • frame / filter 縺ョ螟画峩縺ァ selection 縺ョ蟇セ雎。縺碁撼陦ィ遉コ縺ォ縺ェ縺」縺溷エ蜷医€・
      • selection 繧堤カュ謖√☆繧九°縺ゥ縺・・ス・ス縺ッ selectionController 縺ョ繝昴Μ繧キ繝シ縺ィ縺吶k縲・
      • 縺・・ス・ス繧後↓縺帙h縲~visibleSet` 縺ォ蜷ォ縺セ繧後↑縺・・ス・ス邏縺ク縺ョ highlight 縺ッ謠冗判縺励↑縺・・ス・スE

7.12.5 莉墓ァ倅ク奇ソスE菴咲スョ縺・縺・

  • selection 繝上う繝ゥ繧、繝茨ソスE *縲稽acro 繝「繝シ繝臥畑縺ョ譛€菴朱剞縺ョ螻€謇€蠑キ隱ソ縲・ 縺ィ菴咲スョ縺・縺代k縲・
  • microFX 縺ッ 7.11 縺ョ縺ィ縺翫j縲[icro 繝「繝シ繝峨↓縺翫¢繧玖ゥウ邏ー縺ェ螻€謇€隱ュ隗」縺ョ縺溘a縺ョ
    隕冶ヲ夊」懷勧縺ァ縺ゅj縲∽ク。閠・・スE遶カ蜷医○縺夊」懷ョ後@蜷医≧繧医≧縺ォ險ュ險医☆繧九€・
  • 縺ゥ縺。繧会ソスE讖滓ァ九b 3DSS 讒矩€縺ッ荳€蛻・・ス・ス譖エ縺帙★縲∵緒逕サ螻樊€ァ縺ィ overlay 縺ォ縺ョ縺ソ菴懃畑縺吶k縲・