effibemviewer 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl

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/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  __author__ = """Julien Marrec"""
4
4
  __email__ = 'contact@effibem.com'
5
- __version__ = '0.2.0'
5
+ __version__ = '0.2.2'
6
6
 
7
7
  from effibemviewer.gltf import (
8
8
  create_example_model,
effibemviewer/__main__.py CHANGED
@@ -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 main():
22
- """Command-line interface for generating GLTF viewer HTML from an OpenStudio model."""
23
- parser = argparse.ArgumentParser(description="Generate GLTF viewer HTML from OpenStudio model")
24
- # -m, --model: Path to the OpenStudio model file (optional, defaults to an example model)
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)
effibemviewer/gltf.py CHANGED
@@ -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 &copy; 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()}"
@@ -1,3 +1,8 @@
1
+ /**
2
+ * EffiBEM Viewer - A Three.js-based viewer for OpenStudio GLTF models
3
+ * https://github.com/jmarrec/effibemviewer
4
+ * https://effibem.com
5
+ */
1
6
  html, body {
2
7
  height: 100%;
3
8
  margin: 0;
@@ -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 - OpenStudio Model to GLTF with ThreeJS">
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 &copy; 2026 - {{ current_year }} <a href="https://effibem.com" target="_blank">EffiBEM EURL</a>. All rights reserved.</p>
114
+ <p>Copyright &copy; 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,7 @@
1
1
  /**
2
2
  * EffiBEM Viewer - A Three.js-based viewer for OpenStudio GLTF models
3
3
  * https://github.com/jmarrec/effibemviewer
4
+ * https://effibem.com
4
5
  */
5
6
  import * as THREE from "three";
6
7
  import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: effibemviewer
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: A 3D viewer for OpenStudio building energy models using GLTF and Three.js
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -0,0 +1,12 @@
1
+ effibemviewer/__init__.py,sha256=IJUFHGG8W2tNquOMWoXKZhLTEYAH13vQ9IUu2964sC4,518
2
+ effibemviewer/__main__.py,sha256=OLGZgHnG0vTXkKBqLPV-2MTMOVuXrqJoD8Cb1Te5Df8,4060
3
+ effibemviewer/gltf.py,sha256=hgI4Znd7_j6X9L358FpDNpNZghnRxBmrHEQX0r_Ujtg,7603
4
+ effibemviewer/templates/effibemviewer.css.j2,sha256=vJgmfu6bXBUizwIgR2sAYOzrYSDAbHQUeWJUPmE3tWI,3073
5
+ effibemviewer/templates/effibemviewer.html.j2,sha256=cj1vo84h2S7IrBzL9a3xwm0XrQSnCV9wyEyLkw2Vd2w,7816
6
+ effibemviewer/templates/effibemviewer.js.j2,sha256=wIzhZu0MKoJHySq4SzWx61c3EFLVp599UyTKi37cBEw,22275
7
+ effibemviewer/templates/gltf_viewer.html.j2,sha256=du-_vwPktovS3pnTXXyYejm4oGmDdDPo6Lp2cA-VHoA,8303
8
+ effibemviewer-0.2.2.dist-info/METADATA,sha256=zJKTl8uSZUARkCN5eIPcSyu9qWJ8fOP6awMyiEX4Zys,2719
9
+ effibemviewer-0.2.2.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
10
+ effibemviewer-0.2.2.dist-info/entry_points.txt,sha256=19A9p_Km00elnS86KBp_yo1wpQmirHwHdeRhRIL3f8w,61
11
+ effibemviewer-0.2.2.dist-info/licenses/LICENSE,sha256=UMqOqDPP8Cquc6stQtjgvN7VPG7T_sddgl5hg2J2aJk,1071
12
+ effibemviewer-0.2.2.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- effibemviewer/__init__.py,sha256=CMIZEFTpzZ83MGp5322SGhA86W7WYtDlgEdjZMZBTVs,518
2
- effibemviewer/__main__.py,sha256=dzW_McQ6WyRuAon9NCLZmxg4y3lqFqBOGBGoWR28J0o,3948
3
- effibemviewer/gltf.py,sha256=eQqa_ycFcnsXnx2RxJh9D_FViqQF9DtXQJCOeOKClp8,7246
4
- effibemviewer/templates/effibemviewer.css.j2,sha256=iEGXk43c4Vk4P5WgqAQ9oiYTSczXg959LEuTlRaa_8I,2927
5
- effibemviewer/templates/effibemviewer.html.j2,sha256=Zx-d1byu9YTI8wOs5ruv-xUSKA4cdo9rqyBnsESORZ0,7794
6
- effibemviewer/templates/effibemviewer.js.j2,sha256=Itw08a8xvO3M3Rq9-ndimniSIALlE7MsSxjVQcXngmw,22252
7
- effibemviewer/templates/gltf_viewer.html.j2,sha256=du-_vwPktovS3pnTXXyYejm4oGmDdDPo6Lp2cA-VHoA,8303
8
- effibemviewer-0.2.0.dist-info/METADATA,sha256=GqCYNZEtfx-2qGgUO3Zf9yj4WZqMZieRKxdU4jPwgvY,2719
9
- effibemviewer-0.2.0.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
10
- effibemviewer-0.2.0.dist-info/entry_points.txt,sha256=19A9p_Km00elnS86KBp_yo1wpQmirHwHdeRhRIL3f8w,61
11
- effibemviewer-0.2.0.dist-info/licenses/LICENSE,sha256=UMqOqDPP8Cquc6stQtjgvN7VPG7T_sddgl5hg2J2aJk,1071
12
- effibemviewer-0.2.0.dist-info/RECORD,,