effibemviewer 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/PKG-INFO +1 -1
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/__init__.py +1 -1
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/__main__.py +12 -5
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/gltf.py +12 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/templates/effibemviewer.css.j2 +5 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/templates/effibemviewer.html.j2 +3 -3
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/templates/effibemviewer.js.j2 +1 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/pyproject.toml +2 -1
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/LICENSE +0 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/README.md +0 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/effibemviewer/templates/gltf_viewer.html.j2 +0 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/tests/__init__.py +0 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/tests/test_cli.py +0 -0
- {effibemviewer-0.2.0 → effibemviewer-0.2.1}/tests/test_gltf.py +0 -0
|
@@ -18,10 +18,12 @@ JS_LIB_NAME = f"{BASE_NAME}.js"
|
|
|
18
18
|
CSS_LIB_NAME = f"{BASE_NAME}.css"
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def
|
|
22
|
-
"""
|
|
23
|
-
parser = argparse.ArgumentParser(
|
|
24
|
-
|
|
21
|
+
def get_parser() -> argparse.ArgumentParser:
|
|
22
|
+
"""Create and return the argument parser for the CLI."""
|
|
23
|
+
parser = argparse.ArgumentParser(
|
|
24
|
+
prog="python -m effibemviewer",
|
|
25
|
+
description="Generate GLTF viewer HTML from OpenStudio model",
|
|
26
|
+
)
|
|
25
27
|
parser.add_argument(
|
|
26
28
|
"-m",
|
|
27
29
|
"--model",
|
|
@@ -49,7 +51,6 @@ def main():
|
|
|
49
51
|
action="store_true",
|
|
50
52
|
help="Reference JS library from CDN instead of embedding or generating local file",
|
|
51
53
|
)
|
|
52
|
-
|
|
53
54
|
parser.add_argument(
|
|
54
55
|
"--pretty",
|
|
55
56
|
action="store_true",
|
|
@@ -60,6 +61,12 @@ def main():
|
|
|
60
61
|
action="store_true",
|
|
61
62
|
help="Generate a loader HTML with file input instead of embedding model data",
|
|
62
63
|
)
|
|
64
|
+
return parser
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def main():
|
|
68
|
+
"""Command-line interface for generating GLTF viewer HTML from an OpenStudio model."""
|
|
69
|
+
parser = get_parser()
|
|
63
70
|
args = parser.parse_args()
|
|
64
71
|
|
|
65
72
|
# Determine paths (relative to output HTML)
|
|
@@ -102,6 +102,7 @@ def display_model(
|
|
|
102
102
|
height: str = "500px",
|
|
103
103
|
use_iframe: bool = False,
|
|
104
104
|
include_geometry_diagnostics: bool = False,
|
|
105
|
+
cdn: bool = False,
|
|
105
106
|
) -> HTML | IFrame:
|
|
106
107
|
"""Display an OpenStudio model in a Jupyter notebook.
|
|
107
108
|
|
|
@@ -110,6 +111,7 @@ def display_model(
|
|
|
110
111
|
height: CSS height value (default "500px")
|
|
111
112
|
use_iframe: If True, use IFrame for nbclassic compatibility
|
|
112
113
|
include_geometry_diagnostics: If True, include geometry diagnostic info
|
|
114
|
+
cdn: If True, load JS/CSS from CDN (better caching on re-runs)
|
|
113
115
|
|
|
114
116
|
Returns:
|
|
115
117
|
IPython display object (HTML or IFrame)
|
|
@@ -122,6 +124,7 @@ def display_model(
|
|
|
122
124
|
embedded=True,
|
|
123
125
|
loader_mode=False,
|
|
124
126
|
script_only=True,
|
|
127
|
+
cdn=cdn,
|
|
125
128
|
)
|
|
126
129
|
if not use_iframe:
|
|
127
130
|
from IPython.display import HTML
|
|
@@ -129,15 +132,24 @@ def display_model(
|
|
|
129
132
|
return HTML(fragment)
|
|
130
133
|
|
|
131
134
|
import base64
|
|
135
|
+
import datetime
|
|
132
136
|
|
|
133
137
|
from IPython.display import IFrame
|
|
134
138
|
|
|
139
|
+
current_year = datetime.datetime.now().year
|
|
140
|
+
footer = f"""<p>
|
|
141
|
+
Copyright © 2026 - {current_year} <a href="https://effibem.com" target="_blank">EffiBEM EURL</a>
|
|
142
|
+
</p>"""
|
|
135
143
|
full_html = f"""<!DOCTYPE html>
|
|
136
144
|
<html>
|
|
137
145
|
<head>
|
|
138
146
|
</head>
|
|
139
147
|
<body style='margin:0'>
|
|
140
148
|
{fragment}
|
|
149
|
+
|
|
150
|
+
<footer>
|
|
151
|
+
{footer}
|
|
152
|
+
</footer>
|
|
141
153
|
</body>
|
|
142
154
|
</html>"""
|
|
143
155
|
data_url = f"data:text/html;base64,{base64.b64encode(full_html.encode()).decode()}"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<meta name="description" content="EffiBEM Viewer -
|
|
7
|
+
<meta name="description" content="EffiBEM Viewer - A Three.js-based viewer for OpenStudio GLTF modelsS">
|
|
8
8
|
<meta name="author" content="EffiBEM EURL">
|
|
9
9
|
<meta name="keywords" content="EnergyPlus, OpenStudio, Python, GLTF, Jupyter">
|
|
10
10
|
<title>EffiBEM Viewer</title>
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
{% endif %}
|
|
48
48
|
{% endif %}
|
|
49
49
|
|
|
50
|
-
<div id="viewer" class="effibem-viewer">
|
|
50
|
+
<div id="viewer" class="effibem-viewer" style="height: {{ height }};">
|
|
51
51
|
|
|
52
52
|
<div class="controls">
|
|
53
53
|
<div style="margin-bottom: 8px;">
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
|
|
112
112
|
{% if not script_only %}
|
|
113
113
|
<footer>
|
|
114
|
-
<p>Copyright © 2026 - {{ current_year }} <a href="https://effibem.com" target="_blank">EffiBEM EURL</a
|
|
114
|
+
<p>Copyright © 2026 - {{ current_year }} <a href="https://effibem.com" target="_blank">EffiBEM EURL</a></p>
|
|
115
115
|
</footer>
|
|
116
116
|
{% endif %}
|
|
117
117
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "effibemviewer"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.1"
|
|
4
4
|
description = "A 3D viewer for OpenStudio building energy models using GLTF and Three.js"
|
|
5
5
|
authors = ["Julien Marrec <contact@effibem.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -53,6 +53,7 @@ mkdocs-material = "^9.7.1"
|
|
|
53
53
|
mkdocstrings = "^1.0.2"
|
|
54
54
|
mkdocstrings-python = "^2.0.1"
|
|
55
55
|
mkdocs-autorefs = "^1.4.3"
|
|
56
|
+
markdown-exec = "^1.12.1"
|
|
56
57
|
|
|
57
58
|
[tool.black]
|
|
58
59
|
line-length = 120
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|