197 lines
8 KiB
HTML
197 lines
8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>BIMR.NET</title>
|
|
<link rel="stylesheet" href="./src/style.css" />
|
|
<script>
|
|
(function () {
|
|
var saved = localStorage.getItem('bimr.theme');
|
|
if (saved === 'dark') document.documentElement.setAttribute('data-theme', 'dark');
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<input type="file" id="file-open" accept=".py,.bimr,.bimrs,.ifcx" style="display:none">
|
|
|
|
<div id="help-dialog-overlay">
|
|
<div id="help-dialog" role="dialog" aria-modal="true">
|
|
<div id="help-dialog-header">
|
|
<h2>BIMR</h2>
|
|
<button id="help-dialog-close">x</button>
|
|
</div>
|
|
<div id="help-dialog-body">
|
|
<p class="help-intro">BIMR is a text-based Building Information Modeler.
|
|
<div class="help-section">
|
|
<h3>Two ways to write</h3>
|
|
<table class="help-table">
|
|
<tr>
|
|
<td>
|
|
Python mode
|
|
</td>
|
|
<td>
|
|
This is where you can express the design logic using BIMR's high-level entities.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
Bimr mode
|
|
</td>
|
|
<td>
|
|
This is the output generated by Python. It is a microlanguage used by BIMR to build the model.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="help-section">
|
|
<h3>Commands</h3>
|
|
<table class="help-table">
|
|
<tr><td>Ctrl+Enter / Ctrl+E</td><td>Run the current script</td></tr>
|
|
<tr><td>Ctrl+H</td><td>Open this help window</td></tr>
|
|
<tr><td>realtime button</td><td>Toggle auto-run on every keystroke</td></tr>
|
|
<tr><td>File > New</td><td>Erase current file or open a new tab</td></tr>
|
|
<tr><td>File > Open</td><td>Load a local .py or .bimr script into the editor</td></tr>
|
|
<tr><td>File > Save</td><td>Save the Python, Bimr or Ifcx buffer as a file</td></tr>
|
|
<tr><td>File > Rename</td><td>Rename the current file</td></tr>
|
|
<tr><td>File > Load</td><td>Fetch a script from a Forge or GitHub URL</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="help-section">
|
|
<h3>Geometry</h3>
|
|
<table class="help-table">
|
|
<tr><td>Point(x, y, z)</td><td>A 3D point</td></tr>
|
|
<tr><td>Line(p1, p2)</td><td>Line between two Points</td></tr>
|
|
<tr><td>Circle(center, radius)</td><td>Circle from center Point and a radius</td></tr>
|
|
<tr><td>Curve(ctrl)</td><td>Closed Catmull-Rom spline through a List of Points</td></tr>
|
|
<tr><td>Vector(x, y, z)</td><td>A 3D vector</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="help-section">
|
|
<h3>Lists & operators</h3>
|
|
<table class="help-table">
|
|
<tr><td>List(items)</td><td>A list of entities or values</td></tr>
|
|
<tr><td>Divide(source, n)</td><td>Divide an Entity into points. Returns a List</td></tr>
|
|
<tr><td>Cut(source, n)</td><td>Cut an Entity into segements. Returns a List</td></tr>
|
|
<tr><td>Explode(source)</td><td>Explode an Entity or a List into individual items</td></tr>
|
|
<tr><td>Random(source, seed, min, max, dims=2)</td><td>Random generator</td></tr>
|
|
<tr><td>Extrusion(profile, vec)</td><td>Extrude an Entity</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="help-section">
|
|
<h3>Architecture</h3>
|
|
<table class="help-table">
|
|
<tr><td>Wall(line, thickness=20, height=300)</td><td>Wall along a Line</td></tr>
|
|
<tr><td>Column(base, height, w, h)</td><td>Column at a Point</td></tr>
|
|
<tr><td>Slab(source, thickness, elevation)</td><td>Slab over a closed profile</td></tr>
|
|
<tr><td>Frame(origin, end, w, h, d, tk)</td><td>Frame between two Points</td></tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="new-dialog-overlay">
|
|
<div id="new-dialog" role="dialog" aria-modal="true">
|
|
<p>Open a new file?</p>
|
|
<div id="new-dialog-actions">
|
|
<button id="new-dialog-cancel">Cancel</button>
|
|
<button id="new-dialog-erase">Erase current</button>
|
|
<button id="new-dialog-tab">New tab</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="rename-dialog-overlay">
|
|
<div id="rename-dialog" role="dialog" aria-modal="true">
|
|
<label for="rename-dialog-input">Rename file</label>
|
|
<input type="text" id="rename-dialog-input" spellcheck="false" autocomplete="off">
|
|
<div id="rename-dialog-error"></div>
|
|
<div id="rename-dialog-actions">
|
|
<button id="rename-dialog-cancel">Cancel</button>
|
|
<button id="rename-dialog-confirm">Rename</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="load-dialog-overlay">
|
|
<div id="load-dialog" role="dialog" aria-modal="true" aria-labelledby="load-dialog-label">
|
|
<label id="load-dialog-label" for="load-dialog-url">Load from URL</label>
|
|
<input type="url" id="load-dialog-url" placeholder="https://gitaec.org/rvba/bimr-engine/src/branch/main/samples/python/building.py" spellcheck="false" autocomplete="off">
|
|
<div id="load-dialog-error"></div>
|
|
<div id="load-dialog-actions">
|
|
<button id="load-dialog-cancel">Cancel</button>
|
|
<button id="load-dialog-confirm">Load</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<header>
|
|
<div class="header-left">
|
|
<strong>BIMR</strong>
|
|
<nav class="menubar">
|
|
<div class="menu" id="menu-file">
|
|
<button class="menu-trigger" id="menu-file-trigger">File</button>
|
|
<ul class="menu-dropdown" id="menu-file-dropdown">
|
|
<li><button id="menu-new">New</button></li>
|
|
<li><button id="menu-open">Open</button></li>
|
|
<li class="menu-sub">
|
|
<button id="menu-save">Save</button>
|
|
<ul class="menu-submenu" id="menu-save-submenu">
|
|
<li><button id="menu-save-python">Python</button></li>
|
|
<li><button id="menu-save-bimr">Bimr</button></li>
|
|
<li><button id="menu-save-ifcx">Ifcx</button></li>
|
|
</ul>
|
|
</li>
|
|
<li><button id="menu-rename">Rename</button></li>
|
|
<li><button id="menu-load">Load</button></li>
|
|
<li class="menu-separator"></li>
|
|
<li><button id="menu-help">Help</button></li>
|
|
</ul>
|
|
</div>
|
|
<div class="menu" id="menu-examples">
|
|
<button class="menu-trigger" id="menu-examples-trigger">Examples</button>
|
|
<ul class="menu-dropdown" id="menu-examples-dropdown">
|
|
<li><em style="padding: 6px 12px; display:block; opacity:0.6;">Loading…</em></li>
|
|
</ul>
|
|
</div>
|
|
<a class="menu-trigger" id="menu-source" href="https://gitaec.org/rvba/bimr" target="_blank" rel="noopener">Source ↗</a>
|
|
</nav>
|
|
</div>
|
|
<button id="btn-theme" title="Toggle dark mode">☽</button>
|
|
</header>
|
|
<div id="layout-tab-bar">
|
|
<button id="btn-pane-editor" class="active">Editor</button>
|
|
<button id="btn-pane-viewer">Viewer</button>
|
|
</div>
|
|
<div class="panes" data-active-pane="editor">
|
|
<div class="pane">
|
|
<div id="tab-bar"></div>
|
|
<div id="editor"></div>
|
|
<div id="editor-footer">
|
|
<div id="view-mode-controls">
|
|
<button id="btn-view-python" class="active">python</button>
|
|
<button id="btn-view-bimr">bimr</button>
|
|
<button id="btn-view-ifcx">ifcx</button>
|
|
</div>
|
|
<div id="run-controls">
|
|
<button id="btn-mode-realtime" class="active">realtime</button>
|
|
<button id="btn-run" style="display:none">▶ Run</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pane" id="right">
|
|
<div id="viewer-pane" class="viewport"></div>
|
|
<div id="console-pane">
|
|
<div class="console-header">console</div>
|
|
<pre id="output"></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script type="module" src="./src/main.ts"></script>
|
|
</body>
|
|
</html>
|