/ concept-collection / abc-step-1000
Sign in
concept-collection / abc-step-1000
abc-step-1000 / site / index.html
140 lines · 4.1 KBCodeBlameHistory
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6<title>abc-step-1000 — first 1000 STEP files from the ABC dataset</title>
7<style>
8 :root { color-scheme: light dark; }
9 body {
10 font-family: system-ui, sans-serif;
11 max-width: 60rem;
12 margin: 0 auto;
13 padding: 1.5rem;
14 line-height: 1.5;
15 }
16 h1 { margin-bottom: 0.2rem; }
17 .muted { opacity: 0.7; }
18 code, pre {
19 font-family: ui-monospace, monospace;
20 background: rgba(128, 128, 128, 0.12);
21 border-radius: 4px;
22 }
23 code { padding: 0.1em 0.3em; }
24 pre { padding: 0.7em 1em; overflow-x: auto; }
25 input#filter {
26 width: 100%;
27 box-sizing: border-box;
28 padding: 0.5em 0.7em;
29 margin: 1rem 0 0.5rem;
30 font: inherit;
31 border: 1px solid rgba(128, 128, 128, 0.5);
32 border-radius: 6px;
33 background: transparent;
34 color: inherit;
35 }
36 table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }
37 th, td {
38 text-align: left;
39 padding: 0.3em 0.8em 0.3em 0;
40 border-bottom: 1px solid rgba(128, 128, 128, 0.25);
41 white-space: nowrap;
42 }
43 td.num, th.num { text-align: right; }
44 .tablewrap { overflow-x: auto; }
45 footer { margin-top: 2rem; font-size: 0.85rem; opacity: 0.7; }
46</style>
47</head>
48<body>
49<h1>abc-step-1000</h1>
50<p class="muted" id="subtitle">Loading index…</p>
52<p>The first 1000 STEP files from the
53<a href="https://deep-geometry.github.io/abc-dataset/">ABC dataset</a>
54(Koch et&nbsp;al., CVPR 2019), a collection of one million CAD models for
55geometric deep learning. Files are served gzip-compressed; decompress after
56downloading:</p>
58<pre>curl -sL &lt;file-url&gt; | gunzip &gt; model.step</pre>
60<p>A machine-readable manifest with paths and sizes is at
61<a href="index.json"><code>index.json</code></a>. See the
62<a href="https://github.com/concept-collection/abc-step-1000">repository</a>
63for details, bulk-download recipes, and attribution. The copyright of the CAD
64models is owned by their creators
65(<a href="https://www.onshape.com/en/legal/terms-of-use#your_content">Onshape
66Terms of Use 1.g.ii</a>).</p>
68<input id="filter" type="search" placeholder="Filter by file name…" hidden>
69<div class="tablewrap">
70<table id="files" hidden>
71 <thead>
72 <tr>
73 <th>File</th>
74 <th class="num">STEP size</th>
75 <th class="num">Download (.gz)</th>
76 </tr>
77 </thead>
78 <tbody></tbody>
79</table>
80</div>
82<footer>
83Source: ABC dataset — <em>ABC: A Big CAD Model Dataset For Geometric Deep
84Learning</em>, Koch, Matveev, Jiang, Williams, Artemov, Burnaev, Alexa,
85Zorin, Panozzo. CVPR 2019.
86</footer>
88<script>
89function fmtBytes(n) {
90 if (n >= 1e9) return (n / 1e9).toFixed(2) + ' GB';
91 if (n >= 1e6) return (n / 1e6).toFixed(1) + ' MB';
92 return (n / 1e3).toFixed(1) + ' kB';
95fetch('index.json').then(r => r.json()).then(index => {
96 document.getElementById('subtitle').textContent =
97 `${index.count} files · ${fmtBytes(index.totalGzBytes)} compressed · ` +
98 `${fmtBytes(index.totalStepBytes)} uncompressed · from ${index.chunk}`;
100 const tbody = document.querySelector('#files tbody');
101 for (const f of index.files) {
102 const tr = document.createElement('tr');
104 const tdName = document.createElement('td');
105 tdName.textContent = f.name;
106 tr.appendChild(tdName);
108 const tdSize = document.createElement('td');
109 tdSize.className = 'num';
110 tdSize.textContent = fmtBytes(f.stepBytes);
111 tr.appendChild(tdSize);
113 const tdGz = document.createElement('td');
114 tdGz.className = 'num';
115 const a = document.createElement('a');
116 a.href = f.path;
117 a.textContent = fmtBytes(f.gzBytes);
118 tdGz.appendChild(a);
119 tr.appendChild(tdGz);
121 tbody.appendChild(tr);
122 }
124 const filter = document.getElementById('filter');
125 filter.addEventListener('input', () => {
126 const q = filter.value.toLowerCase();
127 for (const tr of tbody.rows) {
128 tr.hidden = !tr.cells[0].textContent.toLowerCase().includes(q);
129 }
130 });
132 filter.hidden = false;
133 document.getElementById('files').hidden = false;
134}).catch(err => {
135 document.getElementById('subtitle').textContent =
136 'Failed to load index.json: ' + err;
137});
138</script>
139</body>
140</html>
moveopenescclose