Initial commit

Made-with: Cursor
This commit is contained in:
lyf
2026-03-12 17:51:30 +08:00
commit 79102a18fb
1507 changed files with 480854 additions and 0 deletions

26
Astral3D/.gitignore vendored Normal file
View File

@@ -0,0 +1,26 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
packages/examples
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

2
Astral3D/.npmrc Normal file
View File

@@ -0,0 +1,2 @@
# 解决pnpm add时优先在本地查找依赖
link-workspace-packages=true

1
Astral3D/.nvmrc Normal file
View File

@@ -0,0 +1 @@
23.11.0

49
Astral3D/.prettierrc.js Normal file
View File

@@ -0,0 +1,49 @@
/** @type {import("prettier").Config} */
module.exports = {
// 一行最多160字符
printWidth: 160,
// 指定一个制表符等于的空格数
tabWidth: 4,
// 使用制表符,而不使用空格
useTabs: true,
// 行尾需要有分号
semi: true,
// 使用单引号代替双引号
singleQuote: false,
// 默认值。因为使用了一些折行敏感型的渲染器如GitHub comment而按照markdown文本样式进行折行
proseWrap: "preserve",
// 对象的key仅在必要时用引号括起来
quoteProps: "as-needed",
// 尾逗号根据ES5规则使用
trailingComma: "es5",
// 在对象,数组括号与文字之间加空格 "{ foo: bar }"
bracketSpacing: true,
// (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid省略括号
arrowParens: "avoid",
// 指定 HTML 文件的空白字符敏感度
htmlWhitespaceSensitivity: "ignore",
// 缩进 Vue SFC 文件中的 <script> 和 <style> 标签
vueIndentScriptAndStyle: true,
// 结尾是 \n \r \n\r auto
endOfLine: "auto",
// 在jsx中使用单引号代替双引号
jsxSingleQuote: false,
// 在jsx中是否把'>' 单独放一行
bracketSameLine: false,
// === 不同文件的定制 ===
overrides: [
{
files: "*.md",
options: {
printWidth: 120,
proseWrap: "preserve",
},
},
{
files: "*.json",
options: {
printWidth: 120,
},
},
],
};

60
Astral3D/CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,60 @@
# 贡献指南
欢迎来到 Astral 3D 社区!以下是参与贡献的指南:
## 🛠️ 开发流程
### 环境要求
- Node.js 23.11+
- PNPM
### 代码规范
1. Git 提交信息格式:
```
<type>(<scope>): <subject>
- type: feat|fix|docs|style|refactor|test|chore
- scope: Editor|Preview|Home|SDK 等模块范围
- subject: 50字内简明描述
```
2. 前端规范:
- Vue 组件使用 Composition API
- TypeScript 严格模式
- CSS 使用 UnoCSS 原子化方案
## 🐛 问题报告
使用 [GitHub Issues](https://github.com/mlt131220/Astral3D/issues) 时请包含:
1. 环境信息OS/浏览器/Node版本
2. 重现步骤
3. 预期与实际行为
4. 相关截图/日志
## ✨ 功能建议
1. 在 Discussions 发起提案讨论
2. 提供使用场景描述
3. 如有原型设计请附示意图
## 🌐 国际化
添加新语言请按以下步骤:
1. 在 `src/language` 创建语言文件
2. 会以文件名作为语言标识符 注册新语言
3. 在 `src/components/setting/common/Locale.vue` 中添加新语言选项
4. 提交 Pull Request 并 @ 维护者
## 🔄 代码提交
1. Fork 仓库并创建特性分支
2. 编写单元测试(重要功能必须包含)
3. 执行代码检查:
```bash
pnpm lint
```
4. 发起 Pull Request 至 dev 分支
## 🏅 贡献者公约
请遵守 [贡献者公约](https://www.contributor-covenant.org/version/2/1/code_of_conduct/),我们承诺:
- 友好包容的交流环境
- 尊重不同的开发经验
- 建设性的技术讨论
## 💼 代码所有权
所有贡献代码默认遵循项目 Apache-2.0 协议,作者保留对代码库的最终管理权限。

42
Astral3D/LEGAL.md Normal file
View File

@@ -0,0 +1,42 @@
# 法律声明
## 📜 许可协议
本项目采用 [Apache-2.0 许可证](LICENSE),核心条款包括:
### 您必须遵守:
1. **保留声明**
所有副本必须包含:
- 原始版权声明(见本文件底部)
- NOTICE 文件(如有)
- 许可证副本
2. **修改标识**
修改后的版本必须:
- 在文件头添加显著修改声明
- 保留所有现有版权声明
3. **附加商业条款:**
- 直接使用本源码产生的商业行为需获得作者书面授权
- 基于本项目的二次开发产品需在显著位置声明原始项目信息
## ⚠️ 免责声明
1. 作者不对使用本项目产生的任何直接/间接损失负责
2. 禁止将本项目用于任何违法用途,包括但不限于:
- 侵犯他人知识产权
- 传播恶意软件
- 进行网络攻击
- 其他违反当地法律法规的行为
## ®️ 商标条款
1. "Astral"名称及标识为项目作者注册商标
2. 未经授权不得:
- 使用项目名称进行商业宣传
- 修改或隐藏原始项目标识
- 在衍生品中使用Astral商标
- 暗示与官方项目的关联性
## ©️ 版权声明
2019-2025 © ErSan<mlt131220@163.com>. All rights reserved.

201
Astral3D/LICENSE Normal file
View File

@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2024 ErSan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

113
Astral3D/README.en.md Normal file
View File

@@ -0,0 +1,113 @@
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
🌍 [简体中文](README.md) | English
Link
[![Online Demo](https://img.shields.io/badge/Github-mlt131220/Astral3D-8732D7?style=for-the-badge&logo=github&logoColor=white)](https://github.com/mlt131220/Astral3D)
[![Online Demo](https://img.shields.io/badge/Gitee码云-mlt131220/Astral3D-8732D7?style=for-the-badge&logo=gitee&logoColor=white)](https://gitee.com/mlt131220/Astral3D)
[![Online Demo](https://img.shields.io/badge/Online_Demo-Astral_3D_Editor-8732D7?style=for-the-badge&logo=google-chrome&logoColor=white)](https://editor.astraljs.com)
> Modern Web 3D editor based on Vue3 + Three.js
<div align="center">
<img src="http://editor-doc.astraljs.com/images/home/thumbnailDark.png?t=20250518" width="800" alt="Editor City Preview">
<img src="http://editor-doc.astraljs.com/images/home/industryDark.png?t=20250318" width="800" alt="Editor Preview">
</div>
## 💬 Join the community
Get the latest news and technical support in the following ways:
| ![QQ Group](https://img.shields.io/badge/QQ_Group-1040320579-07C160?logo=wechat&logoColor=white) | ![Contact Author](https://img.shields.io/badge/Contact_Author-WeChat(Business)-07C160?logo=wechat&logoColor=white) |
|---------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://fs.mhbdng.cn/temp/4851677b-661d-4e60-884d-414316290425.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135452Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=4868484133727ab3881d0f7eb65a52db07ee91bc154b4bf4b88d19a91446188e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200"> | <img src="https://fs.mhbdng.cn/temp/c1c7ecef-d655-4bb3-97e8-54402e3a48ef.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135514Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=7005038e2ded3dbad425f6a23341002bf79c3ffe9f2166af18348dcaeb61dca0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200"> |
## 🚀 Core competence
### Core function
- ✅ Multi-format support: 30+ model format (GLTF/OBJ/FBX/GLB/RVT/IFC, etc.)
- ✅ BIM Model Lightweight Demonstration (RVT/IFC)
- ✅ CAD drawing analysis (DWG/DXF)
- ✅ Scenario subcontract storage and loading
- ✅ Animation editor
### Expansion capability
- 🧩 plug-in system
- 📜 When the script is running
- 💫 Particle system
- ❄️ Weather system
- ☁️ Cloud Storage Integration (USS again)
- 🎠 Resource center
### Coming soon
- 🚧 Physical engine support
- 🚧 WebGPU support
- 🚧 Data components (API/WebSocket)
- 🚧 low code data large screen
- 🚧 WebSocket Multi-party collaboration
## 🛠️ Technology stack
![Vue3](https://img.shields.io/badge/Vue-3.5.22-4FC08D?logo=vuedotjs)
![Three.js](https://img.shields.io/badge/Three.js-r176-000000?logo=threedotjs)
![Cesium](https://img.shields.io/badge/Cesium-1.107.0-0133B4?logo=cesium)
![NaiveUI](https://img.shields.io/badge/Naive_UI-2.43.1-66C060?logo=vue.js)
![UnoCSS](https://img.shields.io/badge/UnoCSS-0.46.5-333333?logo=unocss)
## ⚡ Quick start
### pre-demand
- Node.js ≥ 23.11.x
- Yarn
### Local run
```bash
git clone https://github.com/mlt131220/Astral3D.git
cd Astral3D
pnpm install
pnpm run sdk:build
pnpm run editor:dev
```
### Production construction
```bash
pnpm run editor:build
```
## 📚 Ecological correlation
### Back-end implementation
[![Java Backend](https://img.shields.io/badge/Back_end_implementation-AstralService-00ADD8)](https://github.com/yx8663/astral-service)
### Document center
[![Documentation](https://img.shields.io/badge/Document_center-Astral_Docs-8732D7?logo=gitbook)](http://editor-doc.astraljs.com/)
## ☕ Support project
If this project is helpful to you, please feel free to:
1. In case wall [user] (https://github.com/mlt131220/Astral3D/issues/2) leave your usage scenario
2. Scan code support developers:
| AliPay | WeChat |
|---------------------------------------------------------------------------|------------------------------------------------------------------------------|
| <img src="https://editor-doc.astraljs.com/images/AliPay.png" width="200"> | <img src="https://editor-doc.astraljs.com/images/WeChatPay.png" width="200"> |
## ⚖️ License agreement
This project adopts the [![Apache License] (https://img.shields.io/badge/License-Apache_2.0-blue.svg)] (License) open source licenses, please comply with the terms of the agreement and the following supplementary conditions:
- ✅ allows: individual learning/secondary development
- ⚠️ A copyright notice is required
- ⚠️ commercial use requires authorization
- ❌ Prohibited: using this project for business or illegal purposes that are competitive with **hangzhou xingluan digital technology**
**[Full legal notice](LEGAL.md)** | **[Contribution guide](CONTRIBUTING.md)**
## 🌟 Star trend
[![Star History Chart](https://api.star-history.com/svg?repos=mlt131220/Astral3D&type=Date)](https://star-history.com/#mlt131220/Astral3D&Date)

126
Astral3D/README.md Normal file
View File

@@ -0,0 +1,126 @@
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
🌍 简体中文 | [English](README.en.md)
直达:
[![Online Demo](https://img.shields.io/badge/Github-mlt131220/Astral3D-8732D7?style=for-the-badge&logo=github&logoColor=white)](https://github.com/mlt131220/Astral3D)
[![Online Demo](https://img.shields.io/badge/Gitee码云-mlt131220/Astral3D-8732D7?style=for-the-badge&logo=gitee&logoColor=white)](https://gitee.com/mlt131220/Astral3D)
[![Online Demo](https://img.shields.io/badge/Online_Demo-Astral_3D_Editor-8732D7?style=for-the-badge&logo=google-chrome&logoColor=white)](https://editor.astraljs.com)
> 基于 Vue3 + Three.js 的现代 Web 3D 编辑器
<div align="center">
<img src="http://editor-doc.astraljs.com/images/home/thumbnailDark.png?t=20250518" width="800" alt="Editor City Preview">
<img src="http://editor-doc.astraljs.com/images/home/industryDark.png?t=20250318" width="800" alt="Editor Preview">
</div>
## 💬 加入社区
通过以下方式获取最新动态和技术支持:
| ![QQ Group](https://img.shields.io/badge/QQ交流群-1040320579-07C160?logo=wechat&logoColor=white) | ![Contact Author](https://img.shields.io/badge/联系作者-个人微信(仅商务)-07C160?logo=wechat&logoColor=white)
|---------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://fs.mhbdng.cn/temp/4851677b-661d-4e60-884d-414316290425.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135452Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=4868484133727ab3881d0f7eb65a52db07ee91bc154b4bf4b88d19a91446188e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200"> | <img src="https://fs.mhbdng.cn/temp/c1c7ecef-d655-4bb3-97e8-54402e3a48ef.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135514Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=7005038e2ded3dbad425f6a23341002bf79c3ffe9f2166af18348dcaeb61dca0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200">
## 🚀 核心能力
### 核心功能
- ✅ 多格式支持:[30+ 模型格式GLTF/OBJ/FBX/GLB/RVT/IFC等](http://editor-doc.astraljs.com/guide/f7smai4w/#%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E5%8C%BA)
- ✅ BIM模型轻量化展示RVT/IFC
- ✅ CAD图纸解析DWG/DXF
- ✅ 场景分包存储与加载
- ✅ 动画编辑器
### 扩展能力
- 🧩 插件系统
- 📜 脚本运行时
- 💫 粒子系统
- ❄️ 天气系统
- ☁️ 云存储集成(又拍云 USS
- 🎠 资源中心
### 即将到来
- 🚧 物理引擎支持
- 🚧 WebGPU 支持
- 🚧 数据组件API/WebSocket
- 🚧 低代码数据大屏
- 🚧 WebSocket 多人协作
## 🛠️ 技术栈
![Vue3](https://img.shields.io/badge/Vue-3.5.22-4FC08D?logo=vuedotjs)
![Three.js](https://img.shields.io/badge/Three.js-r176-000000?logo=threedotjs)
![Cesium](https://img.shields.io/badge/Cesium-1.107.0-0133B4?logo=cesium)
![NaiveUI](https://img.shields.io/badge/Naive_UI-2.43.1-66C060?logo=vue.js)
![UnoCSS](https://img.shields.io/badge/UnoCSS-0.46.5-333333?logo=unocss)
## ⚡ 快速开始
### 前置需求
- Node.js ≥ 23.11.x
- PNPM
```
# 进入项目时
nvm use 23.11.0
# 或者如果 .nvmrc 已存在,直接:
nvm use
# 如果还是不行,手动修复 PATH 顺序:
$env:PATH = "E:\nvm4w\nodejs;$env:PATH"
nvm version # 应显示 1.1.12
nvm install 23.11.0
nvm use 23.11.0
node --version
```
### 本地运行
```bash
git clone https://github.com/mlt131220/Astral3D.git
cd Astral3D
pnpm install
pnpm run sdk:build
pnpm run editor:dev
```
### 生产构建
```bash
pnpm run editor:build
```
## 📚 生态相关
### 后端实现
[![Java Backend](https://img.shields.io/badge/后端实现-AstralService-00ADD8)](https://github.com/yx8663/astral-service)
### 文档中心
[![Documentation](https://img.shields.io/badge/文档中心-Astral_Docs-8732D7?logo=gitbook)](http://editor-doc.astraljs.com/)
## ☕ 支持项目
如果本项目对您有帮助,欢迎:
1. 在 [用户案例墙](https://github.com/mlt131220/Astral3D/issues/2) 留下您的使用场景
2. 扫码支持开发者:
| 支付宝 | 微信 |
|---------------------------------------------------------------------------|------------------------------------------------------------------------------|
| <img src="https://editor-doc.astraljs.com/images/AliPay.png" width="200"> | <img src="https://editor-doc.astraljs.com/images/WeChatPay.png" width="200"> |
## ⚖️ 许可协议
本项目采用 [![Apache License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) 开源协议,使用时请遵守协议条款及以下补充条款:
- ✅ 允许:个人学习/二次开发
- ⚠️ 需要版权声明
- ⚠️ 商业用途需要授权
- ❌ 禁止:将本项目用于与**杭州星孪数字科技**有竞争性的业务或非法用途
**[完整法律声明](LEGAL.md)** | **[贡献指南](CONTRIBUTING.md)**
## 🌟 Star 趋势
[![Star History Chart](https://api.star-history.com/svg?repos=mlt131220/Astral3D&type=Date)](https://star-history.com/#mlt131220/Astral3D&Date)

View File

@@ -0,0 +1,22 @@
{
"name": "@astral3d/build-vite-plugins",
"author": "ErSan<mlt131220@163.com>",
"private": true,
"version": "1.0.0",
"type": "module",
"main": "./src/index.ts",
"dependencies": {
},
"devDependencies": {
"@types/fs-extra": "^11.0.3",
"dotenv": "16.3.1",
"fs-extra": "^11.1.1",
"rollup-plugin-visualizer": "catalog:",
"typescript": "catalog:",
"unplugin-config": "^0.1.5",
"vite": "catalog:",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-enhance-log": "^0.6.2",
"vite-plugin-top-level-await": "^1.3.1"
}
}

View File

@@ -0,0 +1,2 @@
export * from './utils.ts';
export * from './plugins/index.ts';

View File

@@ -0,0 +1,28 @@
// @ts-ignore
import ConfigPlugin from 'unplugin-config/vite';
import type { PluginOption } from 'vite';
import {getEnvConfig,strToHex} from "../utils.ts";
export async function createConfigPluginConfig(
shouldGenerateConfig: boolean,
): Promise<PluginOption> {
const config:Record<string, any> = await getEnvConfig();
const APP_NAME = strToHex(config?.VITE_GLOB_APP_TITLE ?? '__APP');
// https://github.com/kirklin/unplugin-config
return ConfigPlugin({
appName: APP_NAME,
baseDir:"./",
envVariables: {
prefix: 'VITE_GLOB_',
files: [".env.production", ".env"],
},
configFile: {
generate: shouldGenerateConfig,
fileName: '_astral3d.config.js',
outputDir: 'dist',
},
htmlInjection: {
decodeEntities: true,
},
});
}

View File

@@ -0,0 +1,36 @@
/**
* 用于打包和输出gzip;
* 注意这在Vite中不能正常工作具体原因还在调查中
* https://github.com/anncwb/vite-plugin-compression
*/
import type { PluginOption } from 'vite';
import compressPlugin from 'vite-plugin-compression';
export function configCompressPlugin({compress,deleteOriginFile = false}: {
compress: "gzip" | "brotli" | "none";
deleteOriginFile?: boolean;
}): PluginOption[] {
const compressList = compress.split(',');
const plugins: PluginOption[] = [];
if (compressList.includes('gzip')) {
plugins.push(
compressPlugin({
ext: '.gz',
deleteOriginFile,
}),
);
}
if (compressList.includes('brotli')) {
plugins.push(
compressPlugin({
ext: '.br',
algorithm: 'brotliCompress',
deleteOriginFile,
}),
);
}
return plugins;
}

View File

@@ -0,0 +1,54 @@
import type {PluginOption} from 'vite';
import topLevelAwait from "vite-plugin-top-level-await";
import EnhanceLog from 'vite-plugin-enhance-log';
import {createConfigPluginConfig} from "./appConfig.ts";
import {configCompressPlugin} from "./compress.ts";
import {configVisualizerConfig} from "./visualizer.ts";
interface Options {
isBuild: boolean;
root: string;
compress: {
compress: "gzip" | "brotli" | "none";
deleteOriginFile: boolean;
};
enableAnalyze?: boolean;
enableConfig?: boolean;
}
export async function createPlugins({isBuild,compress,enableAnalyze,enableConfig}: Options) {
const vitePlugins: (PluginOption | PluginOption[])[] = [
topLevelAwait({
// 每个块模块的顶级await promise的导出名称
promiseExportName: "__tla",
// 用于在每个块模块中生成顶级await承诺的导入名称的函数
promiseImportName: i => `__tla_${i}`
}),
EnhanceLog({
/** 高亮文件名firefox不支持 */
colorFileName: true,
splitBy: '\n',
preTip: '🚀🚀🚀🚀🚀🚀',
enableFileName: { enableDir: false}
}),
];
if(enableConfig){
const appConfigPlugin = await createConfigPluginConfig(isBuild);
vitePlugins.push(appConfigPlugin);
}
// 以下插件只在生产环境中工作
if (isBuild) {
// rollup-plugin-gzip
vitePlugins.push(configCompressPlugin(compress));
// 打包视图分析 rollup-plugin-visualizer
if (enableAnalyze) {
vitePlugins.push(configVisualizerConfig());
}
}
return vitePlugins;
}

View File

@@ -0,0 +1,15 @@
/**
* package.json包文件容量分析
*/
// @ts-ignore
import {visualizer} from 'rollup-plugin-visualizer';
import { type PluginOption } from 'vite';
export function configVisualizerConfig() {
return visualizer({
filename: 'node_modules/.cache/visualizer/stats.html',
open: true,
gzipSize: true,
brotliSize: true,
}) as PluginOption;
}

View File

@@ -0,0 +1,75 @@
import { join } from 'node:path';
import pkg from 'fs-extra';
import {parse} from "dotenv";
/**
* 读取所有环境变量配置文件以处理.env
*/
export function wrapperEnv(envConf) {
const ret:any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, '\n');
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
if (envName === 'VITE_PORT') {
realName = Number(realName);
}
ret[envName] = realName;
if (typeof realName === 'string') {
process.env[envName] = realName;
} else if (typeof realName === 'object') {
process.env[envName] = JSON.stringify(realName);
}
}
return ret;
}
/**
* 获取当前环境下生效的配置文件名
*/
function getConfFiles() {
const script = process.env.npm_lifecycle_script;
const reg = new RegExp('--mode ([a-z_\\d]+)');
const result = reg.exec(script as string) as any;
if (result) {
const mode = result[1] as string;
return ['.env', `.env.${mode}`];
}
return ['.env', '.env.production'];
}
/**
* 获取以指定前缀开头的环境变量
* @param match prefix
* @param confFiles ext
*/
export async function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
let envConfig = {};
for (const confFile of confFiles) {
try {
const envPath = await pkg.readFile(join(process.cwd(), confFile), { encoding: 'utf8' });
const env = parse(envPath);
envConfig = { ...envConfig, ...env };
} catch (e) {
console.error(`Error in parsing ${confFile}`, e);
}
}
const reg = new RegExp(`^(${match})`);
Object.keys(envConfig).forEach((key) => {
if (!reg.test(key)) {
Reflect.deleteProperty(envConfig, key);
}
});
return envConfig;
}
export function strToHex(str: string) {
const result: string[] = [];
for (let i = 0; i < str.length; ++i) {
const hex = str.charCodeAt(i).toString(16);
result.push(('000' + hex).slice(-4));
}
return result.join('').toUpperCase();
}

View File

@@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "esnext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"noImplicitAny": false,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"types": [],
"typeRoots": ["./node_modules/@types/"]
},
"include": ["src"],
"exclude": []
}

28
Astral3D/package.json Normal file
View File

@@ -0,0 +1,28 @@
{
"name": "astral3d",
"version": "1.0.0",
"description": "Astral3D Engine",
"author": "ErSan <mlt131220@163.com>",
"scripts": {
"docs:dev": "pnpm run -C packages/docs docs:dev",
"docs:dev-clean": "pnpm run -C packages/docs docs:dev-clean",
"docs:build": "pnpm run -C packages/docs docs:build",
"docs:preview": "pnpm run -C packages/docs docs:preview",
"editor:dev": "pnpm run -C packages/editor dev",
"editor:build": "pnpm run sdk:build && pnpm run -C packages/editor build",
"editor:tsc": "pnpm run -C packages/editor tsc",
"editor:preview": "pnpm run -C packages/editor preview",
"sdk:dev": "pnpm run -C packages/sdk dev",
"sdk:build": "pnpm run -C packages/sdk build",
"examples:dev": "pnpm run -C packages/examples dev",
"examples:build": "pnpm run -C packages/examples build"
},
"engines": {
"node": ">=23.0.0"
},
"keywords": [],
"devDependencies": {
"prettier": "^3.7.4"
},
"packageManager": "pnpm@10.8.1"
}

4
Astral3D/packages/docs/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
node_modules
src/.vuepress/.cache
src/.vuepress/dist
src/.vuepress/.temp

View File

@@ -0,0 +1,3 @@
shamefully-hoist=true
shell-emulator=true
auto-install-peers=true

View File

@@ -0,0 +1,24 @@
{
"name": "@astral3d/docs",
"type": "module",
"version": "1.0.0",
"description": "Astral3D 文档",
"packageManager": "pnpm@10.8.1",
"author": "ErSan <mlt131220@163.com>",
"scripts": {
"docs:dev": "vuepress dev src",
"docs:dev-clean": "vuepress dev src --clean-cache --clean-temp",
"docs:build": "vuepress build src --clean-cache --clean-temp",
"docs:preview": "http-server src/.vuepress/dist",
"vp-update": "pnpm dlx vp-update"
},
"devDependencies": {
"@vuepress/bundler-vite": "^2.0.0-rc.24",
"http-server": "^14.1.1",
"sass-embedded": "^1.85.0",
"typescript": "catalog:",
"vue": "catalog:",
"vuepress": "^2.0.0-rc.24",
"vuepress-theme-plume": "^1.0.0-rc.164"
}
}

View File

@@ -0,0 +1,16 @@
---
title: _bulletin
createTime: 2025/10/02 00:22:16
permalink: /astral/ib77r5fd/
---
::: center
**QQ 交流群:** [1040320579](https://qm.qq.com/cgi-bin/qm/qr?k=Ewp9bODHFFaY6yphwEzmSe4lv889WbjR&jump_from=webapi&authKey=5gUSKPjhnXjhIy3pudNN/9igLNGxEwnN8yiXEDnEalE9loBQ4lEtVISG8OyXWmx8)
![QQ qr_code](/images/qq_qrcode.jpg){width="618" height="616" style="width: 200px"}
您在使用过程中遇到任何问题,欢迎通过 [issue](https://github.com/mlt131220/Astral3D/issues/new) 反馈。也欢迎加入我们的 QQ 交流群一起讨论。
> :fire: 4核8G 200兆服务器仅需49元/月,[点击这里购买](https://www.rainyun.com/Astral3D_)
> 专属优惠码Astral3D
:::

View File

@@ -0,0 +1,22 @@
import { defineClientConfig } from 'vuepress/client'
// import RepoCard from 'vuepress-theme-plume/features/RepoCard.vue'
// import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
// import NpmBadgeGroup from 'vuepress-theme-plume/features/NpmBadgeGroup.vue'
// import Swiper from 'vuepress-theme-plume/features/Swiper.vue'
// import CustomComponent from './theme/components/Custom.vue'
// import './theme/styles/custom.css'
export default defineClientConfig({
enhance({ app }) {
// built-in components
// app.component('RepoCard', RepoCard)
// app.component('NpmBadge', NpmBadge)
// app.component('NpmBadgeGroup', NpmBadgeGroup)
// app.component('Swiper', Swiper) // you should install `swiper`
// your custom components
// app.component('CustomComponent', CustomComponent)
},
})

View File

@@ -0,0 +1,199 @@
import { viteBundler } from '@vuepress/bundler-vite'
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
import path from 'node:path'
export default defineUserConfig({
port: 8089,
base: '/',
lang: 'zh-CN',
title: 'Astral3D',
description: 'Astral3D 文档',
head: [
// 配置站点图标
['link', { rel: 'icon', type: 'image/png', href: '/logo64x64.png' }],
],
bundler: viteBundler(),
shouldPrefetch: false, // 站点较大,页面数量较多时,不建议启用
theme: plumeTheme({
/* 添加您的部署域名, 有助于 SEO, 生成 sitemap */
hostname: 'https://docs.astraljs.com',
// 公告板
bulletin: {
lifetime:"session", // 在会话周期内关闭公告后不再显示
contentType:"markdown",
contentFile: path.join(__dirname, '_bulletin.md'),
},
/* 文档仓库配置,用于 editLink */
// docsRepo: '',
// docsDir: 'docs',
// docsBranch: '',
/* 页内信息 */
// editLink: true,
// lastUpdated: true,
// contributors: true,
// changelog: false,
/**
* 博客
* @see https://theme-plume.vuejs.press/config/basic/#blog
*/
// blog: false, // 禁用博客
// blog: {
// postList: true, // 是否启用文章列表页
// tags: true, // 是否启用标签页
// archives: true, // 是否启用归档页
// categories: true, // 是否启用分类页
// postCover: 'right', // 文章封面位置
// pagination: 15, // 每页显示文章数量
// },
/* 博客文章页面链接前缀 */
article: '/astral/',
/**
* 编译缓存,加快编译速度
* @see https://theme-plume.vuejs.press/config/basic/#cache
*/
cache: 'filesystem',
/**
* 为 markdown 文件自动添加 frontmatter 配置
* @see https://theme-plume.vuejs.press/config/basic/#autofrontmatter
*/
// autoFrontmatter: {
// permalink: true, // 是否生成永久链接
// createTime: true, // 是否生成创建时间
// title: true, // 是否生成标题
// },
// 文章贡献者
contributors: {
mode: 'block',
},
plugins: {
git: true,
/**
* Shiki 代码高亮
* @see https://theme-plume.vuejs.press/config/plugins/code-highlight/
*/
// shiki: {
// // 强烈建议预设代码块高亮语言,插件默认加载所有语言会产生不必要的时间开销
// languages: ['shell', 'bash', 'typescript', 'javascript'],
// twoslash: true, // 启用 twoslash
// whitespace: true, // 启用 空格/Tab 高亮
// lineNumbers: true, // 启用行号
// },
/* 本地搜索, 默认启用 */
// search: true,
/**
* Algolia DocSearch
* 启用此搜索需要将 本地搜索 search 设置为 false
* @see https://theme-plume.vuejs.press/config/plugins/search/#algolia-docsearch
*/
// docsearch: {
// appId: '',
// apiKey: '',
// indexName: '',
// },
/* 文章字数统计、阅读时间,设置为 false 则禁用 */
// readingTime: true,
/**
* markdown enhance
* @see https://theme-plume.vuejs.press/config/plugins/markdown-enhance/
*/
// markdownEnhance: {
// chartjs: true,
// echarts: true,
// mermaid: true,
// flowchart: true,
// },
/**
* markdown power
* @see https://theme-plume.vuejs.press/config/plugin/markdown-power/
*/
// markdownPower: {
// pdf: true, // 启用 PDF 嵌入 @[pdf](/xxx.pdf)
// caniuse: true, // 启用 caniuse 语法 @[caniuse](feature_name)
// plot: true, // 启用隐秘文本语法 !!xxxx!!
// bilibili: true, // 启用嵌入 bilibili视频 语法 @[bilibili](bid)
// youtube: true, // 启用嵌入 youtube视频 语法 @[youtube](video_id)
// artPlayer: true, // 启用嵌入 artPlayer 本地视频 语法 @[artPlayer](url)
// audioReader: true, // 启用嵌入音频朗读功能 语法 @[audioReader](url)
// icons: true, // 启用内置图标语法 :[icon-name]:
// codepen: true, // 启用嵌入 codepen 语法 @[codepen](user/slash)
// replit: true, // 启用嵌入 replit 语法 @[replit](user/repl-name)
// codeSandbox: true, // 启用嵌入 codeSandbox 语法 @[codeSandbox](id)
// jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id)
// npmTo: true, // 启用 npm-to 容器 ::: npm-to
// demo: true, // 启用 demo 容器 ::: demo
// repl: { // 启用 代码演示容器
// go: true, // ::: go-repl
// rust: true, // ::: rust-repl
// kotlin: true, // ::: kotlin-repl
// },
// imageSize: 'local', // 启用 自动填充 图片宽高属性,避免页面抖动
// },
/**
* 在 Markdown 文件中导入其他 markdown 文件内容。
* @see https://theme-plume.vuejs.press/guide/markdown/include/
*/
// markdownInclude: true,
/**
* Markdown 数学公式
* @see https://theme-plume.vuejs.press/config/plugins/markdown-math/
*/
// markdownMath: {
// type: 'katex',
// },
/**
* 水印
* @see https://theme-plume.vuejs.press/guide/features/watermark/
*/
// watermark: true,
/**
* 评论 comments
* @see https://theme-plume.vuejs.press/guide/features/comments/
*/
comment: {
provider: 'Giscus', // "Artalk" | "Giscus" | "Twikoo" | "Waline"
comment: true,
repo: 'mlt131220/Astral3D-Docs',
repoId: 'R_kgDOLuBMGg',
category: 'Announcements',
categoryId: 'DIC_kwDOLuBMGs4Cero3',
mapping: 'pathname',
reactionsEnabled: true,
inputPosition: 'top',
},
},
markdown: {
annotation: true,
},
/**
* 加密功能
* @see https://theme-plume.vuejs.press/guide/features/encryption/
*/
// encrypt: {},
}),
})

View File

@@ -0,0 +1,31 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
import { version } from '../../package.json';
export const navbar = defineNavbarConfig([
{
text: '指南',
icon: 'icon-park-outline:guide-board',
link: '/notes/guide/quick-start/介绍.md',
},
{ text: 'SDK', link: '/notes/sdk/README.md', icon: 'carbon:api' },
{ text: '示例', link: 'https://examples.astraljs.com/', icon: 'carbon:carbon-for-ibm-dotcom' },
{ text: '推广中心', link: '/notes/promotion/README.md', icon: 'mdi:star-shooting-outline' },
{ text: '商务合作', link: '/notes/cooperation/README.md', icon: 'carbon:partnership' },
{
text: '更多',
icon: 'icon-park-outline:more-three',
items: [
{ text: '常见问题', link: '/notes/more/questions.md', icon: 'wpf:faq' },
],
},
{
text: `${version}`,
icon: 'codicon:versions',
items: [
{
text: '更新日志',
link: '/notes/update/logs/',
}
],
},
])

View File

@@ -0,0 +1,187 @@
import { defineNoteConfig, defineNotesConfig } from 'vuepress-theme-plume'
const updateNote = defineNoteConfig({
dir: 'update/logs',
link: '/update',
sidebar: [
{
text: '2025年',
collapsed: false,
icon: 'carbon:calendar',
items: [
'_2025_01',
'_2025_02',
'_2025_03',
'_2025_04',
'_2025_05',
'_2025_06',
]
},
{
text: '2024年',
collapsed: false,
icon: 'carbon:calendar',
items: [
'_2024_03',
'_2024_04',
'_2024_05',
'_2024_06',
'_2024_07',
'_2024_08',
'_2024_09',
'_2024_10',
'_2024_11',
'_2024_12',
]
},
{
text: '2023年',
collapsed: false,
icon: 'carbon:calendar',
items: [
'_2023_02',
'_2023_03',
'_2023_04',
'_2023_05',
'_2023_07',
'_2023_08',
]
}
]
})
const planNote = defineNoteConfig({
dir: 'update/plan',
link: '/update/plan',
sidebar: 'auto'
})
const guideNote = defineNoteConfig({
dir: 'guide',
link: '/guide',
sidebar: [
{
text: '快速入门',
collapsed: false,
prefix: 'quick-start',
icon: 'carbon:lightning',
items: [
'介绍',
'安装',
'项目结构',
'部署'
]
},
{
text: '编辑器使用手册',
collapsed: false,
prefix: 'manual',
icon: 'carbon:apps',
items: [
{
text: '首页',
collapsed: false,
prefix: 'home',
items: [
'项目',
'数据中心',
'资源中心',
'设置中心',
]
},
{
text: '编辑器',
collapsed: false,
prefix: 'editor',
items: [
'界面',
"顶栏",
{
text: '左侧边栏',
collapsed: false,
prefix: 'leftSidebar',
items: [
'场景树',
'CAD解析预览',
'BIM轻量化',
]
},
{
text: '视口',
collapsed: false,
prefix: 'viewport',
items: [
'2D图纸',
'3D场景'
]
},
{
text: '扩展栏',
collapsed: false,
prefix: 'extras',
items: [
'资源中心',
'动画编辑器',
'日志'
]
},
{
text: '右侧边栏',
collapsed: false,
prefix: 'rightSidebar',
items: [
'场景配置',
'渲染器配置',
'后期处理',
'天气',
'历史记录',
'场景图纸',
'对象',
'几何',
'材质',
'动画',
'脚本',
'粒子',
'广告牌',
'Html面板',
]
},
]
},
{
text: '预览页',
collapsed: false,
prefix: 'preview',
items: [
'界面',
]
},
]
},
{
text: '插件系统',
collapsed: false,
prefix: 'plugins',
icon: 'carbon:lightning',
items: [
'入门',
'插件开发',
{
text: '内置插件',
collapsed: false,
prefix: 'builtin',
icon: 'carbon:plug',
items: [
'glTFHandler'
]
}
]
},
]
})
export const notes = defineNotesConfig({
dir: 'notes',
link: '/',
notes: [updateNote, planNote, guideNote],
})

View File

@@ -0,0 +1,60 @@
import { defineThemeConfig } from 'vuepress-theme-plume'
import { navbar } from './navbar'
import { notes } from './notes'
/**
* @see https://theme-plume.vuejs.press/config/basic/
*/
export default defineThemeConfig({
logo: '/logo64x64.png',
appearance: true, // 配置 深色模式
social: [
{ icon: 'github', link: 'https://github.com/mlt131220/Astral3D' },
],
// navbarSocialInclude: ['github'], // 允许显示在导航栏的 social 社交链接
// aside: true, // 页内侧边栏, 默认显示在右侧
// outline: [2, 3], // 页内大纲, 默认显示 h2, h3
/**
* 文章版权信息
* @see https://theme-plume.vuejs.press/guide/features/copyright/
*/
copyright: true,
prevPage: true, // 是否启用上一页链接
nextPage: true, // 是否启用下一页链接
createTime: true, // 是否显示文章创建时间
/* 站点页脚 */
footer: {
message: '',
copyright: 'Copyright © 2023-present <a target="_blank" href="https://github.com/mlt131220">ErSan <mlt131220@163.com></a>',
},
/**
* @see https://theme-plume.vuejs.press/config/basic/#profile
*/
profile: {
avatar: '/logo64x64.png',
name: 'Astral3D',
description: 'Astral3D 文档',
// circle: true,
// location: '',
// organization: '',
},
// 导航栏配置
navbar,
notes,
/* 过渡动画 @see https://theme-plume.vuejs.press/config/basic/#transition */
// transition: {
// page: true, // 启用 页面间跳转过渡动画
// postList: true, // 启用 博客文章列表过渡动画
// appearance: 'fade', // 启用 深色模式切换过渡动画, 或配置过渡动画类型
// },
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,11 @@
<script setup lang="ts">
import { ref } from 'vue'
const message = ref('Hello World!')
</script>
<template>
<div class="my-custom-content">
{{ message }}
</div>
</template>

View File

@@ -0,0 +1,6 @@
declare module '*.vue' {
import type { ComponentOptions } from 'vue'
const comp: ComponentOptions
export default comp
}

View File

@@ -0,0 +1,50 @@
:root {
/** 主题颜色 */
/*
--vp-c-brand-1: #5086a1;
--vp-c-brand-2: #6aa1b7;
--vp-c-brand-3: #8cccd5;
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
*/
/** 背景颜色 */
/*
--vp-c-bg: #fff;
--vp-c-bg-alt: #f6f6f7;
--vp-c-bg-elv: #fff;
--vp-c-bg-soft: #f6f6f7;
*/
/** 文本颜色 */
/*
--vp-c-text-1: rgba(60, 60, 67);
--vp-c-text-2: rgba(60, 60, 67, 0.78);
--vp-c-text-3: rgba(60, 60, 67, 0.56);
*/
}
/** 深色模式 */
[data-theme="dark"] {
/*
--vp-c-brand-1: #8cccd5;
--vp-c-brand-2: #6aa1b7;
--vp-c-brand-3: #5086a1;
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
*/
/*
--vp-c-bg: #1b1b1f;
--vp-c-bg-alt: #161618;
--vp-c-bg-elv: #202127;
--vp-c-bg-soft: #202127;
*/
/*
--vp-c-text-1: rgba(255, 255, 245, 0.86);
--vp-c-text-2: rgba(235, 235, 245, 0.6);
--vp-c-text-3: rgba(235, 235, 245, 0.38);
*/
}

View File

@@ -0,0 +1,121 @@
---
pageLayout: home
externalLinkIcon: false
config:
-
type: hero
full: true
background: tint-plate
hero:
name: Astral 3D Engine
tagline: Astral 3D Editor
text: 工业孪生3D引擎
actions:
-
theme: brand
text: 快速入门 -->
link: /guide/6xkx4dnv/
-
theme: alt
text: Demo
link: https://editor.astraljs.com/#/
-
theme: alt
text: Github
link: https://github.com/mlt131220/Astral3D
-
type: features
features:
-
title: 最新技术栈
icon: 🍡
details: 基于Vue3、Vite、TypeScript、Naive UI等最新技术栈开发
-
title: 基于ThreeJS
icon: 🌷
details: Three.js 是基于webGL的封装的一个易于使用且轻量级的3D库是前端开发者研发3D绘图的主要工具
-
title: 简洁易用
icon: 🔅
details: 高效进行场景处理,并且提供网络压缩存储功能,在项目中快速读取加载
-
title: BIM 轻量化引擎
icon: 🚀
details: 支持上传BIM模型进行轻量化查看并转化为GLB格式
-
title: CAD 在线解析
icon: 🌈
details: 支持CAD图纸在线解析预览
-
title: 3DTiles
icon: 🧱
details: 支持3DTiles加载、打包、漫游
-
title: 插件系统
icon: 🏝️
details: 编辑器提供了开放的插件系统内置丰富的插件库glTF处理器、地形生成器、模型转换器等等。
-
title: 粒子系统
icon: 💊
details: 内置多种粒子效果,如:烟花、火焰、烟雾、萤火虫等,丰富的配置项可以满足用户各种需求。
-
title: 动画系统
icon: 🎡
details: 支持在线编辑动画关键帧,完善的动画编辑器将支撑你的创作。
-
title: 天气系统
icon: 🌤️
details: 支持多种天气效果,如:晴天、雾天、雨天、雪天等。
-
title: 资源中心
icon: 🎁
details: 模型、材质、粒子、广告牌(Billboard)、HtmlPanel....
-
title: WebGPU (开发阶段)
icon: 🚩
details: 更快的计算...
-
type: image-text
title: 工业范
description: CAD? BIM? 亦或更多?
image: /images/home/industryDark.png
width: 600
list:
-
title: CAD
description: 支持 <code>.dwg,.dxf</code> 图纸解析预览
-
title: BIM
description: 支持 <code>.rvt,.ifc,.rva</code> 模型轻量化解析
-
title: Future
description: PDMS、VTU
-
type: custom
---
<script setup>
import RepoCard from 'vuepress-theme-plume/features/RepoCard.vue'
</script>
<CardGrid>
<RepoCard repo="mlt131220/Astral3D" />
<RepoCard repo="mlt131220/Astral3D" provider="gitee" />
</CardGrid>
### :zap: 快速开始
:::code-tabs
@tab bash
```bash
git clone https://github.com/mlt131220/Astral3D.git
cd Astral3D
pnpm install
pnpm run sdk:build
pnpm run editor:dev
```
:::

View File

@@ -0,0 +1,55 @@
---
title: 商务合作
createTime: 2025/10/06 21:04:41
permalink: /astral/nf8y5syx/
---
# 寻求合作,共创价值
> 您好!我们是 ==Astral 3D== 开源项目的核心开发团队。
> ==Astral 3D Editor== 是一个功能强大的、完全开源的 Web3D 编辑器,致力于为开发者和设计师提供高效、便捷的 3D 场景创作工具。
> 我们拥有深厚的 `WebGL、WebGPU、Three.js、Babylon.js、Vue/React` 等全栈开发经验,除了维护核心的开源项目外,我们也承接相关的商业项目,旨在将专业的技术实力转化为您的商业价值。
## 我们的合作模式
我们专注于提供高质量的 ==Web 前后端== 技术开发服务,主要合作模式包括:
* **Web3D 项目外包:**
* **产品3D展示:** 将您的产品以交互式3D模型的形式呈现在网页上。
* **数据可视化:** 构建复杂的 3D 数据可视化大屏,让数据生动直观。
* **虚拟展厅/数字孪生:** 为您的业务打造沉浸式的在线虚拟空间。
* **3D场景与游戏开发:** 基于 Web 技术开发轻量级的 3D 互动场景或小游戏。
* **Web 开发外包:**
* **复杂前端页面开发:** 擅长使用 `Vue/React` 等现代框架构建高性能、高交互性的 Web 应用。
* **全栈项目开发:** 提供从前端到后端的整套解决方案。
* **定制化开发与技术咨询:**
* 基于我们的开源编辑器进行二次开发,为您量身定制专属功能。
* 提供 `Web3D` 相关的技术咨询、方案设计和性能优化服务。
* **更多的合作可能性?**
* 专业团队,为您提供所需。
## 为什么选择我们?
* **核心团队,技术保障:** 您将直接与开源项目的核心开发者沟通,我们对 ==Web3D 技术/ Web前后端== 有深入的理解和丰富的实战经验。
* **开源基础,降本增效:** 基于我们成熟的开源编辑器/其他产品,可以为您快速搭建项目原型,显著缩短开发周期,降低开发成本。
* **代码质量,值得信赖:** 开源意味着我们的代码经过了社区的广泛检验,我们始终坚持高标准的编码规范和交付质量。
* **专注高效,沟通直接:** 我们是纯粹的技术团队,沟通直接高效,致力于用最合适的技术方案解决您的实际问题。
## 联系方式
如果您有项目需求或合作意向,欢迎添加我的微信进行深入沟通。请在好友申请中备注“**商务合作**”或“**您的公司/项目名**”,以便我能快速通过并了解您的需求。
<div style="display:flex;justify-content: center;align-items: center;flex-direction: column">
| 商务微信 |
|:--------------------------------------------------------------:|
| ![WeChat](/images/wechat-qrcode.jpg){width="300" height="300"} |
微信号:**mahaibing130802**
</div>
我们期待通过精湛的技术,助力您的业务在==数字化浪潮==中脱颖而出。

View File

@@ -0,0 +1,5 @@
---
title: 动画编辑器
createTime: 2025/03/31 19:50:56
permalink: /guide/5s7acuj0/
---

View File

@@ -0,0 +1,5 @@
---
title: 日志
createTime: 2025/03/31 20:03:00
permalink: /guide/0q1bxrub/
---

View File

@@ -0,0 +1,88 @@
---
title: 资源中心
createTime: 2025/03/31 19:51:33
permalink: /guide/dju4ekca/
---
::: demo-wrapper img no-padding
<ImageCard
image="/images/manual/editor/extras/resource.png"
title="资源中心"
author="ErSan"
date="2025/04/17"
/>
:::
## 简要说明
在扩展栏左上角下拉菜单中可将扩展面板切换到资源中心模块。<br />
资源共分为==模型、材质、粒子、广告牌、Html面板、灯光、相机==。<br />
编辑器已内置大多通用资源,也可在扩展栏右上角切换资源来源:==内置资源/公共资源==。
**主要亮点:**
- **资源分类清晰**:支持多种资源类型,方便用户快速查找和使用。
- **资源来源灵活**:可切换内置资源和公共资源,满足不同场景需求。
- **高效管理**:支持资源的快速预览、搜索和分类管理。
- **扩展性强**:用户可自定义资源并上传到公共资源库。
## 功能说明
- **资源搜索**:按名称模糊搜索已选择分类下的资源。
- **模型**:内置多种类型的模型,用户可快速预览模型并拖拽到场景中使用。
- **材质**:提供丰富的材质库,用户可实时预览材质效果并应用至模型。
- **粒子**:内置多种粒子效果模板,支持参数调整和自定义粒子效果创建。
- **广告牌**:支持图片和文字广告牌的快速创建,适用于场景标注和装饰。
- **Html面板**允许嵌入自定义HTML内容支持动态交互和样式调整。
- **灯光**:提供多种灯光类型(如点光源、聚光灯等),支持实时调整光照参数。
- **相机**:内置透视相机与正交相机,满足不同场景需求。
### 资源搜索
搜索框位于扩展栏顶部中间。
输入搜索内容,将根据当前所选取资源类型进行模糊查询。
### 模型
如本页首图,内置了多种类型的模型,用户可通过==拖拽/双击==方式将模型添加到场景中。
- ==拖拽==:模型将放置在鼠标放开的屏幕位置
- ==双击==:模型将放置在场景中心
### 材质
内置了多类型的PBR材质、Shader材质用户可通过==拖拽/双击==方式将材质应用到模型上; <br />
成功应用的材质可在 右侧边栏-[材质](/guide/l1df4723/) 进行参数配置及修改。
- ==右键==:预览材质
- ==拖拽==:材质将应用至鼠标放开位置选取到的模型上
- ==双击==:材质将应用至所选取的模型上
**注意**材质只能应用至Mesh节点不能应用于Group、广告牌、粒子、Html面板等节点。即材质只能应用于本身就包含材质属性的模型节点。
### 粒子
内置火焰、烟雾、萤火虫等常见粒子效果模板,用户可通过==拖拽/双击==方式将粒子添加到场景中; <br />
成功添加的粒子可在 右侧边栏-[粒子](/guide/siz46vj0/) 调整粒子发射器参数及粒子行为。
- ==拖拽==:粒子将放置在鼠标放开的屏幕位置
- ==双击==:粒子将放置在场景中心
### 广告牌
内置图标、文本广告牌,用户可通过==拖拽/双击==方式将广告牌添加到场景中; <br />
成功添加的广告牌可在 右侧边栏-[广告牌](/guide/18al65zg/) 进行参数配置及修改。
- ==拖拽==:广告牌将放置在鼠标放开的屏幕位置
- ==双击==:广告牌将放置在场景中心
### Html面板
内置多个Html面板模板用户可通过==拖拽/双击==方式将Html面板添加到场景中; <br />
该功能允许用户在场景中嵌入HTML内容如视频播放器、交互式表单、数据图表等支持动态更新; <br />
成功添加的Html面板可在 右侧边栏-[Html面板](/guide/kk5cv2ij/) 进行参数配置及内容修改。
- ==拖拽==Html面板将放置在鼠标放开的屏幕位置
- ==双击==Html面板将放置在场景中心
### 灯光
内置==环境光、平行光、半球光、点光源、聚光灯==五种灯光类型,用户可通过==拖拽/双击==方式将灯光添加到场景中; <br />
成功添加的灯光(选中后)可在 右侧边栏-[对象](/guide/2xlh6nrf/) 进行参数配置及修改。
- ==拖拽==:灯光将放置在鼠标放开的屏幕位置
- ==双击==:灯光将放置在场景中心
### 相机
内置==透视相机、正交相机==,用户可通过==拖拽/双击==方式将相机添加到场景中; <br />
相机添加后可在[3D视口](/guide/jkg3yahd/)左上角进行主相机切换;<br />
成功添加的相机(选中后)可在 右侧边栏-[对象](/guide/2xlh6nrf/) 进行参数配置及修改。
- ==拖拽==:相机将放置在鼠标放开的屏幕位置
- ==双击==:相机将放置在场景中心

View File

@@ -0,0 +1,72 @@
---
title: BIM轻量化
createTime: 2025/03/31 19:48:15
permalink: /guide/rf1xgf4z/
---
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/leftSidebar/bim.png"
title="BIM"
description="通过将BIM工程文件.rvt转换为glTF文件在保留BIM构件属性的同时压缩优化模型以达到web端解析BIM并且轻量化的目的。"
width="300"
author="ErSan"
date="2025/04/15"
/>
</div>
## 简要说明
通过编辑器的BIM轻量化功能您可以将复杂的BIM工程文件`.rvt`)转换为轻量化的`.glTF`文件。
转换过程中保留了BIM构件的属性信息同时对模型进行了压缩优化方便在Web端进行高效解析与展示。
**主要亮点:**
- 支持BIM文件的轻量化转换优化模型大小。
- 保留构件属性,便于后续操作与分析。
- 界面设计与[CAD解析预览](/guide/u1631nwk/)类似,操作直观易用。
## 功能说明
- **模型列表**展示用户上传转换的所有BIM模型。
- **上传模型**:点击顶部==历史记录==右侧的==上传按钮==,会打开模型上传界面。
- **历史记录**:点击顶部==历史记录==按钮,会弹出历史上传记录列表。
### 模型列表
- **功能描述**展示用户上传并转换成功的所有BIM模型。
- **操作方式**
如本页面首图,列表以网格形式展示;
从列表中直接==拖动==相应模型到中间的三维视口 或 ==双击==该模型,都可加载并渲染对应模型。
### 上传模型
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/leftSidebar/bimUpload.png"
title="上传模型"
width="400"
author="ErSan"
date="2025/04/15"
/>
</div>
- **支持格式**`.rvt、.rfa`
- **转换方式**
- 文件会在上传后通过WebSocket发起轻量化转换请求。
- 转换结果通过WebSocket消息返回并加载渲染展示。
- **转换配置**
- 极致轻量化:模型会在转换过程中执行==网格优化、材质贴图压缩并转换格式为WebP、网格实例化、网格合并==等模型优化操作以确保输出的BIM轻量化模型是最小体积及最小渲染损耗的glTF模型。过程中可能执行的具体优化项可参考[glTF处理器](/guide/plugin/builtin/jo87cfk0/)章节;
- 导出属性生成的glTF模型中是否包含构件属性
- 转换视图一个BIM文件中可能会包含多个3D视图如果用户有确切的转换视图目标可选择`按名称`并输入视图名称以转换;否则将自动以`默认3D视图`为目标转换;
-视觉样式:此设置影响最终输出的模型材质。`着色`模式基本不包含任何材质贴图,以纯色材质方式输出;`真实`模式会包含用户建模时的材质贴图,输出材质更真实;
- 坐标参考一般情况下一个BIM工程模型会由多工程师完成便会存在多个单体BIM文件。此设置会决定最终输出模型与笛卡尔坐标系原点的相对位置信息。关于==原点、项目基点、测量点==的详细说明,可以参考这篇文章:[详解Revit坐标系](https://zhuanlan.zhihu.com/p/220113797)
### 历史记录
::: demo-wrapper img no-padding
<ImageCard
image="/images/manual/editor/leftSidebar/bimHistory.png"
title="历史记录"
author="ErSan"
date="2025/04/15"
/>
:::
- **功能描述**展示用户之前上传的所有BIM模型记录方便快速查找和重新加载。
- **操作方式**:点击顶部==历史记录==按钮,弹出历史上传记录列表。

View File

@@ -0,0 +1,68 @@
---
title: CAD解析预览
createTime: 2025/03/31 19:49:44
permalink: /guide/u1631nwk/
---
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/leftSidebar/cad.png"
title="CAD"
description="编辑器支持用户上传CAD图纸(.dwg、.dxf)进行解析预览"
width="300"
author="ErSan"
date="2025/04/15"
/>
</div>
## 简要说明
通过编辑器的CAD解析预览功能您可以轻松上传并查看多种格式的CAD图纸。<br />
无论是`.dwg`还是`.dxf`,都能快速解析并在三维视口中直观展示。<br />
这一功能不仅提升了图纸管理的效率,还为三维设计和协作提供了极大的便利。<br />
**主要亮点:**
- 支持多种图纸格式,满足不同需求。
- 即时解析与预览,操作简单高效。
- 历史记录功能,方便快速查找和重新加载。
让您的设计流程更加流畅,体验前所未有的便捷与高效!
## 功能说明
- **图纸列表**:展示用户上传并解析成功的所有图纸。
- **上传图纸**:点击顶部==历史记录==右侧的==上传按钮==,会打开图纸上传界面。
- **历史记录**:点击顶部==历史记录==按钮,会弹出历史上传记录列表。
### 图纸列表
- **功能描述**:展示用户上传并解析成功的所有图纸。
- **操作方式**
如本页面首图,列表以网格形式展示;
从列表中直接==拖动==相应图纸到中间的三维视口 或 ==双击==该图纸,都可加载并渲染对应图纸。
### 上传图纸
::: demo-wrapper img no-padding
<ImageCard
image="/images/manual/editor/leftSidebar/cadUpload.png"
title="上传图纸"
author="ErSan"
date="2025/04/15"
/>
:::
- **支持格式**`.dwg、.dxf、.png、.jpg(jpeg)`
- **解析方式**
- `.dwg`格式图纸由于无法在前端直接解析会在上传后通过WebSocket发起图纸解析请求。
- 解析结果通过WebSocket消息返回并加载渲染展示。
- 如果`.dwg`图纸中包含缩略图,会自动解析为封面图,在`图纸列表`中展示。
### 历史记录
::: demo-wrapper img no-padding
<ImageCard
image="/images/manual/editor/leftSidebar/cadHistory.png"
title="历史记录"
author="ErSan"
date="2025/04/15"
/>
:::
- **功能描述**:展示用户之前上传的所有图纸记录,方便快速查找和重新加载。
- **操作方式**:点击顶部==历史记录==按钮,弹出历史上传记录列表。

View File

@@ -0,0 +1,36 @@
---
title: 场景树
createTime: 2025/03/31 19:58:06
permalink: /guide/rzqb0h0l/
---
<CardGrid>
<ImageCard
image="/images/manual/editor/leftSidebar/sceneTree.png"
title="场景树"
description="场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象"
author="ErSan"
date="2025/04/14"
/>
<ImageCard
image="/images/manual/editor/leftSidebar/sceneTreeContextMenu.png"
title="场景节点右键菜单"
description="聚焦、删除、拷贝"
author="ErSan"
date="2025/04/14"
/>
</CardGrid>
## 简要说明
场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象。
## 功能说明
- **节点搜索**:顶部搜索栏用于快速查找节点,模糊查询到的节点父级会自动展开,并在改节点下添加下划线。
- **层级管理**:通过拖拽操作,可以调整对象的父子关系。
- **对象选择**:点击场景树中的对象名称,可以在场景中选中对应的对象(不会自动聚焦)。
- **聚焦对象**:右键菜单中提供聚焦选项,用以在视口中定位模型(更推荐使用快捷键,默认是`F`)。
- **删除对象**:右键菜单中提供删除选项,方便移除不需要的对象(更推荐使用快捷键,默认是`Del`)。
- **拷贝对象**:右键菜单中提供拷贝选项,方便快速复制对象(同[顶栏](/guide/f7smai4w/)基础操作区中的拷贝)。
<!-- - **对象隐藏/显示**:通过点击对象名称旁的图标,可以快速隐藏或显示对象。
- **重命名**:双击对象名称可以对其进行重命名。 -->

View File

@@ -0,0 +1,5 @@
---
title: Html面板
createTime: 2025/04/17 17:03:07
permalink: /guide/kk5cv2ij/
---

View File

@@ -0,0 +1,5 @@
---
title: 几何
createTime: 2025/03/31 20:06:40
permalink: /guide/nct00cif/
---

View File

@@ -0,0 +1,5 @@
---
title: 动画
createTime: 2025/03/31 20:07:33
permalink: /guide/g3kxptm0/
---

View File

@@ -0,0 +1,5 @@
---
title: 历史记录
createTime: 2025/03/31 20:05:25
permalink: /guide/ae7ufigr/
---

View File

@@ -0,0 +1,5 @@
---
title: 后期处理
createTime: 2025/03/31 20:04:44
permalink: /guide/l8hd921o/
---

View File

@@ -0,0 +1,5 @@
---
title: 场景图纸
createTime: 2025/03/31 20:05:40
permalink: /guide/ta6draim/
---

View File

@@ -0,0 +1,5 @@
---
title: 场景配置
createTime: 2025/03/31 20:04:17
permalink: /guide/pnmbue0k/
---

View File

@@ -0,0 +1,5 @@
---
title: 天气
createTime: 2025/03/31 20:05:08
permalink: /guide/fn9xwbkf/
---

View File

@@ -0,0 +1,5 @@
---
title: 对象
createTime: 2025/03/31 20:06:07
permalink: /guide/2xlh6nrf/
---

View File

@@ -0,0 +1,5 @@
---
title: 广告牌
createTime: 2025/04/17 17:11:18
permalink: /guide/18al65zg/
---

View File

@@ -0,0 +1,5 @@
---
title: 材质
createTime: 2025/03/31 20:07:10
permalink: /guide/l1df4723/
---

View File

@@ -0,0 +1,5 @@
---
title: 渲染器配置
createTime: 2025/03/31 20:04:34
permalink: /guide/crvssx6j/
---

Some files were not shown because too many files have changed in this diff Show More