OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
8
dev/STEPViewer/.htaccess
Normal file
@@ -0,0 +1,8 @@
|
||||
# WebAssembly 必须带正确的 MIME,否则 occt 引擎的 instantiateStreaming 会失败
|
||||
AddType application/wasm .wasm
|
||||
AddType text/javascript .js .mjs
|
||||
|
||||
# 禁止直接下载模型文件(.stp/.step/.enc 只能通过查看器令牌通道读取)
|
||||
<FilesMatch "\.(stp|step|enc|STP|STEP)$">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
4
dev/STEPViewer/api/.htaccess
Normal file
@@ -0,0 +1,4 @@
|
||||
# 禁止直接访问加密模型文件(双保险:PHP 接口已校验令牌)
|
||||
<FilesMatch "\.(stp|step|enc)$">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
66
dev/STEPViewer/api/model.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* STEP 查看器 - 模型读取接口(PHP 版)
|
||||
* 校验令牌 → .enc 解密 / .stp 原样 → 流式返回
|
||||
*/
|
||||
$SECRET = '7175a8598ff7fa1c182f57f0c750e4f8';
|
||||
// 与 upload.php 保持一致的私有目录配置:模型放 Web 目录外,web 里根本没有文件可下载
|
||||
$PRIVATE_DIR = '/volume1/stepviewer_private';
|
||||
|
||||
function json_out($code, $obj) {
|
||||
http_response_code($code);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($obj, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$f = $_GET['f'] ?? '';
|
||||
$t = $_GET['t'] ?? '';
|
||||
$e = (int)($_GET['e'] ?? 0);
|
||||
if (!$f || !$t || !preg_match('/\.(stp|step|enc)$/i', $f)) json_out(400, ['error' => 'bad params']);
|
||||
|
||||
$sig = substr(hash_hmac('sha256', $f . '|' . $e, $SECRET), 0, 16);
|
||||
if (!hash_equals($sig, $t) || time() > $e) json_out(403, ['error' => 'invalid or expired token']);
|
||||
|
||||
$root = realpath(__DIR__ . '/..');
|
||||
if ($PRIVATE_DIR !== '') {
|
||||
// 私有目录优先(嵌入链接写纯文件名即可);目录不存在时退回站内路径,
|
||||
// 让留在 web 目录里的样例模型按原路径继续可用(这些文件本来就允许直链,
|
||||
// 退回不新增暴露面)。要保护的文件必须移出 web 目录放进私有目录。
|
||||
$full = realpath($PRIVATE_DIR . '/' . basename($f));
|
||||
$ok = $full && strpos($full, realpath($PRIVATE_DIR)) === 0 && is_file($full);
|
||||
if (!$ok) {
|
||||
$full = realpath($root . '/' . $f);
|
||||
$ok = $full && strpos($full, $root) === 0 && is_file($full);
|
||||
}
|
||||
} else {
|
||||
$full = realpath($root . '/' . $f);
|
||||
$ok = $full && strpos($full, $root) === 0 && is_file($full);
|
||||
}
|
||||
if (!$ok || !$full) json_out(404, ['error' => 'not found']);
|
||||
|
||||
$data = file_get_contents($full);
|
||||
if (preg_match('/\.enc$/i', $f)) {
|
||||
$nonce = substr($data, 0, 16);
|
||||
$key = hash('sha256', $SECRET . $nonce, true);
|
||||
$body = substr($data, 16);
|
||||
$out = '';
|
||||
for ($i = 0; $i < strlen($body); $i++) {
|
||||
$out .= $body[$i] ^ $key[$i % strlen($key)];
|
||||
}
|
||||
$data = $out;
|
||||
}
|
||||
|
||||
// 传输层 gzip:新格式文件解密后即以 gzip 魔数开头,原样传输;
|
||||
// 旧格式明文文件在线压缩。浏览器 fetch 自动解压(无需前端改动)
|
||||
$send = $data;
|
||||
if (substr($send, 0, 2) === "\x1f\x8b") {
|
||||
header('Content-Encoding: gzip');
|
||||
} elseif (!ini_get('zlib.output_compression') && strlen($data) > 1024) {
|
||||
$gz = gzencode($data, 6);
|
||||
if ($gz !== false) { $send = $gz; header('Content-Encoding: gzip'); }
|
||||
}
|
||||
header('Content-Type: application/octet-stream');
|
||||
header('Content-Length: ' . strlen($send));
|
||||
header('Cache-Control: no-store');
|
||||
echo $send;
|
||||
35
dev/STEPViewer/api/token.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* STEP 查看器 - 令牌接口(PHP 版)
|
||||
* 同源校验 + HMAC 短时令牌(5 分钟)
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$SECRET = '7175a8598ff7fa1c182f57f0c750e4f8';
|
||||
$TTL = 300;
|
||||
|
||||
function json_out($code, $obj) {
|
||||
http_response_code($code);
|
||||
echo json_encode($obj, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$f = $_GET['f'] ?? '';
|
||||
if (!$f || !preg_match('/\.(stp|step|enc)$/i', $f)) json_out(400, ['error' => 'bad file']);
|
||||
|
||||
// 只允许本站页面来取令牌,挡掉直接爬取。
|
||||
// 优先看 Sec-Fetch-Site:由查看器页面发起的同源 fetch 恒为 same-origin(跨站 iframe
|
||||
// 嵌入也不受影响,且不会被父站点的 Referrer-Policy 剥掉);没有该头的旧浏览器
|
||||
// 退回「Referer 含本站 host」的校验。直链/curl 两种都过不了。
|
||||
$fetchSite = $_SERVER['HTTP_SEC_FETCH_SITE'] ?? '';
|
||||
$referer = $_SERVER['HTTP_REFERER'] ?? '';
|
||||
$host = $_SERVER['HTTP_HOST'] ?? '';
|
||||
if ($fetchSite !== '') {
|
||||
if ($fetchSite !== 'same-origin' && $fetchSite !== 'same-site') json_out(403, ['error' => 'forbidden']);
|
||||
} elseif (strpos($referer, $host) === false) {
|
||||
json_out(403, ['error' => 'forbidden']);
|
||||
}
|
||||
|
||||
$exp = time() + $TTL;
|
||||
$sig = substr(hash_hmac('sha256', $f . '|' . $exp, $SECRET), 0, 16);
|
||||
json_out(200, ['token' => $sig, 'expires' => $exp]);
|
||||
98
dev/STEPViewer/api/upload.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* STEP 查看器 - 上传接口(PHP 版,虚拟主机可用)
|
||||
* 接收原始字节流 + X-Filename 头,加密存储为 uploads/xxx.enc
|
||||
* 生产环境请修改 SECRET!
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$SECRET = '7175a8598ff7fa1c182f57f0c750e4f8';
|
||||
$MAX_SIZE = 500 * 1024 * 1024;
|
||||
// 私有目录:Web 目录外的绝对路径,模型只存这里,web 目录里根本没有模型文件可下载。
|
||||
// 群晖 File Station 在 web 目录外建 /volume1/stepviewer_private 并给 http 用户组读写权限;
|
||||
// 路径不同就改成你的实际路径。
|
||||
$PRIVATE_DIR = '/volume1/stepviewer_private';
|
||||
|
||||
function json_out($code, $obj) {
|
||||
http_response_code($code);
|
||||
echo json_encode($obj, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') json_out(405, ['error' => 'method not allowed']);
|
||||
|
||||
$len = (int)($_SERVER['CONTENT_LENGTH'] ?? 0);
|
||||
if ($len <= 0) json_out(400, ['error' => 'empty body']);
|
||||
if ($len > $MAX_SIZE) json_out(413, ['error' => 'file too large (max 500MB)']);
|
||||
|
||||
$raw = urldecode($_SERVER['HTTP_X_FILENAME'] ?? 'model.step');
|
||||
$base = basename($raw);
|
||||
$safe = preg_replace('/[^\w.\-\x{4e00}-\x{9fff}]/u', '_', $base);
|
||||
if (!$safe || !preg_match('/\.(step|stp)$/i', $safe)) $safe .= '.stp';
|
||||
$stem = pathinfo($safe, PATHINFO_FILENAME);
|
||||
$ext = pathinfo($safe, PATHINFO_EXTENSION);
|
||||
$name = $stem . '_' . substr(bin2hex(random_bytes(4)), 0, 8) . '.' . $ext;
|
||||
|
||||
$data = file_get_contents('php://input');
|
||||
if ($data === false || strlen($data) !== $len) json_out(400, ['error' => 'incomplete upload']);
|
||||
|
||||
// 客户端可选 gzip 压缩上传(STEP 文本约可压到 1/6,节省带宽)
|
||||
if (($_SERVER['HTTP_X_ENCODING'] ?? '') === 'gzip') {
|
||||
$dec = gzdecode($data);
|
||||
if ($dec === false) json_out(400, ['error' => 'bad gzip body']);
|
||||
if (strlen($dec) > $MAX_SIZE) json_out(413, ['error' => 'file too large (max 500MB)']);
|
||||
$data = $dec;
|
||||
}
|
||||
|
||||
// 存储层也压缩:先 gzip 再加密,磁盘占用约 1/6(读取端靠 gzip 魔数自动识别)
|
||||
$rawSize = strlen($data);
|
||||
$data = gzencode($data, 6);
|
||||
if ($data === false) json_out(500, ['error' => 'gzip failed']);
|
||||
|
||||
$dir = $PRIVATE_DIR !== '' ? $PRIVATE_DIR : (__DIR__ . '/../uploads');
|
||||
if (!is_dir($dir)) @mkdir($dir, 0755, true);
|
||||
if (!is_dir($dir)) json_out(500, ['error' => 'upload dir not writable']);
|
||||
|
||||
$nonce = random_bytes(16);
|
||||
$key = hash('sha256', $SECRET . $nonce, true);
|
||||
$enc = '';
|
||||
for ($i = 0; $i < strlen($data); $i++) {
|
||||
$enc .= $data[$i] ^ $key[$i % strlen($key)];
|
||||
}
|
||||
|
||||
file_put_contents($dir . '/' . $name . '.enc', $nonce . $enc);
|
||||
// 私有目录模式下返回裸文件名:嵌入链接就是 ?file=xxx.enc,读取端按 basename 在私有目录找
|
||||
$entryPath = ($PRIVATE_DIR !== '' ? '' : 'uploads/') . $name . '.enc';
|
||||
|
||||
// 记入首页数模库(入口目录的 library.json,2D/3D 共享);库写失败不影响上传本身
|
||||
try {
|
||||
add_to_library($entryPath, $safe, '3d');
|
||||
} catch (Throwable $e) { /* 忽略 */ }
|
||||
|
||||
json_out(200, ['path' => $entryPath, 'size' => $rawSize]);
|
||||
|
||||
/**
|
||||
* 把刚上传的文件追加进首页数模库(../../library.json):
|
||||
* 同路径已有记录就刷新名称和时间,否则插到最前。
|
||||
*/
|
||||
function add_to_library($path, $name, $type) {
|
||||
$libFile = dirname(__DIR__, 2) . '/library.json';
|
||||
$records = [];
|
||||
if (is_file($libFile)) {
|
||||
$old = json_decode((string)file_get_contents($libFile), true);
|
||||
if (is_array($old) && isset($old['records']) && is_array($old['records'])) $records = $old['records'];
|
||||
}
|
||||
$found = false;
|
||||
foreach ($records as $i => $rec) {
|
||||
if (isset($rec['path']) && $rec['path'] === $path) {
|
||||
$records[$i]['name'] = $name;
|
||||
$records[$i]['time'] = time();
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$found) {
|
||||
array_unshift($records, ['path' => $path, 'name' => $name, 'type' => $type, 'note' => '', 'time' => time()]);
|
||||
}
|
||||
@file_put_contents($libFile, json_encode(['records' => $records], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), LOCK_EX);
|
||||
}
|
||||
2247
dev/STEPViewer/app.js
Normal file
54
dev/STEPViewer/embed_demo.html
Normal file
@@ -0,0 +1,54 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>STEP 查看器嵌入示例</title>
|
||||
<style>
|
||||
body { margin: 0; font-family: "Microsoft YaHei", sans-serif; background: #f5f6f7; }
|
||||
.header {
|
||||
background: #fff; padding: 14px 24px; border-bottom: 1px solid #e3e6e8;
|
||||
display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
|
||||
}
|
||||
.header h1 { font-size: 18px; margin: 0; color: #2b9ae8; }
|
||||
.model-btn {
|
||||
border: 1px solid #ddd; background: #fff; border-radius: 4px;
|
||||
padding: 8px 16px; cursor: pointer; font-size: 13px; color: #444;
|
||||
}
|
||||
.model-btn:hover { border-color: #2b9ae8; color: #2b9ae8; }
|
||||
.content { padding: 16px; }
|
||||
.frame-box {
|
||||
background: #fff; border: 1px solid #e3e6e8; border-radius: 6px;
|
||||
overflow: hidden; height: calc(100vh - 150px);
|
||||
}
|
||||
iframe { width: 100%; height: 100%; border: none; display: block; }
|
||||
.tip { color: #888; font-size: 12px; margin-top: 8px; line-height: 1.8; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>STEP 3D 查看器 · 嵌入示例</h1>
|
||||
<button class="model-btn" data-model="samples/user/LZ01001001_H100_2mm.stp">LZ01001001_H100</button>
|
||||
<button class="model-btn" data-model="samples/user/LZ01001005_H500_2mm.stp">LZ01001005_H500</button>
|
||||
<button class="model-btn" data-model="samples/as1-oc-214.stp">as1 装配体</button>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="frame-box">
|
||||
<!-- 嵌入方式:iframe + ?file= 参数自动加载指定模型 -->
|
||||
<iframe id="viewerFrame" src="./index.html?file=samples/user/LZ01001001_H100_2mm.stp" allowFullScreen></iframe>
|
||||
</div>
|
||||
<div class="tip">
|
||||
嵌入方法:<iframe src="查看器目录/index.html?file=模型路径.stp" width="100%" height="600" allowFullScreen></iframe><br>
|
||||
部署:把整个 STEPViewer 目录(index.html、app.js、style.css、libs、icons)上传到你的网站,iframe 指向它即可。<br>
|
||||
注意:模型文件要与查看器同源(同一域名下),或用 ?url= 加载远程模型(远程服务器需允许 CORS)。
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.querySelectorAll('.model-btn').forEach((b) => {
|
||||
b.addEventListener('click', () => {
|
||||
document.getElementById('viewerFrame').src = './index.html?file=' + encodeURIComponent(b.dataset.model);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
dev/STEPViewer/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
dev/STEPViewer/icons/all-screen.png
Normal file
|
After Width: | Height: | Size: 914 B |
BIN
dev/STEPViewer/icons/arrow_icon.30b57c61.png
Normal file
|
After Width: | Height: | Size: 340 B |
BIN
dev/STEPViewer/icons/close.0fb8dc6e.png
Normal file
|
After Width: | Height: | Size: 214 B |
BIN
dev/STEPViewer/icons/color.ad185a94.png
Normal file
|
After Width: | Height: | Size: 726 B |
BIN
dev/STEPViewer/icons/ico-perspective.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
dev/STEPViewer/icons/ico-search.33e9e6a1.png
Normal file
|
After Width: | Height: | Size: 376 B |
BIN
dev/STEPViewer/icons/ico-set-clearHideLine.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
dev/STEPViewer/icons/ico-set-color.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
dev/STEPViewer/icons/ico-set-lineColor.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
dev/STEPViewer/icons/ico-set-resetAngel.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
dev/STEPViewer/icons/ico-set-showHideLine.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
dev/STEPViewer/icons/ico-set-transparent.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
dev/STEPViewer/icons/ico-set-wireframe.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
dev/STEPViewer/icons/ico-tree-check.7c4874a5.png
Normal file
|
After Width: | Height: | Size: 242 B |
BIN
dev/STEPViewer/icons/ico-tree-checked.905447ca.png
Normal file
|
After Width: | Height: | Size: 359 B |
BIN
dev/STEPViewer/icons/ico-tree-checking.bd34b24b.png
Normal file
|
After Width: | Height: | Size: 322 B |
BIN
dev/STEPViewer/icons/one-click-color.0a5c28c0.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
dev/STEPViewer/icons/tree-Part.e3fb53a4.png
Normal file
|
After Width: | Height: | Size: 643 B |
BIN
dev/STEPViewer/icons/tree-captures.7dc1f3b5.png
Normal file
|
After Width: | Height: | Size: 548 B |
BIN
dev/STEPViewer/icons/tree-node-close.9d625f70.png
Normal file
|
After Width: | Height: | Size: 273 B |
BIN
dev/STEPViewer/icons/tree-node-open.f45d6681.png
Normal file
|
After Width: | Height: | Size: 298 B |
BIN
dev/STEPViewer/icons/tree-root.48094390.png
Normal file
|
After Width: | Height: | Size: 934 B |
BIN
dev/STEPViewer/icons/tree-views.7d4f57c8.png
Normal file
|
After Width: | Height: | Size: 443 B |
BIN
dev/STEPViewer/icons/view-tool-Lineargauge.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
dev/STEPViewer/icons/view-tool-allReset.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
dev/STEPViewer/icons/view-tool-angel.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
dev/STEPViewer/icons/view-tool-area.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-blast.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
dev/STEPViewer/icons/view-tool-boundBox.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
dev/STEPViewer/icons/view-tool-clear.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-conceal.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-coordinate.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
dev/STEPViewer/icons/view-tool-coutBox.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
dev/STEPViewer/icons/view-tool-distance.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
dev/STEPViewer/icons/view-tool-drag.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
dev/STEPViewer/icons/view-tool-ellipse.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
dev/STEPViewer/icons/view-tool-hideShow.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
dev/STEPViewer/icons/view-tool-length.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
dev/STEPViewer/icons/view-tool-lineAngle.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
dev/STEPViewer/icons/view-tool-lineMeasure.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
dev/STEPViewer/icons/view-tool-radius.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
dev/STEPViewer/icons/view-tool-select.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
dev/STEPViewer/icons/view-tool-settings.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
dev/STEPViewer/icons/view-tool-singalDrag.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-singalReset.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-slice.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
dev/STEPViewer/icons/view-tool-statisticalResult.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
dev/STEPViewer/icons/view-tool-transparent.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-tree.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
dev/STEPViewer/icons/view-tool-volumeWeight.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
dev/STEPViewer/icons/view-tool-vport.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
dev/STEPViewer/icons/view-tool-wallThickness.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
201
dev/STEPViewer/index.html
Normal file
@@ -0,0 +1,201 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>STEP 模型查看器</title>
|
||||
<link rel="icon" href="favicon.ico">
|
||||
<link rel="stylesheet" href="./style.css?v=5">
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"three": "./libs/three.module.min.js",
|
||||
"three/addons/": "./libs/"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="./libs/occt-import-js.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 顶栏 -->
|
||||
<div id="topbar">
|
||||
<div class="logo">
|
||||
<span class="logo-text">STEP 3D 查看器</span>
|
||||
</div>
|
||||
<button id="btnOpen" class="btn-primary" title="打开 STEP 文件">打开模型</button>
|
||||
<label class="quality-label" title="网格细分精度(越高越精细,转换时间越长)">精度
|
||||
<select id="qualitySelect">
|
||||
<option value="low">低</option>
|
||||
<option value="medium">中</option>
|
||||
<option value="high" selected>高</option>
|
||||
</select>
|
||||
</label>
|
||||
<button id="btnEmbed" class="btn-secondary" title="生成嵌入链接">嵌入</button>
|
||||
<span id="fileName" class="file-name">未加载模型(支持拖拽 .step/.stp 文件到页面)</span>
|
||||
<div class="top-right">
|
||||
<button id="btnFullscreen" class="icon-btn" title="全屏"><img src="./icons/all-screen.png" alt="全屏"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="main">
|
||||
<!-- 左侧模型树 -->
|
||||
<div id="treePanel">
|
||||
<div class="tree-header">
|
||||
<span class="tree-title">模型树</span>
|
||||
<button id="btnTreeClose" class="tree-close" title="关闭面板">✕</button>
|
||||
<div class="tree-search">
|
||||
<img src="./icons/ico-search.33e9e6a1.png" alt="搜索">
|
||||
<input id="treeSearch" type="text" placeholder="搜索零件...">
|
||||
</div>
|
||||
</div>
|
||||
<div id="tree" class="tree-body"><div class="tree-empty">加载模型后显示零件树</div></div>
|
||||
</div>
|
||||
|
||||
<!-- 视口 -->
|
||||
<div id="viewport">
|
||||
<div id="canvasWrap"></div>
|
||||
|
||||
<!-- 底部工具栏 -->
|
||||
<div id="toolbar">
|
||||
<button class="tool-btn active" data-tool="select" title="选择"><img src="./icons/view-tool-select.png" alt="选择"><span>选择</span></button>
|
||||
<button class="tool-btn" data-tool="measure" title="测量"><img src="./icons/view-tool-distance.png" alt="测量"><span>测量</span></button>
|
||||
<button class="tool-btn" data-tool="drag" title="拖动零件"><img src="./icons/view-tool-drag.png" alt="拖动"><span>拖动</span></button>
|
||||
<button class="tool-btn" data-tool="singalDrag" title="单件拖动"><img src="./icons/view-tool-singalDrag.png" alt="单件拖动"><span>单件</span></button>
|
||||
<button class="tool-btn" data-tool="explode" title="爆炸"><img src="./icons/view-tool-blast.png" alt="爆炸"><span>爆炸</span></button>
|
||||
<button class="tool-btn" data-tool="section" title="剖切"><img src="./icons/view-tool-slice.png" alt="剖切"><span>剖切</span></button>
|
||||
<div class="tool-sep"></div>
|
||||
<button class="tool-btn" id="btnTree" title="结构树显示/隐藏"><img src="./icons/view-tool-tree.png" alt="结构树"><span>结构树</span></button>
|
||||
<button class="tool-btn" id="btnWireframe" title="线框(显示/隐藏轮廓线)"><img src="./icons/ico-set-wireframe.png" alt="线框"><span>线框</span></button>
|
||||
<button class="tool-btn" id="btnColorPanel" title="上色"><img src="./icons/ico-set-color.png" alt="上色"><span>上色</span></button>
|
||||
<button class="tool-btn" id="btnShowAll" title="全部显示"><img src="./icons/view-tool-hideShow.png" alt="全部显示"><span>显示</span></button>
|
||||
<button class="tool-btn" id="btnTransparent" title="透明(选中零件)"><img src="./icons/view-tool-transparent.png" alt="透明"><span>透明</span></button>
|
||||
<button class="tool-btn" id="btnBbox" title="包围盒"><img src="./icons/view-tool-coutBox.png" alt="包围盒"><span>包围盒</span></button>
|
||||
<button class="tool-btn" id="btnClear" title="清除测量"><img src="./icons/view-tool-clear.png" alt="清除"><span>清除</span></button>
|
||||
<button class="tool-btn" id="btnSingleReset" title="单件复位"><img src="./icons/view-tool-singalReset.png" alt="单件复位"><span>复位</span></button>
|
||||
<button class="tool-btn" id="btnAllReset" title="全部复位"><img src="./icons/view-tool-allReset.png" alt="全部复位"><span>全复位</span></button>
|
||||
<div class="tool-sep"></div>
|
||||
<button class="tool-btn" id="btnVport" title="切换视角"><img src="./icons/view-tool-vport.png" alt="视角"><span>视角</span></button>
|
||||
<button class="tool-btn" id="btnAxes" title="坐标系"><img src="./icons/view-tool-coordinate.png" alt="坐标系"><span>坐标</span></button>
|
||||
<button class="tool-btn" id="btnFull" title="全屏"><img src="./icons/all-screen.png" alt="全屏"><span>全屏</span></button>
|
||||
</div>
|
||||
|
||||
<!-- 爆炸面板 -->
|
||||
<div id="explodePanel" class="float-panel hidden">
|
||||
<div class="panel-title">爆炸 <img src="./icons/close.0fb8dc6e.png" class="panel-close" data-panel="explode" alt="关闭"></div>
|
||||
<div class="panel-row">
|
||||
<span>程度</span>
|
||||
<input type="range" id="explodeSlider" min="0" max="100" value="0">
|
||||
<span id="explodeVal" class="panel-val">0%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 剖切面板 -->
|
||||
<div id="sectionPanel" class="float-panel hidden">
|
||||
<div class="panel-title">剖切 <img src="./icons/close.0fb8dc6e.png" class="panel-close" data-panel="section" alt="关闭"></div>
|
||||
<div class="panel-row">
|
||||
<button class="axis-btn" data-axis="x">X</button>
|
||||
<button class="axis-btn" data-axis="y">Y</button>
|
||||
<button class="axis-btn active" data-axis="z">Z</button>
|
||||
<button id="btnSectionFlip" class="small-btn">翻转</button>
|
||||
<button id="btnSectionToggle" class="small-btn on">开启</button>
|
||||
</div>
|
||||
<div class="panel-row">
|
||||
<span>位置</span>
|
||||
<input type="range" id="sectionSlider" min="-100" max="100" value="0">
|
||||
<span id="sectionVal" class="panel-val">0</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 测量子面板(水平单行,激活时隐藏底部工具栏) -->
|
||||
<div id="measurePanel" class="float-panel measure-panel hidden">
|
||||
<div id="measureModes"></div>
|
||||
<div class="measure-actions">
|
||||
<button id="btnStats" class="measure-act" title="结果统计"><img src="./icons/view-tool-statisticalResult.png" alt="统计"></button>
|
||||
<button id="btnMeasureClear" class="measure-act" title="清空"><img src="./icons/view-tool-clear.png" alt="清空"></button>
|
||||
</div>
|
||||
<button id="btnMeasureClose" class="measure-act" title="关闭测量,恢复工具栏"><img src="./icons/close.0fb8dc6e.png" alt="关闭"></button>
|
||||
</div>
|
||||
|
||||
<!-- 结果统计面板 -->
|
||||
<div id="statsPanel" class="float-panel hidden">
|
||||
<div class="panel-title">结果统计 <img src="./icons/close.0fb8dc6e.png" class="panel-close" data-panel="stats" alt="关闭"></div>
|
||||
<div id="statsList"><div class="stats-empty">暂无测量结果</div></div>
|
||||
</div>
|
||||
|
||||
<!-- 上色面板 -->
|
||||
<div id="colorPanel" class="float-panel hidden">
|
||||
<div class="panel-title">上色 <img src="./icons/close.0fb8dc6e.png" class="panel-close" data-panel="color" alt="关闭"></div>
|
||||
<div class="panel-row">
|
||||
<input type="color" id="colorPicker" value="#2b9ae8" title="选择颜色">
|
||||
<button id="btnColorApply" class="small-btn">应用到选中</button>
|
||||
</div>
|
||||
<div class="panel-row">
|
||||
<button id="btnColorOneClick" class="small-btn" title="按零件自动分配颜色"><img src="./icons/one-click-color.0a5c28c0.png" alt="一键上色">一键上色</button>
|
||||
<button id="btnColorReset" class="small-btn">恢复原色</button>
|
||||
</div>
|
||||
<div class="panel-row">
|
||||
<span>亮度</span>
|
||||
<input type="range" id="brightnessSlider" min="50" max="200" value="100">
|
||||
<span id="brightnessVal" class="panel-val">100%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 嵌入链接面板 -->
|
||||
<div id="embedPanel" class="float-panel hidden">
|
||||
<div class="panel-title">生成嵌入链接 <img src="./icons/close.0fb8dc6e.png" class="panel-close" data-panel="embed" alt="关闭"></div>
|
||||
<div class="panel-row">
|
||||
<span>模型路径</span>
|
||||
<input type="text" id="embedPath" placeholder="samples/xxx.stp 或 https://...">
|
||||
</div>
|
||||
<div class="panel-row">
|
||||
<span>嵌入地址</span>
|
||||
<input type="text" id="embedUrl" readonly>
|
||||
</div>
|
||||
<div class="panel-row">
|
||||
<span>iframe 代码</span>
|
||||
<textarea id="embedCode" rows="3" readonly></textarea>
|
||||
</div>
|
||||
<div class="panel-row embed-actions">
|
||||
<button id="btnUploadModel" class="small-btn">上传当前模型</button>
|
||||
<button id="btnCopyUrl" class="small-btn">复制链接</button>
|
||||
<button id="btnCopyCode" class="small-btn">复制代码</button>
|
||||
</div>
|
||||
<div id="embedHint" class="embed-hint"></div>
|
||||
</div>
|
||||
|
||||
<!-- 状态栏 -->
|
||||
<div id="statusbar">
|
||||
<span id="statusText">就绪 | 左键旋转 · 右键平移 · 滚轮缩放</span>
|
||||
<span id="modelInfo" class="status-right"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 零件右键菜单 -->
|
||||
<div id="ctxMenu" class="hidden">
|
||||
<div class="ctx-title" id="ctxMenuTitle"></div>
|
||||
<div class="ctx-item" data-act="hide"><img src="./icons/view-tool-hideShow.png" alt=""><span>隐藏</span></div>
|
||||
<div class="ctx-item" data-act="isolate"><img src="./icons/view-tool-conceal.png" alt=""><span>显示其他</span></div>
|
||||
<div class="ctx-item" data-act="showAll"><img src="./icons/view-tool-hideShow.png" alt=""><span>全部显示</span></div>
|
||||
<div class="ctx-sep"></div>
|
||||
<div class="ctx-item" data-act="color"><img src="./icons/ico-set-color.png" alt=""><span>更改颜色</span></div>
|
||||
<div class="ctx-item" data-act="transparent"><img src="./icons/view-tool-transparent.png" alt=""><span>透明</span></div>
|
||||
<div class="ctx-sep"></div>
|
||||
<div class="ctx-item" data-act="drag"><img src="./icons/view-tool-drag.png" alt=""><span>拖动</span></div>
|
||||
<div class="ctx-item" data-act="reset"><img src="./icons/view-tool-singalReset.png" alt=""><span>复位</span></div>
|
||||
</div>
|
||||
|
||||
<input type="file" id="fileInput" accept=".step,.stp,.STEP,.STP" style="display:none">
|
||||
|
||||
<!-- 加载遮罩(新迪同款弹跳圆点) -->
|
||||
<div id="loading" class="hidden">
|
||||
<div class="waiter"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>
|
||||
<div id="loadingText">正在转换 STEP 模型...</div>
|
||||
</div>
|
||||
|
||||
<!-- 拖拽提示 -->
|
||||
<div id="dropOverlay" class="hidden"><div class="drop-box">松开鼠标加载 STEP 文件</div></div>
|
||||
|
||||
<script type="module" src="./app.js?v=5"></script>
|
||||
</body>
|
||||
</html>
|
||||
215
dev/STEPViewer/libs/CSS2DRenderer.js
Normal file
@@ -0,0 +1,215 @@
|
||||
import {
|
||||
Matrix4,
|
||||
Object3D,
|
||||
Vector2,
|
||||
Vector3
|
||||
} from 'three';
|
||||
|
||||
class CSS2DObject extends Object3D {
|
||||
|
||||
constructor( element = document.createElement( 'div' ) ) {
|
||||
|
||||
super();
|
||||
|
||||
this.isCSS2DObject = true;
|
||||
|
||||
this.element = element;
|
||||
|
||||
this.element.style.position = 'absolute';
|
||||
this.element.style.userSelect = 'none';
|
||||
|
||||
this.element.setAttribute( 'draggable', false );
|
||||
|
||||
this.center = new Vector2( 0.5, 0.5 ); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right
|
||||
|
||||
this.addEventListener( 'removed', function () {
|
||||
|
||||
this.traverse( function ( object ) {
|
||||
|
||||
if ( object.element instanceof Element && object.element.parentNode !== null ) {
|
||||
|
||||
object.element.parentNode.removeChild( object.element );
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
copy( source, recursive ) {
|
||||
|
||||
super.copy( source, recursive );
|
||||
|
||||
this.element = source.element.cloneNode( true );
|
||||
|
||||
this.center = source.center;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
const _vector = new Vector3();
|
||||
const _viewMatrix = new Matrix4();
|
||||
const _viewProjectionMatrix = new Matrix4();
|
||||
const _a = new Vector3();
|
||||
const _b = new Vector3();
|
||||
|
||||
class CSS2DRenderer {
|
||||
|
||||
constructor( parameters = {} ) {
|
||||
|
||||
const _this = this;
|
||||
|
||||
let _width, _height;
|
||||
let _widthHalf, _heightHalf;
|
||||
|
||||
const cache = {
|
||||
objects: new WeakMap()
|
||||
};
|
||||
|
||||
const domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );
|
||||
|
||||
domElement.style.overflow = 'hidden';
|
||||
|
||||
this.domElement = domElement;
|
||||
|
||||
this.getSize = function () {
|
||||
|
||||
return {
|
||||
width: _width,
|
||||
height: _height
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
this.render = function ( scene, camera ) {
|
||||
|
||||
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
||||
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
||||
|
||||
_viewMatrix.copy( camera.matrixWorldInverse );
|
||||
_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
|
||||
|
||||
renderObject( scene, scene, camera );
|
||||
zOrder( scene );
|
||||
|
||||
};
|
||||
|
||||
this.setSize = function ( width, height ) {
|
||||
|
||||
_width = width;
|
||||
_height = height;
|
||||
|
||||
_widthHalf = _width / 2;
|
||||
_heightHalf = _height / 2;
|
||||
|
||||
domElement.style.width = width + 'px';
|
||||
domElement.style.height = height + 'px';
|
||||
|
||||
};
|
||||
|
||||
function renderObject( object, scene, camera ) {
|
||||
|
||||
if ( object.isCSS2DObject ) {
|
||||
|
||||
_vector.setFromMatrixPosition( object.matrixWorld );
|
||||
_vector.applyMatrix4( _viewProjectionMatrix );
|
||||
|
||||
const visible = ( object.visible === true ) && ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );
|
||||
object.element.style.display = ( visible === true ) ? '' : 'none';
|
||||
|
||||
if ( visible === true ) {
|
||||
|
||||
object.onBeforeRender( _this, scene, camera );
|
||||
|
||||
const element = object.element;
|
||||
|
||||
element.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';
|
||||
|
||||
if ( element.parentNode !== domElement ) {
|
||||
|
||||
domElement.appendChild( element );
|
||||
|
||||
}
|
||||
|
||||
object.onAfterRender( _this, scene, camera );
|
||||
|
||||
}
|
||||
|
||||
const objectData = {
|
||||
distanceToCameraSquared: getDistanceToSquared( camera, object )
|
||||
};
|
||||
|
||||
cache.objects.set( object, objectData );
|
||||
|
||||
}
|
||||
|
||||
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
||||
|
||||
renderObject( object.children[ i ], scene, camera );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getDistanceToSquared( object1, object2 ) {
|
||||
|
||||
_a.setFromMatrixPosition( object1.matrixWorld );
|
||||
_b.setFromMatrixPosition( object2.matrixWorld );
|
||||
|
||||
return _a.distanceToSquared( _b );
|
||||
|
||||
}
|
||||
|
||||
function filterAndFlatten( scene ) {
|
||||
|
||||
const result = [];
|
||||
|
||||
scene.traverse( function ( object ) {
|
||||
|
||||
if ( object.isCSS2DObject ) result.push( object );
|
||||
|
||||
} );
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
function zOrder( scene ) {
|
||||
|
||||
const sorted = filterAndFlatten( scene ).sort( function ( a, b ) {
|
||||
|
||||
if ( a.renderOrder !== b.renderOrder ) {
|
||||
|
||||
return b.renderOrder - a.renderOrder;
|
||||
|
||||
}
|
||||
|
||||
const distanceA = cache.objects.get( a ).distanceToCameraSquared;
|
||||
const distanceB = cache.objects.get( b ).distanceToCameraSquared;
|
||||
|
||||
return distanceA - distanceB;
|
||||
|
||||
} );
|
||||
|
||||
const zMax = sorted.length;
|
||||
|
||||
for ( let i = 0, l = sorted.length; i < l; i ++ ) {
|
||||
|
||||
sorted[ i ].element.style.zIndex = zMax - i;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export { CSS2DObject, CSS2DRenderer };
|
||||
221
dev/STEPViewer/libs/DragControls.js
Normal file
@@ -0,0 +1,221 @@
|
||||
import {
|
||||
EventDispatcher,
|
||||
Matrix4,
|
||||
Plane,
|
||||
Raycaster,
|
||||
Vector2,
|
||||
Vector3
|
||||
} from 'three';
|
||||
|
||||
const _plane = new Plane();
|
||||
const _raycaster = new Raycaster();
|
||||
|
||||
const _pointer = new Vector2();
|
||||
const _offset = new Vector3();
|
||||
const _intersection = new Vector3();
|
||||
const _worldPosition = new Vector3();
|
||||
const _inverseMatrix = new Matrix4();
|
||||
|
||||
class DragControls extends EventDispatcher {
|
||||
|
||||
constructor( _objects, _camera, _domElement ) {
|
||||
|
||||
super();
|
||||
|
||||
_domElement.style.touchAction = 'none'; // disable touch scroll
|
||||
|
||||
let _selected = null, _hovered = null;
|
||||
|
||||
const _intersections = [];
|
||||
|
||||
//
|
||||
|
||||
const scope = this;
|
||||
|
||||
function activate() {
|
||||
|
||||
_domElement.addEventListener( 'pointermove', onPointerMove );
|
||||
_domElement.addEventListener( 'pointerdown', onPointerDown );
|
||||
_domElement.addEventListener( 'pointerup', onPointerCancel );
|
||||
_domElement.addEventListener( 'pointerleave', onPointerCancel );
|
||||
|
||||
}
|
||||
|
||||
function deactivate() {
|
||||
|
||||
_domElement.removeEventListener( 'pointermove', onPointerMove );
|
||||
_domElement.removeEventListener( 'pointerdown', onPointerDown );
|
||||
_domElement.removeEventListener( 'pointerup', onPointerCancel );
|
||||
_domElement.removeEventListener( 'pointerleave', onPointerCancel );
|
||||
|
||||
_domElement.style.cursor = '';
|
||||
|
||||
}
|
||||
|
||||
function dispose() {
|
||||
|
||||
deactivate();
|
||||
|
||||
}
|
||||
|
||||
function getObjects() {
|
||||
|
||||
return _objects;
|
||||
|
||||
}
|
||||
|
||||
function getRaycaster() {
|
||||
|
||||
return _raycaster;
|
||||
|
||||
}
|
||||
|
||||
function onPointerMove( event ) {
|
||||
|
||||
if ( scope.enabled === false ) return;
|
||||
|
||||
updatePointer( event );
|
||||
|
||||
_raycaster.setFromCamera( _pointer, _camera );
|
||||
|
||||
if ( _selected ) {
|
||||
|
||||
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
|
||||
|
||||
_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );
|
||||
|
||||
}
|
||||
|
||||
scope.dispatchEvent( { type: 'drag', object: _selected } );
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
// hover support
|
||||
|
||||
if ( event.pointerType === 'mouse' || event.pointerType === 'pen' ) {
|
||||
|
||||
_intersections.length = 0;
|
||||
|
||||
_raycaster.setFromCamera( _pointer, _camera );
|
||||
_raycaster.intersectObjects( _objects, scope.recursive, _intersections );
|
||||
|
||||
if ( _intersections.length > 0 ) {
|
||||
|
||||
const object = _intersections[ 0 ].object;
|
||||
|
||||
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );
|
||||
|
||||
if ( _hovered !== object && _hovered !== null ) {
|
||||
|
||||
scope.dispatchEvent( { type: 'hoveroff', object: _hovered } );
|
||||
|
||||
_domElement.style.cursor = 'auto';
|
||||
_hovered = null;
|
||||
|
||||
}
|
||||
|
||||
if ( _hovered !== object ) {
|
||||
|
||||
scope.dispatchEvent( { type: 'hoveron', object: object } );
|
||||
|
||||
_domElement.style.cursor = 'pointer';
|
||||
_hovered = object;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ( _hovered !== null ) {
|
||||
|
||||
scope.dispatchEvent( { type: 'hoveroff', object: _hovered } );
|
||||
|
||||
_domElement.style.cursor = 'auto';
|
||||
_hovered = null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function onPointerDown( event ) {
|
||||
|
||||
if ( scope.enabled === false ) return;
|
||||
|
||||
updatePointer( event );
|
||||
|
||||
_intersections.length = 0;
|
||||
|
||||
_raycaster.setFromCamera( _pointer, _camera );
|
||||
_raycaster.intersectObjects( _objects, scope.recursive, _intersections );
|
||||
|
||||
if ( _intersections.length > 0 ) {
|
||||
|
||||
_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;
|
||||
|
||||
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
|
||||
|
||||
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
|
||||
|
||||
_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();
|
||||
_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
|
||||
|
||||
}
|
||||
|
||||
_domElement.style.cursor = 'move';
|
||||
|
||||
scope.dispatchEvent( { type: 'dragstart', object: _selected } );
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onPointerCancel() {
|
||||
|
||||
if ( scope.enabled === false ) return;
|
||||
|
||||
if ( _selected ) {
|
||||
|
||||
scope.dispatchEvent( { type: 'dragend', object: _selected } );
|
||||
|
||||
_selected = null;
|
||||
|
||||
}
|
||||
|
||||
_domElement.style.cursor = _hovered ? 'pointer' : 'auto';
|
||||
|
||||
}
|
||||
|
||||
function updatePointer( event ) {
|
||||
|
||||
const rect = _domElement.getBoundingClientRect();
|
||||
|
||||
_pointer.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;
|
||||
_pointer.y = - ( event.clientY - rect.top ) / rect.height * 2 + 1;
|
||||
|
||||
}
|
||||
|
||||
activate();
|
||||
|
||||
// API
|
||||
|
||||
this.enabled = true;
|
||||
this.recursive = true;
|
||||
this.transformGroup = false;
|
||||
|
||||
this.activate = activate;
|
||||
this.deactivate = deactivate;
|
||||
this.dispose = dispose;
|
||||
this.getObjects = getObjects;
|
||||
this.getRaycaster = getRaycaster;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export { DragControls };
|
||||
1417
dev/STEPViewer/libs/OrbitControls.js
Normal file
148
dev/STEPViewer/libs/RoomEnvironment.js
Normal file
@@ -0,0 +1,148 @@
|
||||
/**
|
||||
* https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts
|
||||
*/
|
||||
|
||||
import {
|
||||
BackSide,
|
||||
BoxGeometry,
|
||||
Mesh,
|
||||
MeshBasicMaterial,
|
||||
MeshStandardMaterial,
|
||||
PointLight,
|
||||
Scene,
|
||||
} from 'three';
|
||||
|
||||
class RoomEnvironment extends Scene {
|
||||
|
||||
constructor( renderer = null ) {
|
||||
|
||||
super();
|
||||
|
||||
const geometry = new BoxGeometry();
|
||||
geometry.deleteAttribute( 'uv' );
|
||||
|
||||
const roomMaterial = new MeshStandardMaterial( { side: BackSide } );
|
||||
const boxMaterial = new MeshStandardMaterial();
|
||||
|
||||
let intensity = 5;
|
||||
|
||||
if ( renderer !== null && renderer._useLegacyLights === false ) intensity = 900;
|
||||
|
||||
const mainLight = new PointLight( 0xffffff, intensity, 28, 2 );
|
||||
mainLight.position.set( 0.418, 16.199, 0.300 );
|
||||
this.add( mainLight );
|
||||
|
||||
const room = new Mesh( geometry, roomMaterial );
|
||||
room.position.set( - 0.757, 13.219, 0.717 );
|
||||
room.scale.set( 31.713, 28.305, 28.591 );
|
||||
this.add( room );
|
||||
|
||||
const box1 = new Mesh( geometry, boxMaterial );
|
||||
box1.position.set( - 10.906, 2.009, 1.846 );
|
||||
box1.rotation.set( 0, - 0.195, 0 );
|
||||
box1.scale.set( 2.328, 7.905, 4.651 );
|
||||
this.add( box1 );
|
||||
|
||||
const box2 = new Mesh( geometry, boxMaterial );
|
||||
box2.position.set( - 5.607, - 0.754, - 0.758 );
|
||||
box2.rotation.set( 0, 0.994, 0 );
|
||||
box2.scale.set( 1.970, 1.534, 3.955 );
|
||||
this.add( box2 );
|
||||
|
||||
const box3 = new Mesh( geometry, boxMaterial );
|
||||
box3.position.set( 6.167, 0.857, 7.803 );
|
||||
box3.rotation.set( 0, 0.561, 0 );
|
||||
box3.scale.set( 3.927, 6.285, 3.687 );
|
||||
this.add( box3 );
|
||||
|
||||
const box4 = new Mesh( geometry, boxMaterial );
|
||||
box4.position.set( - 2.017, 0.018, 6.124 );
|
||||
box4.rotation.set( 0, 0.333, 0 );
|
||||
box4.scale.set( 2.002, 4.566, 2.064 );
|
||||
this.add( box4 );
|
||||
|
||||
const box5 = new Mesh( geometry, boxMaterial );
|
||||
box5.position.set( 2.291, - 0.756, - 2.621 );
|
||||
box5.rotation.set( 0, - 0.286, 0 );
|
||||
box5.scale.set( 1.546, 1.552, 1.496 );
|
||||
this.add( box5 );
|
||||
|
||||
const box6 = new Mesh( geometry, boxMaterial );
|
||||
box6.position.set( - 2.193, - 0.369, - 5.547 );
|
||||
box6.rotation.set( 0, 0.516, 0 );
|
||||
box6.scale.set( 3.875, 3.487, 2.986 );
|
||||
this.add( box6 );
|
||||
|
||||
|
||||
// -x right
|
||||
const light1 = new Mesh( geometry, createAreaLightMaterial( 50 ) );
|
||||
light1.position.set( - 16.116, 14.37, 8.208 );
|
||||
light1.scale.set( 0.1, 2.428, 2.739 );
|
||||
this.add( light1 );
|
||||
|
||||
// -x left
|
||||
const light2 = new Mesh( geometry, createAreaLightMaterial( 50 ) );
|
||||
light2.position.set( - 16.109, 18.021, - 8.207 );
|
||||
light2.scale.set( 0.1, 2.425, 2.751 );
|
||||
this.add( light2 );
|
||||
|
||||
// +x
|
||||
const light3 = new Mesh( geometry, createAreaLightMaterial( 17 ) );
|
||||
light3.position.set( 14.904, 12.198, - 1.832 );
|
||||
light3.scale.set( 0.15, 4.265, 6.331 );
|
||||
this.add( light3 );
|
||||
|
||||
// +z
|
||||
const light4 = new Mesh( geometry, createAreaLightMaterial( 43 ) );
|
||||
light4.position.set( - 0.462, 8.89, 14.520 );
|
||||
light4.scale.set( 4.38, 5.441, 0.088 );
|
||||
this.add( light4 );
|
||||
|
||||
// -z
|
||||
const light5 = new Mesh( geometry, createAreaLightMaterial( 20 ) );
|
||||
light5.position.set( 3.235, 11.486, - 12.541 );
|
||||
light5.scale.set( 2.5, 2.0, 0.1 );
|
||||
this.add( light5 );
|
||||
|
||||
// +y
|
||||
const light6 = new Mesh( geometry, createAreaLightMaterial( 100 ) );
|
||||
light6.position.set( 0.0, 20.0, 0.0 );
|
||||
light6.scale.set( 1.0, 0.1, 1.0 );
|
||||
this.add( light6 );
|
||||
|
||||
}
|
||||
|
||||
dispose() {
|
||||
|
||||
const resources = new Set();
|
||||
|
||||
this.traverse( ( object ) => {
|
||||
|
||||
if ( object.isMesh ) {
|
||||
|
||||
resources.add( object.geometry );
|
||||
resources.add( object.material );
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
for ( const resource of resources ) {
|
||||
|
||||
resource.dispose();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function createAreaLightMaterial( intensity ) {
|
||||
|
||||
const material = new MeshBasicMaterial();
|
||||
material.color.setScalar( intensity );
|
||||
return material;
|
||||
|
||||
}
|
||||
|
||||
export { RoomEnvironment };
|
||||
19
dev/STEPViewer/libs/occt-import-js.js
Normal file
BIN
dev/STEPViewer/libs/occt-import-js.wasm
Normal file
6
dev/STEPViewer/libs/three.module.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
1abd7a4468154d459893c526a5c4ad41
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":3,"runId":"1abd7a4468154d459893c526a5c4ad41","pid":37024,"host":"pc2511","kind":"step-package","intent":"write","startedAt":1787997842170,"outcome":"done","updatedAt":1787997865358,"phase":"done","label":"Done","index":0,"count":0,"detail":"","done":0,"total":null,"determinate":false,"phaseStartedAt":1787997865358,"elapsedMs":0,"stageMs":{"generate":22775,"package":54,"components":291,"finalize":5}}
|
||||
8362
dev/STEPViewer/samples/as1-oc-214.stp
Normal file
9148
dev/STEPViewer/samples/user/LZ01001001_H100_2mm.stp
Normal file
9833
dev/STEPViewer/samples/user/LZ01001005_H500_2mm.stp
Normal file
9707
dev/STEPViewer/samples/user/LZ01002002_H150_2mm.stp
Normal file
12382
dev/STEPViewer/samples/user/LZ01003001_H100_2mm.stp
Normal file
10081
dev/STEPViewer/samples/user/LZ01003002_H200_2mm.stp
Normal file
10420
dev/STEPViewer/samples/user/LZ01003003_H300_2mm.stp
Normal file
10420
dev/STEPViewer/samples/user/LZ01003004_H400_2mm.stp
Normal file
10420
dev/STEPViewer/samples/user/LZ01003005_H500_2mm.stp
Normal file
9025
dev/STEPViewer/samples/user/LZ01004001_H50_2mm.stp
Normal file
10286
dev/STEPViewer/samples/user/LZ01004002_H150_2mm.stp
Normal file
10567
dev/STEPViewer/samples/user/LZ01004003_H250_2mm.stp
Normal file
12558
dev/STEPViewer/samples/user/LZ01004004_H350_2mm.stp
Normal file
10567
dev/STEPViewer/samples/user/LZ01004005_H450_2mm.stp
Normal file
@@ -0,0 +1 @@
|
||||
7b6fad96540640f1826d003d2681fe5d
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":3,"runId":"7b6fad96540640f1826d003d2681fe5d","pid":37024,"host":"pc2511","kind":"step-package","intent":"write","startedAt":1787997977265,"outcome":"done","updatedAt":1787997987714,"phase":"done","label":"Done","index":0,"count":0,"detail":"","done":0,"total":null,"determinate":false,"phaseStartedAt":1787997987714,"elapsedMs":0,"stageMs":{"generate":9984,"package":5,"components":400,"finalize":5}}
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion": 2, "profile": "index", "entryKind": "part", "capabilities": {"edgeClassification": {"algorithm": "oc-brep-continuity-v1", "angularToleranceDeg": 2, "samples": 3}, "surfaceEdgeRendering": {"algorithm": "oc-polygon-on-triangulation-v1", "primitiveAttributes": {"barycentric": "_CAD_EDGE_BARYCENTRIC", "class": "_CAD_EDGE_CLASS"}, "classCodes": {"none": 0, "feature": 1, "tangent": 2, "seam": 3, "degenerate": 4, "boundary": 5, "nonManifold": 6, "unknown": 7}, "visibilityClasses": ["feature", "tangent", "seam", "degenerate"]}}, "sourceKind": "step", "stepPath": "LZ01001005_H500_2mm.stp", "stepHash": "63fc52e61503276e909a1ccec80d3875ad8e39f9dabdb9c6ac768ba89e9e8f22", "edgeRendering": {"visibilityClasses": ["feature", "tangent", "seam", "degenerate"]}, "mesh": {"linearDeflection": 0.175, "angularDeflection": 0.3, "relative": true, "resolution": {"mode": "auto", "profile": "fine", "linearExplicit": false, "angularExplicit": false, "hints": {"bboxDiag": 583.289, "prototypeFaceCount": 263, "prototypeEdgeCount": 718, "prototypeCurvedFaceCount": 105, "prototypeCurvedEdgeCount": 237, "occurrenceFaceCount": 263, "occurrenceEdgeCount": 718, "occurrenceCurvedFaceCount": 105, "occurrenceCurvedEdgeCount": 237, "leafOccurrenceCount": 1, "complexityScore": 669.8, "effectiveComplexityScore": 790.364, "curvaturePressureScore": 660.918, "scaleFloorTolerance": 0.175, "profile": "fine"}}}, "kind": "assembly-package", "packageSchemaVersion": 3, "rootName": "LZ01001005_H500_2mm", "units": "mm", "components": {"009bce5b2a8ce1b3": {"glb": "components/009bce5b2a8ce1b3.glb", "contentHash": "009bce5b2a8ce1b3d349cd4ce8aba2c25e6809700bb12973d3da2472ef625941"}}, "occurrences": [{"id": "o1.1", "name": "LZ01001005_H500_stp", "component": "009bce5b2a8ce1b3", "transform": [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]}], "assemblyMates": [], "bbox": {"min": [-1.3005986552922309e-05, -1.3005983292200751e-05, -37.500013005983476], "max": [565.0000130059832, 124.00001300598316, 37.50001300598407]}, "stats": {"occurrenceCount": 1, "shapeCount": 1}}
|
||||
195
dev/STEPViewer/step/KC-00-100x10.step
Normal file
@@ -0,0 +1,195 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ONEBOT simplified sample geometry'),'2;1');
|
||||
FILE_NAME('KC-00-100x10.step','2026-08-22T00:00:00',('ONEBOT'),('ONEBOT'),'','','');
|
||||
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=DIRECTION('',(0.,0.,1.));
|
||||
#2=CARTESIAN_POINT('',(0,0,-8));
|
||||
#3=CARTESIAN_POINT('',(0,0,0));
|
||||
#4=DIRECTION('',(1.,0.,0.));
|
||||
#5=AXIS2_PLACEMENT_3D('',#2,#1,#4);
|
||||
#6=CARTESIAN_POINT('',(0,56,-8));
|
||||
#7=CARTESIAN_POINT('',(0,56,0));
|
||||
#8=VERTEX_POINT('',#6);
|
||||
#9=VERTEX_POINT('',#7);
|
||||
#10=CIRCLE('',#5,56);
|
||||
#11=EDGE_CURVE('',#8,#8,#10,.T.);
|
||||
#12=CYLINDRICAL_SURFACE('',#5,56);
|
||||
#13=PLANE('',#5);
|
||||
#14=DIRECTION('',(0.,0.,1.));
|
||||
#15=AXIS2_PLACEMENT_3D('',#3,#14,#4);
|
||||
#16=PLANE('',#15);
|
||||
#17=CIRCLE('',#15,56);
|
||||
#18=EDGE_CURVE('',#9,#9,#17,.T.);
|
||||
#19=DIRECTION('',(0.,0.,1.));
|
||||
#20=VECTOR('',#19,1.);
|
||||
#21=LINE('',#6,#20);
|
||||
#22=EDGE_CURVE('',#8,#9,#21,.T.);
|
||||
#23=ORIENTED_EDGE('',*,*,#11,.T.);
|
||||
#24=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#25=ORIENTED_EDGE('',*,*,#22,.T.);
|
||||
#26=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#27=ORIENTED_EDGE('',*,*,#22,.F.);
|
||||
#28=ORIENTED_EDGE('',*,*,#11,.F.);
|
||||
#29=EDGE_LOOP('',(#23));
|
||||
#30=EDGE_LOOP('',(#24));
|
||||
#31=EDGE_LOOP('',(#25,#26,#27,#28));
|
||||
#32=ADVANCED_FACE('',(#31),#12,.T.);
|
||||
#33=ADVANCED_FACE('',(#29),#13,.F.);
|
||||
#34=ADVANCED_FACE('',(#30),#16,.T.);
|
||||
#35=CLOSED_SHELL('',(#32,#33,#34));
|
||||
#36=MANIFOLD_SOLID_BREP('',#35);
|
||||
#37=DIRECTION('',(0.,0.,1.));
|
||||
#38=CARTESIAN_POINT('',(0,0,0));
|
||||
#39=CARTESIAN_POINT('',(0,0,150));
|
||||
#40=DIRECTION('',(1.,0.,0.));
|
||||
#41=AXIS2_PLACEMENT_3D('',#38,#37,#40);
|
||||
#42=CARTESIAN_POINT('',(0,53,0));
|
||||
#43=CARTESIAN_POINT('',(0,53,150));
|
||||
#44=VERTEX_POINT('',#42);
|
||||
#45=VERTEX_POINT('',#43);
|
||||
#46=CIRCLE('',#41,53);
|
||||
#47=EDGE_CURVE('',#44,#44,#46,.T.);
|
||||
#48=CYLINDRICAL_SURFACE('',#41,53);
|
||||
#49=PLANE('',#41);
|
||||
#50=DIRECTION('',(0.,0.,1.));
|
||||
#51=AXIS2_PLACEMENT_3D('',#39,#50,#40);
|
||||
#52=PLANE('',#51);
|
||||
#53=CIRCLE('',#51,53);
|
||||
#54=EDGE_CURVE('',#45,#45,#53,.T.);
|
||||
#55=DIRECTION('',(0.,0.,1.));
|
||||
#56=VECTOR('',#55,1.);
|
||||
#57=LINE('',#42,#56);
|
||||
#58=EDGE_CURVE('',#44,#45,#57,.T.);
|
||||
#59=ORIENTED_EDGE('',*,*,#47,.T.);
|
||||
#60=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#61=ORIENTED_EDGE('',*,*,#58,.T.);
|
||||
#62=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#63=ORIENTED_EDGE('',*,*,#58,.F.);
|
||||
#64=ORIENTED_EDGE('',*,*,#47,.F.);
|
||||
#65=EDGE_LOOP('',(#59));
|
||||
#66=EDGE_LOOP('',(#60));
|
||||
#67=EDGE_LOOP('',(#61,#62,#63,#64));
|
||||
#68=ADVANCED_FACE('',(#67),#48,.T.);
|
||||
#69=ADVANCED_FACE('',(#65),#49,.F.);
|
||||
#70=ADVANCED_FACE('',(#66),#52,.T.);
|
||||
#71=CLOSED_SHELL('',(#68,#69,#70));
|
||||
#72=MANIFOLD_SOLID_BREP('',#71);
|
||||
#73=DIRECTION('',(0.,0.,1.));
|
||||
#74=CARTESIAN_POINT('',(0,0,150));
|
||||
#75=CARTESIAN_POINT('',(0,0,160));
|
||||
#76=DIRECTION('',(1.,0.,0.));
|
||||
#77=AXIS2_PLACEMENT_3D('',#74,#73,#76);
|
||||
#78=CARTESIAN_POINT('',(0,56,150));
|
||||
#79=CARTESIAN_POINT('',(0,56,160));
|
||||
#80=VERTEX_POINT('',#78);
|
||||
#81=VERTEX_POINT('',#79);
|
||||
#82=CIRCLE('',#77,56);
|
||||
#83=EDGE_CURVE('',#80,#80,#82,.T.);
|
||||
#84=CYLINDRICAL_SURFACE('',#77,56);
|
||||
#85=PLANE('',#77);
|
||||
#86=DIRECTION('',(0.,0.,1.));
|
||||
#87=AXIS2_PLACEMENT_3D('',#75,#86,#76);
|
||||
#88=PLANE('',#87);
|
||||
#89=CIRCLE('',#87,56);
|
||||
#90=EDGE_CURVE('',#81,#81,#89,.T.);
|
||||
#91=DIRECTION('',(0.,0.,1.));
|
||||
#92=VECTOR('',#91,1.);
|
||||
#93=LINE('',#78,#92);
|
||||
#94=EDGE_CURVE('',#80,#81,#93,.T.);
|
||||
#95=ORIENTED_EDGE('',*,*,#83,.T.);
|
||||
#96=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#97=ORIENTED_EDGE('',*,*,#94,.T.);
|
||||
#98=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#99=ORIENTED_EDGE('',*,*,#94,.F.);
|
||||
#100=ORIENTED_EDGE('',*,*,#83,.F.);
|
||||
#101=EDGE_LOOP('',(#95));
|
||||
#102=EDGE_LOOP('',(#96));
|
||||
#103=EDGE_LOOP('',(#97,#98,#99,#100));
|
||||
#104=ADVANCED_FACE('',(#103),#84,.T.);
|
||||
#105=ADVANCED_FACE('',(#101),#85,.F.);
|
||||
#106=ADVANCED_FACE('',(#102),#88,.T.);
|
||||
#107=CLOSED_SHELL('',(#104,#105,#106));
|
||||
#108=MANIFOLD_SOLID_BREP('',#107);
|
||||
#109=DIRECTION('',(0.,0.,1.));
|
||||
#110=CARTESIAN_POINT('',(0,0,138));
|
||||
#111=CARTESIAN_POINT('',(0,0,174));
|
||||
#112=DIRECTION('',(1.,0.,0.));
|
||||
#113=AXIS2_PLACEMENT_3D('',#110,#109,#112);
|
||||
#114=CARTESIAN_POINT('',(0,14.286,138));
|
||||
#115=CARTESIAN_POINT('',(0,14.286,174));
|
||||
#116=VERTEX_POINT('',#114);
|
||||
#117=VERTEX_POINT('',#115);
|
||||
#118=CIRCLE('',#113,14.286);
|
||||
#119=EDGE_CURVE('',#116,#116,#118,.T.);
|
||||
#120=CYLINDRICAL_SURFACE('',#113,14.286);
|
||||
#121=PLANE('',#113);
|
||||
#122=DIRECTION('',(0.,0.,1.));
|
||||
#123=AXIS2_PLACEMENT_3D('',#111,#122,#112);
|
||||
#124=PLANE('',#123);
|
||||
#125=CIRCLE('',#123,14.286);
|
||||
#126=EDGE_CURVE('',#117,#117,#125,.T.);
|
||||
#127=DIRECTION('',(0.,0.,1.));
|
||||
#128=VECTOR('',#127,1.);
|
||||
#129=LINE('',#114,#128);
|
||||
#130=EDGE_CURVE('',#116,#117,#129,.T.);
|
||||
#131=ORIENTED_EDGE('',*,*,#119,.T.);
|
||||
#132=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#133=ORIENTED_EDGE('',*,*,#130,.T.);
|
||||
#134=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#135=ORIENTED_EDGE('',*,*,#130,.F.);
|
||||
#136=ORIENTED_EDGE('',*,*,#119,.F.);
|
||||
#137=EDGE_LOOP('',(#131));
|
||||
#138=EDGE_LOOP('',(#132));
|
||||
#139=EDGE_LOOP('',(#133,#134,#135,#136));
|
||||
#140=ADVANCED_FACE('',(#139),#120,.T.);
|
||||
#141=ADVANCED_FACE('',(#137),#121,.F.);
|
||||
#142=ADVANCED_FACE('',(#138),#124,.T.);
|
||||
#143=CLOSED_SHELL('',(#140,#141,#142));
|
||||
#144=MANIFOLD_SOLID_BREP('',#143);
|
||||
#145=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#146=FILL_AREA_STYLE_COLOUR('',#145);
|
||||
#147=SURFACE_STYLE_FILL_AREA(#146);
|
||||
#148=SURFACE_SIDE_STYLE('',(#147));
|
||||
#149=SURFACE_STYLE_USAGE(.BOTH.,#148);
|
||||
#150=PRESENTATION_STYLE_ASSIGNMENT((#149));
|
||||
#151=STYLED_ITEM('',(#150),#36);
|
||||
#152=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#153=FILL_AREA_STYLE_COLOUR('',#152);
|
||||
#154=SURFACE_STYLE_FILL_AREA(#153);
|
||||
#155=SURFACE_SIDE_STYLE('',(#154));
|
||||
#156=SURFACE_STYLE_USAGE(.BOTH.,#155);
|
||||
#157=PRESENTATION_STYLE_ASSIGNMENT((#156));
|
||||
#158=STYLED_ITEM('',(#157),#72);
|
||||
#159=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#160=FILL_AREA_STYLE_COLOUR('',#159);
|
||||
#161=SURFACE_STYLE_FILL_AREA(#160);
|
||||
#162=SURFACE_SIDE_STYLE('',(#161));
|
||||
#163=SURFACE_STYLE_USAGE(.BOTH.,#162);
|
||||
#164=PRESENTATION_STYLE_ASSIGNMENT((#163));
|
||||
#165=STYLED_ITEM('',(#164),#108);
|
||||
#166=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#167=FILL_AREA_STYLE_COLOUR('',#166);
|
||||
#168=SURFACE_STYLE_FILL_AREA(#167);
|
||||
#169=SURFACE_SIDE_STYLE('',(#168));
|
||||
#170=SURFACE_STYLE_USAGE(.BOTH.,#169);
|
||||
#171=PRESENTATION_STYLE_ASSIGNMENT((#170));
|
||||
#172=STYLED_ITEM('',(#171),#144);
|
||||
#173=SHAPE_REPRESENTATION('',(#36,#72,#108,#144,#151,#158,#165,#172),#174);
|
||||
#174=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#175))GLOBAL_UNIT_ASSIGNED_CONTEXT((#176,#177,#178))REPRESENTATION_CONTEXT('',''));
|
||||
#175=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-06),#176,'');
|
||||
#176=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
|
||||
#177=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
|
||||
#178=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
|
||||
#179=PRODUCT('ONEBOT','ONEBOT','',(#180));
|
||||
#180=PRODUCT_CONTEXT('',#181,'mechanical');
|
||||
#181=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
|
||||
#182=PRODUCT_DEFINITION_FORMATION('','',#179);
|
||||
#183=PRODUCT_DEFINITION('design','',#182,#184);
|
||||
#184=PRODUCT_DEFINITION_CONTEXT('part definition',#181,'design');
|
||||
#185=PRODUCT_DEFINITION_SHAPE('','',#183);
|
||||
#186=SHAPE_DEFINITION_REPRESENTATION(#185,#173);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
195
dev/STEPViewer/step/KC-00-100x100.step
Normal file
@@ -0,0 +1,195 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ONEBOT simplified sample geometry'),'2;1');
|
||||
FILE_NAME('KC-00-100x100.step','2026-08-22T00:00:00',('ONEBOT'),('ONEBOT'),'','','');
|
||||
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=DIRECTION('',(0.,0.,1.));
|
||||
#2=CARTESIAN_POINT('',(0,0,-8));
|
||||
#3=CARTESIAN_POINT('',(0,0,0));
|
||||
#4=DIRECTION('',(1.,0.,0.));
|
||||
#5=AXIS2_PLACEMENT_3D('',#2,#1,#4);
|
||||
#6=CARTESIAN_POINT('',(0,56,-8));
|
||||
#7=CARTESIAN_POINT('',(0,56,0));
|
||||
#8=VERTEX_POINT('',#6);
|
||||
#9=VERTEX_POINT('',#7);
|
||||
#10=CIRCLE('',#5,56);
|
||||
#11=EDGE_CURVE('',#8,#8,#10,.T.);
|
||||
#12=CYLINDRICAL_SURFACE('',#5,56);
|
||||
#13=PLANE('',#5);
|
||||
#14=DIRECTION('',(0.,0.,1.));
|
||||
#15=AXIS2_PLACEMENT_3D('',#3,#14,#4);
|
||||
#16=PLANE('',#15);
|
||||
#17=CIRCLE('',#15,56);
|
||||
#18=EDGE_CURVE('',#9,#9,#17,.T.);
|
||||
#19=DIRECTION('',(0.,0.,1.));
|
||||
#20=VECTOR('',#19,1.);
|
||||
#21=LINE('',#6,#20);
|
||||
#22=EDGE_CURVE('',#8,#9,#21,.T.);
|
||||
#23=ORIENTED_EDGE('',*,*,#11,.T.);
|
||||
#24=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#25=ORIENTED_EDGE('',*,*,#22,.T.);
|
||||
#26=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#27=ORIENTED_EDGE('',*,*,#22,.F.);
|
||||
#28=ORIENTED_EDGE('',*,*,#11,.F.);
|
||||
#29=EDGE_LOOP('',(#23));
|
||||
#30=EDGE_LOOP('',(#24));
|
||||
#31=EDGE_LOOP('',(#25,#26,#27,#28));
|
||||
#32=ADVANCED_FACE('',(#31),#12,.T.);
|
||||
#33=ADVANCED_FACE('',(#29),#13,.F.);
|
||||
#34=ADVANCED_FACE('',(#30),#16,.T.);
|
||||
#35=CLOSED_SHELL('',(#32,#33,#34));
|
||||
#36=MANIFOLD_SOLID_BREP('',#35);
|
||||
#37=DIRECTION('',(0.,0.,1.));
|
||||
#38=CARTESIAN_POINT('',(0,0,0));
|
||||
#39=CARTESIAN_POINT('',(0,0,240));
|
||||
#40=DIRECTION('',(1.,0.,0.));
|
||||
#41=AXIS2_PLACEMENT_3D('',#38,#37,#40);
|
||||
#42=CARTESIAN_POINT('',(0,53,0));
|
||||
#43=CARTESIAN_POINT('',(0,53,240));
|
||||
#44=VERTEX_POINT('',#42);
|
||||
#45=VERTEX_POINT('',#43);
|
||||
#46=CIRCLE('',#41,53);
|
||||
#47=EDGE_CURVE('',#44,#44,#46,.T.);
|
||||
#48=CYLINDRICAL_SURFACE('',#41,53);
|
||||
#49=PLANE('',#41);
|
||||
#50=DIRECTION('',(0.,0.,1.));
|
||||
#51=AXIS2_PLACEMENT_3D('',#39,#50,#40);
|
||||
#52=PLANE('',#51);
|
||||
#53=CIRCLE('',#51,53);
|
||||
#54=EDGE_CURVE('',#45,#45,#53,.T.);
|
||||
#55=DIRECTION('',(0.,0.,1.));
|
||||
#56=VECTOR('',#55,1.);
|
||||
#57=LINE('',#42,#56);
|
||||
#58=EDGE_CURVE('',#44,#45,#57,.T.);
|
||||
#59=ORIENTED_EDGE('',*,*,#47,.T.);
|
||||
#60=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#61=ORIENTED_EDGE('',*,*,#58,.T.);
|
||||
#62=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#63=ORIENTED_EDGE('',*,*,#58,.F.);
|
||||
#64=ORIENTED_EDGE('',*,*,#47,.F.);
|
||||
#65=EDGE_LOOP('',(#59));
|
||||
#66=EDGE_LOOP('',(#60));
|
||||
#67=EDGE_LOOP('',(#61,#62,#63,#64));
|
||||
#68=ADVANCED_FACE('',(#67),#48,.T.);
|
||||
#69=ADVANCED_FACE('',(#65),#49,.F.);
|
||||
#70=ADVANCED_FACE('',(#66),#52,.T.);
|
||||
#71=CLOSED_SHELL('',(#68,#69,#70));
|
||||
#72=MANIFOLD_SOLID_BREP('',#71);
|
||||
#73=DIRECTION('',(0.,0.,1.));
|
||||
#74=CARTESIAN_POINT('',(0,0,240));
|
||||
#75=CARTESIAN_POINT('',(0,0,250));
|
||||
#76=DIRECTION('',(1.,0.,0.));
|
||||
#77=AXIS2_PLACEMENT_3D('',#74,#73,#76);
|
||||
#78=CARTESIAN_POINT('',(0,56,240));
|
||||
#79=CARTESIAN_POINT('',(0,56,250));
|
||||
#80=VERTEX_POINT('',#78);
|
||||
#81=VERTEX_POINT('',#79);
|
||||
#82=CIRCLE('',#77,56);
|
||||
#83=EDGE_CURVE('',#80,#80,#82,.T.);
|
||||
#84=CYLINDRICAL_SURFACE('',#77,56);
|
||||
#85=PLANE('',#77);
|
||||
#86=DIRECTION('',(0.,0.,1.));
|
||||
#87=AXIS2_PLACEMENT_3D('',#75,#86,#76);
|
||||
#88=PLANE('',#87);
|
||||
#89=CIRCLE('',#87,56);
|
||||
#90=EDGE_CURVE('',#81,#81,#89,.T.);
|
||||
#91=DIRECTION('',(0.,0.,1.));
|
||||
#92=VECTOR('',#91,1.);
|
||||
#93=LINE('',#78,#92);
|
||||
#94=EDGE_CURVE('',#80,#81,#93,.T.);
|
||||
#95=ORIENTED_EDGE('',*,*,#83,.T.);
|
||||
#96=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#97=ORIENTED_EDGE('',*,*,#94,.T.);
|
||||
#98=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#99=ORIENTED_EDGE('',*,*,#94,.F.);
|
||||
#100=ORIENTED_EDGE('',*,*,#83,.F.);
|
||||
#101=EDGE_LOOP('',(#95));
|
||||
#102=EDGE_LOOP('',(#96));
|
||||
#103=EDGE_LOOP('',(#97,#98,#99,#100));
|
||||
#104=ADVANCED_FACE('',(#103),#84,.T.);
|
||||
#105=ADVANCED_FACE('',(#101),#85,.F.);
|
||||
#106=ADVANCED_FACE('',(#102),#88,.T.);
|
||||
#107=CLOSED_SHELL('',(#104,#105,#106));
|
||||
#108=MANIFOLD_SOLID_BREP('',#107);
|
||||
#109=DIRECTION('',(0.,0.,1.));
|
||||
#110=CARTESIAN_POINT('',(0,0,228));
|
||||
#111=CARTESIAN_POINT('',(0,0,354));
|
||||
#112=DIRECTION('',(1.,0.,0.));
|
||||
#113=AXIS2_PLACEMENT_3D('',#110,#109,#112);
|
||||
#114=CARTESIAN_POINT('',(0,14.286,228));
|
||||
#115=CARTESIAN_POINT('',(0,14.286,354));
|
||||
#116=VERTEX_POINT('',#114);
|
||||
#117=VERTEX_POINT('',#115);
|
||||
#118=CIRCLE('',#113,14.286);
|
||||
#119=EDGE_CURVE('',#116,#116,#118,.T.);
|
||||
#120=CYLINDRICAL_SURFACE('',#113,14.286);
|
||||
#121=PLANE('',#113);
|
||||
#122=DIRECTION('',(0.,0.,1.));
|
||||
#123=AXIS2_PLACEMENT_3D('',#111,#122,#112);
|
||||
#124=PLANE('',#123);
|
||||
#125=CIRCLE('',#123,14.286);
|
||||
#126=EDGE_CURVE('',#117,#117,#125,.T.);
|
||||
#127=DIRECTION('',(0.,0.,1.));
|
||||
#128=VECTOR('',#127,1.);
|
||||
#129=LINE('',#114,#128);
|
||||
#130=EDGE_CURVE('',#116,#117,#129,.T.);
|
||||
#131=ORIENTED_EDGE('',*,*,#119,.T.);
|
||||
#132=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#133=ORIENTED_EDGE('',*,*,#130,.T.);
|
||||
#134=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#135=ORIENTED_EDGE('',*,*,#130,.F.);
|
||||
#136=ORIENTED_EDGE('',*,*,#119,.F.);
|
||||
#137=EDGE_LOOP('',(#131));
|
||||
#138=EDGE_LOOP('',(#132));
|
||||
#139=EDGE_LOOP('',(#133,#134,#135,#136));
|
||||
#140=ADVANCED_FACE('',(#139),#120,.T.);
|
||||
#141=ADVANCED_FACE('',(#137),#121,.F.);
|
||||
#142=ADVANCED_FACE('',(#138),#124,.T.);
|
||||
#143=CLOSED_SHELL('',(#140,#141,#142));
|
||||
#144=MANIFOLD_SOLID_BREP('',#143);
|
||||
#145=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#146=FILL_AREA_STYLE_COLOUR('',#145);
|
||||
#147=SURFACE_STYLE_FILL_AREA(#146);
|
||||
#148=SURFACE_SIDE_STYLE('',(#147));
|
||||
#149=SURFACE_STYLE_USAGE(.BOTH.,#148);
|
||||
#150=PRESENTATION_STYLE_ASSIGNMENT((#149));
|
||||
#151=STYLED_ITEM('',(#150),#36);
|
||||
#152=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#153=FILL_AREA_STYLE_COLOUR('',#152);
|
||||
#154=SURFACE_STYLE_FILL_AREA(#153);
|
||||
#155=SURFACE_SIDE_STYLE('',(#154));
|
||||
#156=SURFACE_STYLE_USAGE(.BOTH.,#155);
|
||||
#157=PRESENTATION_STYLE_ASSIGNMENT((#156));
|
||||
#158=STYLED_ITEM('',(#157),#72);
|
||||
#159=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#160=FILL_AREA_STYLE_COLOUR('',#159);
|
||||
#161=SURFACE_STYLE_FILL_AREA(#160);
|
||||
#162=SURFACE_SIDE_STYLE('',(#161));
|
||||
#163=SURFACE_STYLE_USAGE(.BOTH.,#162);
|
||||
#164=PRESENTATION_STYLE_ASSIGNMENT((#163));
|
||||
#165=STYLED_ITEM('',(#164),#108);
|
||||
#166=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#167=FILL_AREA_STYLE_COLOUR('',#166);
|
||||
#168=SURFACE_STYLE_FILL_AREA(#167);
|
||||
#169=SURFACE_SIDE_STYLE('',(#168));
|
||||
#170=SURFACE_STYLE_USAGE(.BOTH.,#169);
|
||||
#171=PRESENTATION_STYLE_ASSIGNMENT((#170));
|
||||
#172=STYLED_ITEM('',(#171),#144);
|
||||
#173=SHAPE_REPRESENTATION('',(#36,#72,#108,#144,#151,#158,#165,#172),#174);
|
||||
#174=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#175))GLOBAL_UNIT_ASSIGNED_CONTEXT((#176,#177,#178))REPRESENTATION_CONTEXT('',''));
|
||||
#175=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-06),#176,'');
|
||||
#176=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
|
||||
#177=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
|
||||
#178=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
|
||||
#179=PRODUCT('ONEBOT','ONEBOT','',(#180));
|
||||
#180=PRODUCT_CONTEXT('',#181,'mechanical');
|
||||
#181=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
|
||||
#182=PRODUCT_DEFINITION_FORMATION('','',#179);
|
||||
#183=PRODUCT_DEFINITION('design','',#182,#184);
|
||||
#184=PRODUCT_DEFINITION_CONTEXT('part definition',#181,'design');
|
||||
#185=PRODUCT_DEFINITION_SHAPE('','',#183);
|
||||
#186=SHAPE_DEFINITION_REPRESENTATION(#185,#173);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
195
dev/STEPViewer/step/KC-00-100x20.step
Normal file
@@ -0,0 +1,195 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ONEBOT simplified sample geometry'),'2;1');
|
||||
FILE_NAME('KC-00-100x20.step','2026-08-22T00:00:00',('ONEBOT'),('ONEBOT'),'','','');
|
||||
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=DIRECTION('',(0.,0.,1.));
|
||||
#2=CARTESIAN_POINT('',(0,0,-8));
|
||||
#3=CARTESIAN_POINT('',(0,0,0));
|
||||
#4=DIRECTION('',(1.,0.,0.));
|
||||
#5=AXIS2_PLACEMENT_3D('',#2,#1,#4);
|
||||
#6=CARTESIAN_POINT('',(0,56,-8));
|
||||
#7=CARTESIAN_POINT('',(0,56,0));
|
||||
#8=VERTEX_POINT('',#6);
|
||||
#9=VERTEX_POINT('',#7);
|
||||
#10=CIRCLE('',#5,56);
|
||||
#11=EDGE_CURVE('',#8,#8,#10,.T.);
|
||||
#12=CYLINDRICAL_SURFACE('',#5,56);
|
||||
#13=PLANE('',#5);
|
||||
#14=DIRECTION('',(0.,0.,1.));
|
||||
#15=AXIS2_PLACEMENT_3D('',#3,#14,#4);
|
||||
#16=PLANE('',#15);
|
||||
#17=CIRCLE('',#15,56);
|
||||
#18=EDGE_CURVE('',#9,#9,#17,.T.);
|
||||
#19=DIRECTION('',(0.,0.,1.));
|
||||
#20=VECTOR('',#19,1.);
|
||||
#21=LINE('',#6,#20);
|
||||
#22=EDGE_CURVE('',#8,#9,#21,.T.);
|
||||
#23=ORIENTED_EDGE('',*,*,#11,.T.);
|
||||
#24=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#25=ORIENTED_EDGE('',*,*,#22,.T.);
|
||||
#26=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#27=ORIENTED_EDGE('',*,*,#22,.F.);
|
||||
#28=ORIENTED_EDGE('',*,*,#11,.F.);
|
||||
#29=EDGE_LOOP('',(#23));
|
||||
#30=EDGE_LOOP('',(#24));
|
||||
#31=EDGE_LOOP('',(#25,#26,#27,#28));
|
||||
#32=ADVANCED_FACE('',(#31),#12,.T.);
|
||||
#33=ADVANCED_FACE('',(#29),#13,.F.);
|
||||
#34=ADVANCED_FACE('',(#30),#16,.T.);
|
||||
#35=CLOSED_SHELL('',(#32,#33,#34));
|
||||
#36=MANIFOLD_SOLID_BREP('',#35);
|
||||
#37=DIRECTION('',(0.,0.,1.));
|
||||
#38=CARTESIAN_POINT('',(0,0,0));
|
||||
#39=CARTESIAN_POINT('',(0,0,160));
|
||||
#40=DIRECTION('',(1.,0.,0.));
|
||||
#41=AXIS2_PLACEMENT_3D('',#38,#37,#40);
|
||||
#42=CARTESIAN_POINT('',(0,53,0));
|
||||
#43=CARTESIAN_POINT('',(0,53,160));
|
||||
#44=VERTEX_POINT('',#42);
|
||||
#45=VERTEX_POINT('',#43);
|
||||
#46=CIRCLE('',#41,53);
|
||||
#47=EDGE_CURVE('',#44,#44,#46,.T.);
|
||||
#48=CYLINDRICAL_SURFACE('',#41,53);
|
||||
#49=PLANE('',#41);
|
||||
#50=DIRECTION('',(0.,0.,1.));
|
||||
#51=AXIS2_PLACEMENT_3D('',#39,#50,#40);
|
||||
#52=PLANE('',#51);
|
||||
#53=CIRCLE('',#51,53);
|
||||
#54=EDGE_CURVE('',#45,#45,#53,.T.);
|
||||
#55=DIRECTION('',(0.,0.,1.));
|
||||
#56=VECTOR('',#55,1.);
|
||||
#57=LINE('',#42,#56);
|
||||
#58=EDGE_CURVE('',#44,#45,#57,.T.);
|
||||
#59=ORIENTED_EDGE('',*,*,#47,.T.);
|
||||
#60=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#61=ORIENTED_EDGE('',*,*,#58,.T.);
|
||||
#62=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#63=ORIENTED_EDGE('',*,*,#58,.F.);
|
||||
#64=ORIENTED_EDGE('',*,*,#47,.F.);
|
||||
#65=EDGE_LOOP('',(#59));
|
||||
#66=EDGE_LOOP('',(#60));
|
||||
#67=EDGE_LOOP('',(#61,#62,#63,#64));
|
||||
#68=ADVANCED_FACE('',(#67),#48,.T.);
|
||||
#69=ADVANCED_FACE('',(#65),#49,.F.);
|
||||
#70=ADVANCED_FACE('',(#66),#52,.T.);
|
||||
#71=CLOSED_SHELL('',(#68,#69,#70));
|
||||
#72=MANIFOLD_SOLID_BREP('',#71);
|
||||
#73=DIRECTION('',(0.,0.,1.));
|
||||
#74=CARTESIAN_POINT('',(0,0,160));
|
||||
#75=CARTESIAN_POINT('',(0,0,170));
|
||||
#76=DIRECTION('',(1.,0.,0.));
|
||||
#77=AXIS2_PLACEMENT_3D('',#74,#73,#76);
|
||||
#78=CARTESIAN_POINT('',(0,56,160));
|
||||
#79=CARTESIAN_POINT('',(0,56,170));
|
||||
#80=VERTEX_POINT('',#78);
|
||||
#81=VERTEX_POINT('',#79);
|
||||
#82=CIRCLE('',#77,56);
|
||||
#83=EDGE_CURVE('',#80,#80,#82,.T.);
|
||||
#84=CYLINDRICAL_SURFACE('',#77,56);
|
||||
#85=PLANE('',#77);
|
||||
#86=DIRECTION('',(0.,0.,1.));
|
||||
#87=AXIS2_PLACEMENT_3D('',#75,#86,#76);
|
||||
#88=PLANE('',#87);
|
||||
#89=CIRCLE('',#87,56);
|
||||
#90=EDGE_CURVE('',#81,#81,#89,.T.);
|
||||
#91=DIRECTION('',(0.,0.,1.));
|
||||
#92=VECTOR('',#91,1.);
|
||||
#93=LINE('',#78,#92);
|
||||
#94=EDGE_CURVE('',#80,#81,#93,.T.);
|
||||
#95=ORIENTED_EDGE('',*,*,#83,.T.);
|
||||
#96=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#97=ORIENTED_EDGE('',*,*,#94,.T.);
|
||||
#98=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#99=ORIENTED_EDGE('',*,*,#94,.F.);
|
||||
#100=ORIENTED_EDGE('',*,*,#83,.F.);
|
||||
#101=EDGE_LOOP('',(#95));
|
||||
#102=EDGE_LOOP('',(#96));
|
||||
#103=EDGE_LOOP('',(#97,#98,#99,#100));
|
||||
#104=ADVANCED_FACE('',(#103),#84,.T.);
|
||||
#105=ADVANCED_FACE('',(#101),#85,.F.);
|
||||
#106=ADVANCED_FACE('',(#102),#88,.T.);
|
||||
#107=CLOSED_SHELL('',(#104,#105,#106));
|
||||
#108=MANIFOLD_SOLID_BREP('',#107);
|
||||
#109=DIRECTION('',(0.,0.,1.));
|
||||
#110=CARTESIAN_POINT('',(0,0,148));
|
||||
#111=CARTESIAN_POINT('',(0,0,194));
|
||||
#112=DIRECTION('',(1.,0.,0.));
|
||||
#113=AXIS2_PLACEMENT_3D('',#110,#109,#112);
|
||||
#114=CARTESIAN_POINT('',(0,14.286,148));
|
||||
#115=CARTESIAN_POINT('',(0,14.286,194));
|
||||
#116=VERTEX_POINT('',#114);
|
||||
#117=VERTEX_POINT('',#115);
|
||||
#118=CIRCLE('',#113,14.286);
|
||||
#119=EDGE_CURVE('',#116,#116,#118,.T.);
|
||||
#120=CYLINDRICAL_SURFACE('',#113,14.286);
|
||||
#121=PLANE('',#113);
|
||||
#122=DIRECTION('',(0.,0.,1.));
|
||||
#123=AXIS2_PLACEMENT_3D('',#111,#122,#112);
|
||||
#124=PLANE('',#123);
|
||||
#125=CIRCLE('',#123,14.286);
|
||||
#126=EDGE_CURVE('',#117,#117,#125,.T.);
|
||||
#127=DIRECTION('',(0.,0.,1.));
|
||||
#128=VECTOR('',#127,1.);
|
||||
#129=LINE('',#114,#128);
|
||||
#130=EDGE_CURVE('',#116,#117,#129,.T.);
|
||||
#131=ORIENTED_EDGE('',*,*,#119,.T.);
|
||||
#132=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#133=ORIENTED_EDGE('',*,*,#130,.T.);
|
||||
#134=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#135=ORIENTED_EDGE('',*,*,#130,.F.);
|
||||
#136=ORIENTED_EDGE('',*,*,#119,.F.);
|
||||
#137=EDGE_LOOP('',(#131));
|
||||
#138=EDGE_LOOP('',(#132));
|
||||
#139=EDGE_LOOP('',(#133,#134,#135,#136));
|
||||
#140=ADVANCED_FACE('',(#139),#120,.T.);
|
||||
#141=ADVANCED_FACE('',(#137),#121,.F.);
|
||||
#142=ADVANCED_FACE('',(#138),#124,.T.);
|
||||
#143=CLOSED_SHELL('',(#140,#141,#142));
|
||||
#144=MANIFOLD_SOLID_BREP('',#143);
|
||||
#145=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#146=FILL_AREA_STYLE_COLOUR('',#145);
|
||||
#147=SURFACE_STYLE_FILL_AREA(#146);
|
||||
#148=SURFACE_SIDE_STYLE('',(#147));
|
||||
#149=SURFACE_STYLE_USAGE(.BOTH.,#148);
|
||||
#150=PRESENTATION_STYLE_ASSIGNMENT((#149));
|
||||
#151=STYLED_ITEM('',(#150),#36);
|
||||
#152=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#153=FILL_AREA_STYLE_COLOUR('',#152);
|
||||
#154=SURFACE_STYLE_FILL_AREA(#153);
|
||||
#155=SURFACE_SIDE_STYLE('',(#154));
|
||||
#156=SURFACE_STYLE_USAGE(.BOTH.,#155);
|
||||
#157=PRESENTATION_STYLE_ASSIGNMENT((#156));
|
||||
#158=STYLED_ITEM('',(#157),#72);
|
||||
#159=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#160=FILL_AREA_STYLE_COLOUR('',#159);
|
||||
#161=SURFACE_STYLE_FILL_AREA(#160);
|
||||
#162=SURFACE_SIDE_STYLE('',(#161));
|
||||
#163=SURFACE_STYLE_USAGE(.BOTH.,#162);
|
||||
#164=PRESENTATION_STYLE_ASSIGNMENT((#163));
|
||||
#165=STYLED_ITEM('',(#164),#108);
|
||||
#166=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#167=FILL_AREA_STYLE_COLOUR('',#166);
|
||||
#168=SURFACE_STYLE_FILL_AREA(#167);
|
||||
#169=SURFACE_SIDE_STYLE('',(#168));
|
||||
#170=SURFACE_STYLE_USAGE(.BOTH.,#169);
|
||||
#171=PRESENTATION_STYLE_ASSIGNMENT((#170));
|
||||
#172=STYLED_ITEM('',(#171),#144);
|
||||
#173=SHAPE_REPRESENTATION('',(#36,#72,#108,#144,#151,#158,#165,#172),#174);
|
||||
#174=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#175))GLOBAL_UNIT_ASSIGNED_CONTEXT((#176,#177,#178))REPRESENTATION_CONTEXT('',''));
|
||||
#175=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-06),#176,'');
|
||||
#176=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
|
||||
#177=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
|
||||
#178=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
|
||||
#179=PRODUCT('ONEBOT','ONEBOT','',(#180));
|
||||
#180=PRODUCT_CONTEXT('',#181,'mechanical');
|
||||
#181=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
|
||||
#182=PRODUCT_DEFINITION_FORMATION('','',#179);
|
||||
#183=PRODUCT_DEFINITION('design','',#182,#184);
|
||||
#184=PRODUCT_DEFINITION_CONTEXT('part definition',#181,'design');
|
||||
#185=PRODUCT_DEFINITION_SHAPE('','',#183);
|
||||
#186=SHAPE_DEFINITION_REPRESENTATION(#185,#173);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
195
dev/STEPViewer/step/KC-00-100x30.step
Normal file
@@ -0,0 +1,195 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ONEBOT simplified sample geometry'),'2;1');
|
||||
FILE_NAME('KC-00-100x30.step','2026-08-22T00:00:00',('ONEBOT'),('ONEBOT'),'','','');
|
||||
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=DIRECTION('',(0.,0.,1.));
|
||||
#2=CARTESIAN_POINT('',(0,0,-8));
|
||||
#3=CARTESIAN_POINT('',(0,0,0));
|
||||
#4=DIRECTION('',(1.,0.,0.));
|
||||
#5=AXIS2_PLACEMENT_3D('',#2,#1,#4);
|
||||
#6=CARTESIAN_POINT('',(0,56,-8));
|
||||
#7=CARTESIAN_POINT('',(0,56,0));
|
||||
#8=VERTEX_POINT('',#6);
|
||||
#9=VERTEX_POINT('',#7);
|
||||
#10=CIRCLE('',#5,56);
|
||||
#11=EDGE_CURVE('',#8,#8,#10,.T.);
|
||||
#12=CYLINDRICAL_SURFACE('',#5,56);
|
||||
#13=PLANE('',#5);
|
||||
#14=DIRECTION('',(0.,0.,1.));
|
||||
#15=AXIS2_PLACEMENT_3D('',#3,#14,#4);
|
||||
#16=PLANE('',#15);
|
||||
#17=CIRCLE('',#15,56);
|
||||
#18=EDGE_CURVE('',#9,#9,#17,.T.);
|
||||
#19=DIRECTION('',(0.,0.,1.));
|
||||
#20=VECTOR('',#19,1.);
|
||||
#21=LINE('',#6,#20);
|
||||
#22=EDGE_CURVE('',#8,#9,#21,.T.);
|
||||
#23=ORIENTED_EDGE('',*,*,#11,.T.);
|
||||
#24=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#25=ORIENTED_EDGE('',*,*,#22,.T.);
|
||||
#26=ORIENTED_EDGE('',*,*,#18,.T.);
|
||||
#27=ORIENTED_EDGE('',*,*,#22,.F.);
|
||||
#28=ORIENTED_EDGE('',*,*,#11,.F.);
|
||||
#29=EDGE_LOOP('',(#23));
|
||||
#30=EDGE_LOOP('',(#24));
|
||||
#31=EDGE_LOOP('',(#25,#26,#27,#28));
|
||||
#32=ADVANCED_FACE('',(#31),#12,.T.);
|
||||
#33=ADVANCED_FACE('',(#29),#13,.F.);
|
||||
#34=ADVANCED_FACE('',(#30),#16,.T.);
|
||||
#35=CLOSED_SHELL('',(#32,#33,#34));
|
||||
#36=MANIFOLD_SOLID_BREP('',#35);
|
||||
#37=DIRECTION('',(0.,0.,1.));
|
||||
#38=CARTESIAN_POINT('',(0,0,0));
|
||||
#39=CARTESIAN_POINT('',(0,0,170));
|
||||
#40=DIRECTION('',(1.,0.,0.));
|
||||
#41=AXIS2_PLACEMENT_3D('',#38,#37,#40);
|
||||
#42=CARTESIAN_POINT('',(0,53,0));
|
||||
#43=CARTESIAN_POINT('',(0,53,170));
|
||||
#44=VERTEX_POINT('',#42);
|
||||
#45=VERTEX_POINT('',#43);
|
||||
#46=CIRCLE('',#41,53);
|
||||
#47=EDGE_CURVE('',#44,#44,#46,.T.);
|
||||
#48=CYLINDRICAL_SURFACE('',#41,53);
|
||||
#49=PLANE('',#41);
|
||||
#50=DIRECTION('',(0.,0.,1.));
|
||||
#51=AXIS2_PLACEMENT_3D('',#39,#50,#40);
|
||||
#52=PLANE('',#51);
|
||||
#53=CIRCLE('',#51,53);
|
||||
#54=EDGE_CURVE('',#45,#45,#53,.T.);
|
||||
#55=DIRECTION('',(0.,0.,1.));
|
||||
#56=VECTOR('',#55,1.);
|
||||
#57=LINE('',#42,#56);
|
||||
#58=EDGE_CURVE('',#44,#45,#57,.T.);
|
||||
#59=ORIENTED_EDGE('',*,*,#47,.T.);
|
||||
#60=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#61=ORIENTED_EDGE('',*,*,#58,.T.);
|
||||
#62=ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#63=ORIENTED_EDGE('',*,*,#58,.F.);
|
||||
#64=ORIENTED_EDGE('',*,*,#47,.F.);
|
||||
#65=EDGE_LOOP('',(#59));
|
||||
#66=EDGE_LOOP('',(#60));
|
||||
#67=EDGE_LOOP('',(#61,#62,#63,#64));
|
||||
#68=ADVANCED_FACE('',(#67),#48,.T.);
|
||||
#69=ADVANCED_FACE('',(#65),#49,.F.);
|
||||
#70=ADVANCED_FACE('',(#66),#52,.T.);
|
||||
#71=CLOSED_SHELL('',(#68,#69,#70));
|
||||
#72=MANIFOLD_SOLID_BREP('',#71);
|
||||
#73=DIRECTION('',(0.,0.,1.));
|
||||
#74=CARTESIAN_POINT('',(0,0,170));
|
||||
#75=CARTESIAN_POINT('',(0,0,180));
|
||||
#76=DIRECTION('',(1.,0.,0.));
|
||||
#77=AXIS2_PLACEMENT_3D('',#74,#73,#76);
|
||||
#78=CARTESIAN_POINT('',(0,56,170));
|
||||
#79=CARTESIAN_POINT('',(0,56,180));
|
||||
#80=VERTEX_POINT('',#78);
|
||||
#81=VERTEX_POINT('',#79);
|
||||
#82=CIRCLE('',#77,56);
|
||||
#83=EDGE_CURVE('',#80,#80,#82,.T.);
|
||||
#84=CYLINDRICAL_SURFACE('',#77,56);
|
||||
#85=PLANE('',#77);
|
||||
#86=DIRECTION('',(0.,0.,1.));
|
||||
#87=AXIS2_PLACEMENT_3D('',#75,#86,#76);
|
||||
#88=PLANE('',#87);
|
||||
#89=CIRCLE('',#87,56);
|
||||
#90=EDGE_CURVE('',#81,#81,#89,.T.);
|
||||
#91=DIRECTION('',(0.,0.,1.));
|
||||
#92=VECTOR('',#91,1.);
|
||||
#93=LINE('',#78,#92);
|
||||
#94=EDGE_CURVE('',#80,#81,#93,.T.);
|
||||
#95=ORIENTED_EDGE('',*,*,#83,.T.);
|
||||
#96=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#97=ORIENTED_EDGE('',*,*,#94,.T.);
|
||||
#98=ORIENTED_EDGE('',*,*,#90,.T.);
|
||||
#99=ORIENTED_EDGE('',*,*,#94,.F.);
|
||||
#100=ORIENTED_EDGE('',*,*,#83,.F.);
|
||||
#101=EDGE_LOOP('',(#95));
|
||||
#102=EDGE_LOOP('',(#96));
|
||||
#103=EDGE_LOOP('',(#97,#98,#99,#100));
|
||||
#104=ADVANCED_FACE('',(#103),#84,.T.);
|
||||
#105=ADVANCED_FACE('',(#101),#85,.F.);
|
||||
#106=ADVANCED_FACE('',(#102),#88,.T.);
|
||||
#107=CLOSED_SHELL('',(#104,#105,#106));
|
||||
#108=MANIFOLD_SOLID_BREP('',#107);
|
||||
#109=DIRECTION('',(0.,0.,1.));
|
||||
#110=CARTESIAN_POINT('',(0,0,158));
|
||||
#111=CARTESIAN_POINT('',(0,0,214));
|
||||
#112=DIRECTION('',(1.,0.,0.));
|
||||
#113=AXIS2_PLACEMENT_3D('',#110,#109,#112);
|
||||
#114=CARTESIAN_POINT('',(0,14.286,158));
|
||||
#115=CARTESIAN_POINT('',(0,14.286,214));
|
||||
#116=VERTEX_POINT('',#114);
|
||||
#117=VERTEX_POINT('',#115);
|
||||
#118=CIRCLE('',#113,14.286);
|
||||
#119=EDGE_CURVE('',#116,#116,#118,.T.);
|
||||
#120=CYLINDRICAL_SURFACE('',#113,14.286);
|
||||
#121=PLANE('',#113);
|
||||
#122=DIRECTION('',(0.,0.,1.));
|
||||
#123=AXIS2_PLACEMENT_3D('',#111,#122,#112);
|
||||
#124=PLANE('',#123);
|
||||
#125=CIRCLE('',#123,14.286);
|
||||
#126=EDGE_CURVE('',#117,#117,#125,.T.);
|
||||
#127=DIRECTION('',(0.,0.,1.));
|
||||
#128=VECTOR('',#127,1.);
|
||||
#129=LINE('',#114,#128);
|
||||
#130=EDGE_CURVE('',#116,#117,#129,.T.);
|
||||
#131=ORIENTED_EDGE('',*,*,#119,.T.);
|
||||
#132=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#133=ORIENTED_EDGE('',*,*,#130,.T.);
|
||||
#134=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#135=ORIENTED_EDGE('',*,*,#130,.F.);
|
||||
#136=ORIENTED_EDGE('',*,*,#119,.F.);
|
||||
#137=EDGE_LOOP('',(#131));
|
||||
#138=EDGE_LOOP('',(#132));
|
||||
#139=EDGE_LOOP('',(#133,#134,#135,#136));
|
||||
#140=ADVANCED_FACE('',(#139),#120,.T.);
|
||||
#141=ADVANCED_FACE('',(#137),#121,.F.);
|
||||
#142=ADVANCED_FACE('',(#138),#124,.T.);
|
||||
#143=CLOSED_SHELL('',(#140,#141,#142));
|
||||
#144=MANIFOLD_SOLID_BREP('',#143);
|
||||
#145=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#146=FILL_AREA_STYLE_COLOUR('',#145);
|
||||
#147=SURFACE_STYLE_FILL_AREA(#146);
|
||||
#148=SURFACE_SIDE_STYLE('',(#147));
|
||||
#149=SURFACE_STYLE_USAGE(.BOTH.,#148);
|
||||
#150=PRESENTATION_STYLE_ASSIGNMENT((#149));
|
||||
#151=STYLED_ITEM('',(#150),#36);
|
||||
#152=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#153=FILL_AREA_STYLE_COLOUR('',#152);
|
||||
#154=SURFACE_STYLE_FILL_AREA(#153);
|
||||
#155=SURFACE_SIDE_STYLE('',(#154));
|
||||
#156=SURFACE_STYLE_USAGE(.BOTH.,#155);
|
||||
#157=PRESENTATION_STYLE_ASSIGNMENT((#156));
|
||||
#158=STYLED_ITEM('',(#157),#72);
|
||||
#159=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#160=FILL_AREA_STYLE_COLOUR('',#159);
|
||||
#161=SURFACE_STYLE_FILL_AREA(#160);
|
||||
#162=SURFACE_SIDE_STYLE('',(#161));
|
||||
#163=SURFACE_STYLE_USAGE(.BOTH.,#162);
|
||||
#164=PRESENTATION_STYLE_ASSIGNMENT((#163));
|
||||
#165=STYLED_ITEM('',(#164),#108);
|
||||
#166=COLOUR_RGB('',0.65,0.72,0.85);
|
||||
#167=FILL_AREA_STYLE_COLOUR('',#166);
|
||||
#168=SURFACE_STYLE_FILL_AREA(#167);
|
||||
#169=SURFACE_SIDE_STYLE('',(#168));
|
||||
#170=SURFACE_STYLE_USAGE(.BOTH.,#169);
|
||||
#171=PRESENTATION_STYLE_ASSIGNMENT((#170));
|
||||
#172=STYLED_ITEM('',(#171),#144);
|
||||
#173=SHAPE_REPRESENTATION('',(#36,#72,#108,#144,#151,#158,#165,#172),#174);
|
||||
#174=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#175))GLOBAL_UNIT_ASSIGNED_CONTEXT((#176,#177,#178))REPRESENTATION_CONTEXT('',''));
|
||||
#175=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-06),#176,'');
|
||||
#176=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
|
||||
#177=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
|
||||
#178=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
|
||||
#179=PRODUCT('ONEBOT','ONEBOT','',(#180));
|
||||
#180=PRODUCT_CONTEXT('',#181,'mechanical');
|
||||
#181=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
|
||||
#182=PRODUCT_DEFINITION_FORMATION('','',#179);
|
||||
#183=PRODUCT_DEFINITION('design','',#182,#184);
|
||||
#184=PRODUCT_DEFINITION_CONTEXT('part definition',#181,'design');
|
||||
#185=PRODUCT_DEFINITION_SHAPE('','',#183);
|
||||
#186=SHAPE_DEFINITION_REPRESENTATION(#185,#173);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||