diff --git a/.gitignore b/.gitignore index 31349290..c5e7d747 100644 --- a/.gitignore +++ b/.gitignore @@ -83,6 +83,10 @@ apps/web/public/vejledning/ apps/web/public/it/ # Built Arabic user guide. apps/web/public/dalil/ +# Built Simplified Chinese user guide. +apps/web/public/zh-cn/ +# Built Traditional Chinese user guide. +apps/web/public/zh-tw/ # Built Turkish user guide. apps/web/public/kilavuz/ diff --git a/README.de.md b/README.de.md index bdfc4981..85f56075 100644 --- a/README.de.md +++ b/README.de.md @@ -21,7 +21,7 @@ Von einer KI steuerbar

-

English · Deutsch · Nederlands

+

English · Deutsch · Nederlands · 简体中文 · 繁體中文

diff --git a/README.md b/README.md index ae08435c..b1e9f86e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Drivable by AI

-

English · Deutsch · Nederlands

+

English · Deutsch · Nederlands · 简体中文 · 繁體中文

diff --git a/README.nl.md b/README.nl.md index 8331e139..bdca7fc4 100644 --- a/README.nl.md +++ b/README.nl.md @@ -21,7 +21,7 @@ Door AI te besturen

-

English · Deutsch · Nederlands

+

English · Deutsch · Nederlands · 简体中文 · 繁體中文

diff --git a/README.zh-cn.md b/README.zh-cn.md new file mode 100644 index 00000000..dd12308e --- /dev/null +++ b/README.zh-cn.md @@ -0,0 +1,559 @@ +

+ + + + + +
+ layerling 标志 + +

layerling

+

面向 3D 打印的简易 3D CAD

+

+ 放一个形状、挖一个孔、倒个圆角,打印出来。在浏览器里完成,无需账号,也不需要 CAD 基础。 +

+
+ +

+ GNU AGPLv3 许可证 + 无需账号 + 专为 3D 打印打造 + 可由 AI 驱动 +

+ +

简体中文 · English · Deutsch · Nederlands · 繁體中文

+
+ +

+ 浏览器中的 layerling +

+ +

浏览器中的 layerling

+ +

用户指南,一步步说明并配有图片

+ +## 适合谁用 + +你有一台 3D 打印机。你想要的是一个能装上去的零件,而不是一份 CAD 职业。 + +layerling 按你原本的思路工作:把一个形状放到平台上,拖动到合适尺寸,把第二个形状变成孔,将两者分组,导出,打印。上手前没有要学的东西,也**没有要注册的账号**——打开页面就能开始建模。你的设计留在自己的浏览器里:没有账号、没有云端,任何内容都不会上传。 + +### 从 Tinkercad 过来? + +layerling 站在 Tinkercad 之上、朝 Fusion 360 更近一步:操作方式相同,所以你会认出所有东西——平台、形状、实体与孔、分组与取消分组、捆绑、按住 Alt 拖动复制——但它不会停在 Tinkercad 止步的地方。你一直缺少的功能就在这里: + +- **倒角与圆角。** 选中一条边,把它切平或倒圆——一旦打印件需要手感精致或要嵌入某个东西,这是人们最常要求的功能。处理过的边仍然可以修改:随时移除处理,或按“编辑”在同一批边上改数值。 +- **抽壳、分割、草图、螺纹。** 把实体抽成均匀壁厚,用平面把它分开,绘制带精确长度和角度的草图并拉伸或旋转,还能添加螺钉、螺母和螺纹孔。 +- **阵列与包裹。** 让形状按一排、圆周或螺旋重复,或者把图案或文字包裹到圆柱上。 +- **孔阵列。** 点击一个平面,把圆形、方形、矩形、六边形或长圆孔铺满它,可排成网格或交错排列,并设置间距、边距和深度——通风口、扬声器网罩和篮筐一步到位。 +- **按百分比缩放。** 把一个或多个零件按百分比放大或缩小——可整体缩放,让布局随之变大,也可各自原地缩放。 +- **测量与查看内部。** 卷尺、标尺、能把模型切开的剖视图,以及可回看早期状态的历史记录滑块。 +- **底层是真正的几何体。** layerling 保存精确的 CAD 形状,而不只是一堆网格,所以圆角始终是真正的圆角——一直保留到供完整 CAD 程序使用的 STEP 文件中。 + +它不是完整的 CAD 套件:没有参数化时间线,也没有装配体。不过你可以**自己运行它**:把它安装成应用(之后没有网络也能启动),或者在 Windows、NAS 或家用服务器上托管自己的副本——见[快速上手](#快速上手)。 + +> **AI 可以和你一起建模。** layerling 自带 MCP 服务器。Gemini、Claude 或 Codex 之类的 AI 客户端能看到打开的 +> 编辑器标签页并在其中操作:添加形状、修改尺寸、分组、切割、倒圆角、读回场景、截取视口图片。你描述零件, +> AI 来搭建,你看着它完成,随时可以介入。这一切在本地运行,什么都不会离开浏览器——设置方法见 +> [layerling MCP Skill](#layerling-mcp-skill)。 + +## 它能做什么 + +### 搭建 + +- **真正的打印平台**——网格、吸附、用于移动、缩放和旋转的控制柄,以及需要时显示精确数字的面板。 +- **直接输入位置**——位置卡片能把实体放到精确的 X、Y、Z 坐标上,零件也可以停在平台旁边,就像 Tinkercad 那样。 +- **坐标轴箭头**——平台左前方的红、绿、蓝箭头按数值的计数方向显示 X、Y、Z,与 Bambu Studio 和 OrcaSlicer 一致;可在设置中关闭。 +- **会跟随的轴心**——为一个实体设置轴心后,它会一直跟着该实体:随实体移动、旋转和缩放,会被保存,可用 X、Y、Z 数值输入,也可用鼠标拖动,并吸附到角和边中点——适合铰链和关节。 +- **按喜好调整光与影**——明暗对比、阴影强度和柔化程度,以及光线的方向和高度(最高可像 Tinkercad 那样正上方照射),都在设置里。“Tinkercad 外观”按钮能一次把颜色、网格和光线设成那边的样子,较深的网格线还可以每厘米一条、使用单独的颜色。 +- **快速模式**——为较慢的电脑准备:设置里的一个开关会关闭阴影、边线和相机惯性,并以屏幕分辨率绘制视图;相机惯性也可以单独关闭,这样你一松手视图就会停下。 +- **对齐面并查看角度**——“对齐面”工具能让一个零件的面贴上另一个零件的面,可接触或齐平,也可留出间隙;旋转过的实体会在选中项下方显示绕 X、Y、Z 的角度,其设置里的旋转卡片可以直接输入这些数值。 +- **吸附到其他形状**——移动时,形状会把自身的边或中心锁定到周围形状的边和中心上,并显示参考线,因此不用输入数字就能让零件齐平。拖动时按 Alt 可暂停吸附;Shift 让移动保持在一个轴上;一开始就按住 Alt 则会拖出一个副本,与 Tinkercad 相同。 +- **放到面上**——类似 Tinkercad 的 Cruise(巡航)功能:新形状会平放在指针下方的面上,斜面也可以;按 C 可拿起选中的对象,并以同样方式放到另一个面上。 +- **参考点**——右键点击实体,用点标记它的中心、角或边中点;这些点不会被打印,拖动的形状会吸附到它们上面。可以拖动点或输入其坐标,标记会随设计一起保存。卷尺还能标记测量结果的中点——比如圆孔的中心。 +- **交互式帮助**——按 Shift+F1 或点击“帮助”组里的问号,然后点击任意按钮、输入框或窗口:一个小窗口会显示用户指南中对应的部分,并可按需打开。 +- **命令搜索**——按 Ctrl+K,输入工具、形状或命令(“fillet”“mirror”“cylinder”),就能直接跳转过去;它认识英文和德文词,并在每个条目旁显示快捷键。 +- **历史记录视图**——用滑块回看项目的任意早期状态,不会改动任何东西;可以导出该状态,或从它开始一个新项目。由 @rmpel 提供。 +- **毫米或英寸**——使用英制单位时,所有测量值都以英寸显示,可像 Tinkercad 那样用分数(1 5/8),也可用小数;吸附网格步距从 1/64 到 1 英寸,平台网格也以英寸绘制。 +- **你打印机的平台**——从 220 多种常见打印机中选一台,平台就会采用它的尺寸。打印机名称和成型体积显示在工作平面角落(设置里的开关可隐藏这些信息以及设计名称),实体超出边缘时会出现警告。 +- **悬垂与耗材**——“显示悬垂”会用剖面线标出所有比 45°(或你打印机的角度)更陡、需要支撑的面,导出窗口会在切片前显示体积、重量和耗材米数。 +- **形状库**——长方体、圆柱体、胶囊体(需要时一端可以更小,比如做皮带罩)、球体、圆锥、棱锥、楔形、文字、屋顶、半球、圆环、管、从一个轮廓放样到另一个轮廓(比如方形到圆形,实心或带壁,直的或平滑外扩的,扭转的或顶部倾斜的)、三到二十四边的多边形棱柱、螺旋弹簧、可打印即装配的铰链、Gridfinity 收纳盒和底板、滚花把手(直纹、交叉纹或圆纹)等等。 +- **能配合的螺纹**——螺杆、带内六角、沉头或六角头的螺钉、六角螺母和螺纹孔。从 M2 到 M12、从 #4 到一英寸的 UNC/UNF,以及 G1/16 到 G4 的惠氏管螺纹(ISO 228-1),选一下就有;也可以自己设直径和螺距,还支持左旋;英制或 G 规格会用每英寸牙数代替毫米。端部可以倒角,而螺纹孔是一个切割体:把它放进零件里分组,出来的孔就带螺纹。 +- **能啮合的齿轮**——直齿、斜齿、人字齿和锥齿轮,以及内齿轮和齿条,采用渐开线齿形,像齿轮生成器一样按模数和齿数设置,并可设置压力角和打印用侧隙——也可以使用圆齿,在小尺寸打印齿轮上更宽容,在旋钮上握感顺滑。选中两个齿轮,面板会给出它们啮合的中心距。 +- **实体与孔**——把形状变成切割体,再分组形成最终几何体。编辑分组(**E**)会把分组的零件摊开放置以便修改,完成后用“完成”重新构建——分组里套分组也可以,无论设计嵌套多深。 +- **多色分组**——分组可以让每个零件显示自己的颜色,即使已经挖过孔也一样;导出 3MF 或 OBJ 会保留这些颜色,切片软件就能把各零件对应到耗材。 +- **捆绑**——Ctrl+B 像 Tinkercad 的捆绑一样把零件连在一起:它们作为一个整体移动、旋转和缩放,但保留各自颜色,导出时仍是独立实体——很适合多色打印。 +- **相交**——只保留两个或更多选中实体的公共部分,或实体与孔重叠的部分。 +- **分割**——用平面把实体或孔切成两半;抽壳实体仍保留其内腔。转动平面可做斜切,拖动它的箭头,或用“拾取面”把它贴到任意面上。 + +### 精修 + +- **倒角与圆角**——切平或倒圆实体的任意一条边,之后还可以移除或修改该处理。 +- **草图**——用直线、曲线和现成形状绘制轮廓,绘制时按长度和角度设定直线(“50<30”,Shift 以 15° 步距吸附),输入长度、角度和尺寸(像“60+12.5”这样的算式在每个数字输入框中都可用),给角倒圆或倒角,吸附到其他实体的轮廓,绘制可吸附的构造线,然后拉伸或旋转成精确实体。带螺距的旋转会把轮廓卷成一条连续的螺旋线,而不是一圈圈圆环,就像线轴上的耗材。草图也可以做成描边:闭合轮廓变成边框,位于线内侧、外侧或以线为中心;开放线条变成条纹,端部可选平头、方头或圆头。 +- **抽壳**——把实体变成统一壁厚的壁,你选择的面可以开口(顶、底、前、后、左、右,可任意组合),也可以全部封闭——适合盒子、杯子和外壳。 +- **删除面**——点击圆角、孔或凸台的面并删除:周围的面会延伸过来补上缺口,实体仍保持精确,可以继续倒圆角并用于 STEP 导出。 +- **自定义形状**——把反复用到的实体保存在形状库顶部,点击或拖动即可插入任何设计;可以存在浏览器里,也可以放在服务器的共享存储中供所有设备使用。“全部备份”会把它们一起带上。 +- **孔阵列**——在实体的平面上打一排排孔:选择面,挑选圆形、方形、矩形、六边形或长圆孔,设置尺寸、间距、网格或交错排列、到边缘的边距和深度(贯穿整个零件或指定深度),创建前可预览孔的样子。它们仍是与实体分组的普通孔,取消分组后又能自由处理。 +- **面**——把实体的平面向外推出,或在其中挖一个凹槽:选择面,选择“向外”或“向内”,设置距边缘的内缩、圆角半径和深度,并预览结果。它对导入的 STL 也有效,新增的部分仍是与实体分组的普通草图实体。 +- **包裹到圆柱**——把 SVG 图案、标志或文字贴到杯子或管子的壁上,可凸起或雕刻,并让它居中于圆柱。 + +### 文件 + +- **自己的字体**——文字可以使用任何 TrueType、OpenType 或 WOFF 字体;在 Chrome 和 Edge 中还能使用电脑上安装的字体。设计只保留所用字母的轮廓,所以在哪里都能打开。阿拉伯文和希伯来文从右向左排列,阿拉伯文字母会连写。 +- **带上自己的模型**——导入 STL、OBJ、3MF、STEP 或 SVG,并在其基础上建模。SVG 会作为草图实体导入:可选区域、线条外侧或内侧的描边、去掉孔的剪影,或四周加宽的图形——一个文件就能做出饼干模具,或多色标志的分层。文字形状也有相同的填充模式,形状库还提供名牌:用彩色分层制作适合多色打印的文字,可选钥匙圈孔,字母边缘可倒圆或倒角;以及图标牌:用同样的彩色分层制作 SVG 图标,可设置数量,还能“放满一板”。彩色 OBJ——来自 layerling,或以带 `.mtl` 的 ZIP 形式来自 Tinkercad——以及彩色 3MF(包括切片软件项目),都会按每种颜色导入为一个实体;包含多个对象的 3MF 则按每个对象导入为一个实体。 +- **导出切片软件需要的格式**——STL、带名称和颜色的 3MF,或带颜色的 OBJ,可导出选中项或整个场景(隐藏部分不会包含),另有 STEP,方便设计继续进入完整 CAD 程序。PNG 可保存一张干净的视图图片,分辨率是两倍,还可以选择透明背景。 +- **图纸导出**——选择一个零件,或清除选择以导出整个可见设计,然后选择 **导出 → 图纸 → PDF 或 SVG**。它会生成第一角投影布局的主视图、俯视图和右视图,放在带边框的工程图纸上,带分区编号和右下角标题栏,并标注总体尺寸、隐藏边,以及轴向对齐圆孔的直径/位置表格。视图按毫米 1:1 输出;图纸采用能容纳内容的最小 ISO 横向尺寸(也可以自定义更大尺寸)。打印时选择 **100% / 实际大小**。位置从每个视图左下角的总轮廓角点量起。孔表使用名义网格几何,不会自动标注斜孔/非圆孔、螺纹、深度或公差。投影引擎改编自 [Cadverix-3D](https://github.com/WC3D/Cadverix-3D) 的制图工作。 +- **更新提示**——在已发布的程序上,打开着的页面会自行发现新版本,并提示保存后重新加载,同时列出更新内容。 +- **为设计建立文件夹**——把起始页上的设计拖进文件夹(文件夹还能放进文件夹),或使用“移动到……”,从而整理它们;搜索会查遍所有文件夹,“全部备份”会把它们一并保存。 +- **把项目存成文件**——把整个项目(包括历史记录、草图和分组)保存为 `.lyl` 文件,带到别处继续。在 Chrome 和 Edge 中,你可以自己选择文件夹,Ctrl+S 会再次保存到同一个文件;其他浏览器则会下载它。旧版本留下的 `.skf` 文件仍可打开;保存时会在旁边写入一个 `.lyl`。 +- **错误报告**——页脚里的一个链接会保存一个 ZIP,其中包含作为 `.lyl` 的设计,以及记录版本、浏览器和最近消息的文本文件,可直接附到论坛或 GitHub 上,因为它们不接受单独的 `.lyl`。 +- **一眼认出的设计**——所有内容都在你自己的浏览器里,每个设计都有缩略图。 + +### 查看 + +- **透视或正交**——用缩放控件旁的立方体按钮,或按 **O**,在普通视图和平坦的正交视图之间切换。你的观察方向和取景范围会保持不变。 +- **在立方体上转动视图**——拖动视图立方体能像按住鼠标右键一样转动视图,在平板上用一根手指即可;单击仍会跳到对应的那一侧,点击角或边则从那个方向观察。按键 **1**–**6** 也能跳转,**Shift+1**–**6** 还会缩放到选中项。 +- **每个设计四个保存的视图**——**Shift+7**、**8**、**9** 或 **0** 会按当前样子保存视图(角度、平移、缩放),单独按对应键即可恢复。每个设计各有自己的视图,保存的 `.lyl` 文件也会带上它们。 +- **视图立方体可放在任意角落**——设置 > 外观 > **视图立方体位置** 可把立方体放到左上、右上、左下或右下;只要不是左上角,相机控件就会上移填补它的位置。 +- **从下方观察**——相机栏中网格上方的眼睛图标会隐藏平台,这样就能看到设计的底面,而不会被平台挡住。 +- **把面板放到想要的位置**——对象列表、设置、剖视图、卷尺,以及边、抽壳和阵列的工具面板都可以拖动标题栏移动,并在那里再次打开;双击即可停靠。 +- **右键菜单**——在实体上短按右键会弹出最常用的命令:复制、孔或实体、分组、对单个实体倒角、倒圆角和抽壳、镜像和按百分比缩放、隐藏、锁定、放到工作平面、删除。按住右键拖动仍然会转动视图。 +- **剖视图**——沿 X、Y 或 Z 方向的平面把视图剖开,查看壁、内腔和互相配合的零件,并配有粗调和细调滑块。只有视图被剖开:设计和所有导出内容都保持完整。“剖切为 SVG”会把剖切结果按 1:1 保存下来,可用于激光切割或做模板;“测量”能直接在剖切面上读取壁厚和间隙,并自动与壁面对正。 +- **在任意面上设置工作平面**——按 W 并点击一个面,就能在该面上建模;点在角附近会正好落在角上,点在边附近会落在边上且网格沿边延伸,点空白平台则落在点击处。眼睛图标可以隐藏平面以便看清视图,同时它仍然生效。AI 也能把工作平面设到某个面上。 +- **在平板上**——一根手指就能操作设计,效果与鼠标左键完全相同:点按选择,拖动移动,在空白处拖动会拉出选择框。**两根手指归视图使用**:张开或捏合可缩放,一起移动可平移工作平面。放下第二根手指会取消第一根手指已经开始的操作,所以捏合永远不会碰动零件。转动视图没有专属手势;相机栏上有一个开关,仅在触摸屏上显示,开启后一根手指就改为环绕视图而不是选择。数字输入框在你点按时会交出完整数值,方便直接覆盖——数字小键盘没有方向键可以移动光标。手指在绘制草图点、直线、控制柄、测量点和边时比鼠标伸得更远,不过**在平板上触控笔是更好的工具**:更精细,也不会挡住你要瞄准的位置。 + +### 视频 + +由他人制作,不是本项目出品: + + +- [I'm 100% In on Layerling - The Next Big Free CAD](https://youtu.be/IO7S-7bxS5o) – Printology(英语)。一位 Tinkercad 用户的首次试用:layerling 在哪些方面比 Tinkercad 做得更好、哪些地方仍需完善,以及现在是否值得切换过来。 +- [10 Things Layerling Can Do That Tinkercad Can't!](https://youtu.be/cx0OVHgUsJM) – Print N Repeat(英语)。该频道的第二个视频:layerling 能做而 Tinkercad 做不到的十件事。 +- [Layerling la nueva herramienta gratuita de modelado 3D, más completo que Tinkercad](https://youtu.be/-EEt0RSINoY) – Fulcro 1900(西班牙语)。一条关于 layerling 的视频:这款新的免费 3D 建模工具比 Tinkercad 更完整。 +- [Layerling - Tussen Tinkercad en Fusion 360 in, en Helemaal Gratis!](https://youtu.be/X-UuvsfDI-s) – Werkplaats Marc(荷兰语)。面向 Tinkercad 用户的 layerling 初探:抽壳、圆角、孔阵列、带间隙的螺纹、自定义字体和打印机配置,并分别打印了有间隙和无间隙的螺栓来展示差异。 +- [Layerling](https://www.youtube.com/playlist?list=PLYqVFeqYBrPE) – TECHNOBENTO(英语)。一个关于 layerling 的播放列表,目前包含“A new way to sketch in Layerling”。 +- [The PERFECT FREE CAD Program Between Tinkercad and Fusion 360!](https://youtu.be/GIoG-IHPXyg) – Print N Repeat(英语)。一条关于 layerling 的视频:它是介于 Tinkercad 和 Fusion 360 之间的免费 CAD 程序。 +- [Layerling Tutorials](https://www.youtube.com/playlist?list=PLZ-ZWS0D1JIk) – HL ModTech(英语)。一位 Tinkercad 用户的播放列表,目前包含约 23 分钟的 layerling 概览(在浏览器中免费使用、对 Tinkercad 加以扩展的 CAD)、对其功能的深入介绍,以及关于打印螺纹的简短更新。 +- [Layerling – Playlist](https://www.youtube.com/playlist?list=PLCsBmX2kOGWs) – Making Layers(英语)。一个关于 layerling 的系列,目前包含“Tinkercad alternative / upgrade? Introducing Layerling!”——面向从 Tinkercad 转来的用户的概览,以及讲解草图工具的“Layerling Sketch Tools!”。 +- [Tinkercad Too Basic? Fusion 360 Too Much? Meet Layerling for 3D Printing](https://youtu.be/kzV7fQ3rXhw) – 3D Jesus | 3D Printing & Design(英语)。在完全没有手册的情况下首次试用 layerling:圆角与倒角、抽壳、螺纹、草图、旋转实体、阵列、导入和打印机配置。 + + +## 快速上手 + +最省事的方式是使用托管版本。无需安装,无需注册——打开就能建模: + +**https://layerling.com/** + +本节其余内容讲的是运行你自己的副本:在自己的电脑上,或在工作室里一台大家用浏览器访问的机器上。无论应用从哪里提供,设计都不会离开创建它的浏览器,导出文件会直接下载到使用者自己的电脑。 + +### Windows 快速上手 + +从没用过终端?在一台还没安装任何东西的 Windows 11(或当前版本的 Windows 10)电脑上,打开 +**PowerShell**(在开始菜单里搜索即可,不需要管理员权限),粘贴下面这一行: + +```powershell +irm https://raw.githubusercontent.com/henmedia/layerling/main/scripts/windows-quickstart.ps1 | iex +``` + +如果缺少 Git 和 Node.js,它会安装;然后把 layerling 下载到 `%USERPROFILE%\layerling`,并在浏览器中打开 +`http://127.0.0.1:3000/`。使用 layerling 时请让 PowerShell 窗口保持打开;在该窗口按 `Ctrl+C` 即可停止。 + +想**更新** layerling 时,再运行同一行命令——它会发现已有文件夹,改为拉取最新版本,而不是重新下载一遍。脚本本身位于 +[`scripts/windows-quickstart.ps1`](scripts/windows-quickstart.ps1),运行前你可以先读清楚它到底做什么,也可以把它下载下来 +在本地运行,而不是通过管道交给 PowerShell。 + +#### 之后再次打开 + +上面的一行命令还会在桌面留下一个名为 **“Start layerling”** 的快捷方式。以后想再次打开 layerling,双击它即可—— +不用 PowerShell、不用重新安装、不用重新下载,服务器会启动,浏览器会自动打开。它还会**先更新 layerling** +(当文件夹里没有你自己的改动时),并且只在服务器真正就绪后才打开浏览器。如果 layerling 已经在运行,它不会启动 +第二个服务器,也不会在运行中的副本背后更新——只是打开页面。想把 layerling 放在别处,比如另一个硬盘?把想要的文件夹 +传给脚本: + +```powershell +& ([scriptblock]::Create((irm https://raw.githubusercontent.com/henmedia/layerling/main/scripts/windows-quickstart.ps1))) -InstallPath "D:\3DPrinter\Layerling" +``` + +如果你的快捷方式是由旧版脚本创建的,再运行一次一行命令;它会用新的快捷方式替换旧的。 + +更想手动操作?打开 PowerShell 并运行: + +```powershell +cd $env:USERPROFILE\layerling +npm run dev +``` + +然后自己打开 `http://127.0.0.1:3000/`。无论哪种方式,在该窗口按 `Ctrl+C` 都能停止。 + +### Docker + +想在电脑、NAS(Synology、Unraid 等)或家用服务器上运行 layerling 又不想安装 Node.js,可以使用 Docker Hub 上现成的镜像 +**`henmedia/layerling`**(**`ghcr.io/henmedia/layerling`** 也是同一个镜像)。每个版本都会以版本号和 `latest` 发布 +amd64 与 arm64(树莓派、ARM NAS)镜像。应用监听 **3000** 端口。 + +最快的方式是一条命令: + +```bash +docker run -d --name layerling -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails --restart unless-stopped ghcr.io/henmedia/layerling:latest +``` + +`-v` 选项会把起始页的预览图片保存在名为 `layerling-thumbnails` 的 Docker 卷里,让它们在更新后仍然存在;不加这个选项, +图片就在容器内部,每次重新创建容器都会丢失(设计本身保存在浏览器里,不受影响)。在有容器管理器的 NAS 上 +(Synology Container Manager、Unraid、Portainer),在其注册表(Docker Hub)中搜索 `henmedia/layerling`, +或输入 `henmedia/layerling:latest`,映射 3000 端口,并为 `/app/.codex/project-thumbnails` 添加一个卷。要更新, +重新拉取镜像并重新创建容器(或让 Watchtower 代劳)。 + +镜像标签是纯版本号,**不带 “v”**:`ghcr.io/henmedia/layerling:1.42.0`,而 GitHub 发布版本叫 `v1.42.0`。 +拉取只会获取新镜像;已经存在的容器仍会运行旧镜像,直到它被删除并重新创建: + +```bash +docker pull ghcr.io/henmedia/layerling:latest +docker stop layerling +docker rm layerling +docker run -d --name layerling -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails --restart unless-stopped ghcr.io/henmedia/layerling:latest +``` + +`docker inspect layerling | grep image.version` 会显示容器实际运行的版本。如果你为服务器存储挂载了文件夹,请再加上同样的 `-v` 选项。 + +想自己构建镜像,可以使用仓库里的 [`Dockerfile`](docker/Dockerfile) 和 [`compose.yml`](docker/compose.yml): + +1. **安装 Docker。** 在 Windows 或 macOS 上,安装并启动 [Docker Desktop](https://www.docker.com/products/docker-desktop/)。在 Linux 或 NAS 上,你需要带 Compose 的 Docker(`docker compose` 或独立的 `docker-compose`)。 +2. **获取文件。** 可以下载仓库 ZIP([Code → Download ZIP](https://github.com/henmedia/layerling/archive/refs/heads/main.zip))并解压,或者克隆它: + ```bash + git clone https://github.com/henmedia/layerling.git + cd layerling + ``` +3. **启动它。** 在项目文件夹中打开终端(例如 Windows 上的 PowerShell)并运行: + ```bash + docker compose -f docker/compose.yml up -d --build + ``` + 使用较旧的独立程序时,把 `docker compose` 写成 `docker-compose`。Docker 会构建镜像并在后台运行容器(`-d`);首次构建大约需要 2–3 分钟。不加 `--build` 时,同一条命令会改为拉取现成的镜像。 +4. **打开它。** 在同一台电脑上访问 **`http://localhost:3000/`**;从网络中的其他设备访问 **`http://:3000/`**。 + +日常命令: + +- **停止:** `docker compose -f docker/compose.yml down` +- **重启:** `docker compose -f docker/compose.yml up -d` +- **更新**(拉取新代码或解压新 ZIP 之后):`docker compose -f docker/compose.yml up -d --build`;使用现成镜像时,先 `docker compose -f docker/compose.yml pull`,再 `up -d` + +**安装为应用和离线使用需要 https,并且需要静态导出。** 浏览器只会在 `https://` 或 `localhost` 上安装应用并保留供离线使用; +在普通的 `http://192.168.x.x:3000` 地址上两者都不提供(layerling 会在那里隐藏安装提示)。即使有 https,离线文件 +(`sw.js`)也只写入静态导出(见[静态托管](#静态托管web-服务器上的纯文件)),不会写入这个运行服务器版本的镜像。 +要在网络上安装并离线使用,请通过 https 提供静态导出;要给容器前置一个 https 地址,可使用 Caddy 或带证书 +(例如来自 mkcert)的 nginx 之类反向代理。 + +该镜像在生产模式下运行 `next start`,所以除非你打开它,MCP 桥接在那里是关闭的(见[让 AI 客户端访问 NAS 或服务器上的副本](#让-ai-客户端访问-nas-或服务器上的副本))。要提供共享项目文件夹,请绑定一个可写目录, +并在 `compose.yml` 中把 `LAYERLING_SHARED_PROJECTS_DIR` 设为它在容器内的挂载路径,例如 `./shared-projects:/shared-projects` +搭配 `LAYERLING_SHARED_PROJECTS_DIR: "/shared-projects"`(见[网络上的共享设计](#网络上的共享设计))。容器以编号 999 +的用户运行,所以必须允许该用户写入这个文件夹:`sudo chown 999:999 ./shared-projects`,或者给服务加上 +`user: "1000:1000"`(换成你自己的用户和组编号,`id -u` 和 `id -g` 可查看),让容器以你的身份运行。不加的话, +文件夹会显示在起始页上,但什么都存不进去。修改后运行 `docker compose up -d`:`docker compose restart` 会保留旧设置。 +`docker exec printenv LAYERLING_SHARED_PROJECTS_DIR` 会显示正在使用的值。 + +要选择人们首次访问时看到的配色主题,把 `LAYERLING_DEFAULT_THEME` 设为 `system`、`light`、`dark` 或 `graphite` +(同样在 `compose.yml` 中或 `npm run start` 的环境变量里设置)。之前打开过 layerling 的人会保留浏览器已有的主题, +任何人都仍可用主题开关更改。不设置时主题跟随系统。以纯文件方式提供的副本没有可读取该设置的服务器,所以在那里不生效。 + +面向有儿童的班级或工作坊,`LAYERLING_SIMPLE_MODE` 会让 layerling 以简易模式启动:功能区只保留工作坊会用到的工具, +形状库只显示简短列表,按钮更大,起始页只显示设计,没有新闻、没有欢迎文字,也没有离开 layerling 的链接。`true` +是未作选择者的初始值(设置里有开关,在该模式下退出需要按住两秒),`always` 对所有人固定生效并移除开关。以 +`?mode=simple` 结尾的链接会为打开它的设备开启该模式,`?mode=full` 则关闭。它的设置方式与其他变量相同, +以纯文件方式提供的副本没有可读取它的服务器(链接和设置在那仍然有效)。 + +开启共享文件夹后,`LAYERLING_NEW_DESIGNS_ON_SERVER` 会让新建设计默认放在服务器上:`true` 是未作选择者的初始值 +(他们可以在起始页取消勾选 **在服务器上新建设计**),`always` 对所有人固定生效并锁定该勾选项。设置方式相同, +以纯文件方式提供的副本没有可读取它的服务器。 + +在带域名的反向代理后面,代理必须传递原始的 `Host` 和 `X-Forwarded-Proto`(nginx:`proxy_set_header Host $host;` +和 `proxy_set_header X-Forwarded-Proto $scheme;`),否则保存到服务器会被拒绝,并提示 +“Shared projects only accept requests from this site.”。如果代理改写了主机名且你无法更改,请把人们使用的地址列入 +`LAYERLING_ALLOWED_ORIGINS`(逗号分隔,例如 `https://layerling.example.com`)。 + +### 静态托管:Web 服务器上的纯文件 + +任何 Web 服务器都能以纯文件方式提供 layerling;服务器上不运行 Node.js。在一台装有 Node.js 的电脑上构建一次文件 +(见[你需要什么](#你需要什么)): + +```bash +npm install +npm run export +``` + +完成的站点位于 **`apps/web/.next-export/`**。把该文件夹的**内容**(不是文件夹本身)复制到 Web 服务器的文档根目录, +让 `index.html` 直接位于其中。 + +有四件事需要知道: + +- **layerling 需要自己的地址。** 文件之间用从根路径开始的路径互相引用(`/_next/...`),所以 layerling 必须从某个地址的根路径提供,例如 `https://layerling.example.com/` 或 `http://192.168.0.5:8080/`。它不能放在子文件夹里(`https://example.com/layerling/`),也不能从磁盘打开(`file://`)。如果你只看到一大段没有任何样式的纯文本,说明脚本和样式文件没有加载:打开浏览器的开发者工具(F12),在“网络”标签中查看红色的 `/_next/...` 条目,并比较它们的地址与你放置文件的位置。 +- **以下划线开头的文件夹也必须能访问。** 有些服务器会隐藏它们(例如 GitHub Pages 在没有 `.nojekyll` 文件时会这样),而 `_next` 里装着整个程序。 +- **在自己的电脑上快速测试:** `npx serve apps/web/.next-export`,然后打开它打印出的地址。 +- **安装为应用和离线使用需要 https。** 导出中包含离线文件(`sw.js`),但浏览器只会在 `https://` 地址或 `localhost` 上使用它们,不会在你网络中的普通 `http://` 地址上使用。 + +### 网络上的共享设计 + +layerling 本身只是文件,所以共享文件夹需要服务器上有能写入的东西。有两种方式,只需要其中一种:**Node 或 Docker** +(本节,配合 `LAYERLING_SHARED_PROJECTS_DIR`),或者**带 PHP 的普通 Web 服务器**(`store` 文件夹,见下文)。 +如果一个 Web 服务器这两种方式都没有,只提供这些文件——`npx serve`、nginx 或没有 PHP 的 Apache——layerling 能正常显示, +但没有服务器文件夹。 + +如果你在一台别人会用浏览器访问的机器上用 `npm run dev` 或 `npm run start` 运行 layerling,它可以为 `.lyl` 设计提供一个 +共享文件夹。`npm run start` 提供的是 `npm run build` 生成的内容,所以先运行一次构建。把 `LAYERLING_SHARED_PROJECTS_DIR` +指向启动 layerling 的用户可写的目录(`/srv` 下的文件夹通常属于 root,可以自己建一个或更改属主)并启动: + +```bash +LAYERLING_SHARED_PROJECTS_DIR=/srv/layerling-projects npm run start +``` + +起始页随后会在浏览器设计旁显示一个名为 **在服务器上** 的文件夹。打开它就进入了该文件夹:**新建设计** 会直接在那里新建一个, +**新建文件夹** 会创建子文件夹,标题下方的一串路径会显示你当前的位置。一个 `..` 磁贴可以退回上一层,按钮左侧的 +**返回此浏览器中的设计** 会回到此浏览器的设计。拖动设计到文件夹、该磁贴或路径中的某一级,或使用其菜单里的 +**移动到……**,就能移动设计。从浏览器把设计放到服务器也是同样方式:把它的卡片拖到服务器文件夹上。 + +起始页上的两个按钮省去了逐个移动设计的麻烦:**全部放到服务器** 会一次把此浏览器的所有设计移入服务器文件夹, +而 **在服务器上新建设计** 勾选项会让每个新设计都从服务器文件夹开始,因此从第一次修改起就保存在那里。 +名称在服务器上已被占用的设计会留在浏览器里。 + +顶部的搜索框会搜索整个服务器文件夹,而不只是你当前所在的文件夹。每个结果都会说明它在哪个文件夹里, +而那个文件夹本身就是一个按钮:点一下就能过去,搜索会被清空。文件夹也能按名称找到。搜索期间, +起始页上的服务器磁贴会显示那边有多少个匹配项。 + +设计菜单里的 **复制** 会创建它的副本。在服务器上,文件本身会被复制到原文件旁边,使用一个未占用的名称,连图片一起复制—— +不会重新打包,所以副本与原件的几何完全一致。在浏览器里,副本会成为独立的设计,拥有相同的形状、相同的历史记录和 +自己的预览图片,并且在服务器上不属于任何人。 + +保存在服务器上的设计会自行存回服务器,在最后一次修改后五秒以及你离开编辑器时。缩略图会放在文件旁边的 +`.thumbnails` 中。只存在于浏览器里的设计会留在那里,不受影响。 + +保存到服务器的自定义形状会放进存储顶部的 `Custom shapes` 文件夹,每个形状一个 `.lyl` 及对应图片。layerling 会在第一个 +这样的形状出现时创建它;它是个普通文件夹,所以会显示在起始页上,里面的形状也能像任何设计一样打开和保存。 +无论走 Node 方式还是 `store.php`,都不需要额外配置。 + +从服务器打开设计会得到一份私有的本地工作副本。存回时会先检查服务器上的修订版本;如果期间有人改过该文件, +layerling 会拒绝覆盖,并让你重新加载或以其他名称保存。这是共享文件存储,不是同时协作编辑。 + +#### 不用 Node:`store` 文件夹 + +以静态导出方式提供(Web 服务器上的纯文件)的安装无法自行写入任何东西。针对这种情况,导出中附带了 `store.php`。 +在 `index.html` 旁创建一个名为 `store` 且 Web 服务器可写的文件夹,layerling 就会提供与上面相同的共享存储, +包括文件夹等全部功能。没有这个文件夹时该功能不会出现,编辑器里的简短指南会说明如何开启。Web 服务器需要 PHP。 + +该文件夹**没有登录保护**:任何能访问该页面的人都能读取、写入和删除其中的内容。在家庭网络或工作坊里这正是想要的; +在公网可访问的站点上,请保护它或干脆不要使用。 + +部署时有一件事要记住:如果用会删除多余内容的选项来镜像导出——`rsync --delete`、`robocopy /MIR`、WinSCP `-delete`—— +请明确排除 `store`,否则每次更新都会清空项目。 + +## 开发 layerling + +想修改代码,就走这条路。 + +### 你需要什么 + +- Node.js 22.18 或更新版本(指南和字体脚本会直接加载 TypeScript 文件,旧版本做不到);24 也可以,Docker 镜像用的就是它 +- npm,随 Node.js 一起提供 + +用 `node -v` 和 `npm -v` 检查版本。如果这些命令不起作用,请从 Node.js 官网安装 Node.js,然后重新打开终端。 + +### 安装与运行 + +```bash +git clone https://github.com/henmedia/layerling.git +cd layerling +npm install +npm run dev +``` + +没有 Git?在 GitHub 页面上点击绿色的 **Code** 按钮,选择 **Download ZIP**,解压后在解压出的文件夹里打开终端, +从 `npm install` 开始。 + +然后打开 `http://127.0.0.1:3000/`。使用应用时让终端保持打开;`Ctrl+C` 会停止开发服务器。 + +想从另一台电脑通过名称访问开发服务器,例如 `http://myhost.local:3000/`,请在启动前把该名称列入环境变量 +`LAYERLING_ALLOWED_DEV_ORIGINS`(多个名称用逗号分隔,`*.local` 表示所有以 `.local` 结尾的名称)。不设置时, +开发服务器只响应 `localhost` 和 `127.0.0.1`。静态导出和 `npm run start` 不需要它。 + +在 Linux 和 macOS 上,`scripts/start-layerling.sh` 会替你完成每天的启动:先更新代码检出(如果你改过里面的文件就跳过), +启动服务器,等它响应后打开浏览器。可以从任何位置运行,例如 `~/layerling/scripts/start-layerling.sh`。它需要 Git 和 +Node.js,如上所述。如果 layerling 已经在该端口运行,它只会打开浏览器,不会再启动一个服务器。3000 端口被别的程序占了? +用 `PORT=3100 scripts/start-layerling.sh` 启动。它已在 Debian Linux(没有桌面,所以浏览器这一步只打印地址)和 +Windows shell 中测试过;macOS 尚未测试——如果在你的系统上表现异常,请在讨论区告诉我们。 + +### 在容器中开发 + +不想安装 Node.js?那就改用容器开发。你需要带 Compose 的容器引擎——`docker compose` 或 `podman compose` +(SELinux 上的无根 Podman 也可以;compose 文件里的 `:z` 标志会处理文件标签): + +```bash +docker compose -f docker/compose.dev.yml up +``` + +打开 `http://127.0.0.1:3000/`。首次启动会安装依赖;之后的启动会直接进入带热重载的开发服务器。按 `Ctrl+C` 停止。 +如果更新了依赖后发现有些东西还是旧的,删除项目文件夹里的 `node_modules/` 再重新启动。 + +同时还在运行 `docker/compose.yml` 里的生产容器?它也使用 3000 端口——把其中一个的宿主机端口改掉 +(例如 `"3100:3000"`)。 + +### 常用命令 + +| 命令 | 作用 | +| --- | --- | +| `npm run typecheck` | TypeScript 检查 | +| `npm run test` | 单元测试 | +| `npm run test:e2e` | 端到端测试 | +| `npm run build` | 生产构建(`npm run start` 用来提供它) | +| `npm run export` | 用于纯 Web 托管的静态导出 | +| `npm run guide` | 从 `docs/guide` 构建用户指南页面(导出和 `npm run dev` 也会这样做) | +| `npm run guide:images` | 从运行中的程序重新拍摄指南图片(需要 `npm run dev -- -p 3010`;见 `docs/guide/README.md`) | +| `npm run printers:update` | 从 OrcaSlicer 的配置刷新打印机预设 | +| `npm run mcp:layerling` | 为 AI 客户端启动 MCP 服务器(见下文) | + +## layerling MCP Skill + +layerling 包含一个本地 MCP 服务器,供支持 MCP 工具的 AI 客户端使用。它让智能体能够检查和操作一个正在运行的 +编辑器标签页:列出打开的编辑器、读取场景、创建、更新和选择对象、分组、切割和分离零件、列出 CAD 边 ID、 +应用倒角或圆角、抽壳实体、检查错误并截取视口图片。 + +它针对本地开发服务器工作。在生产构建和静态托管中,MCP 路由是禁用的,除非服务器用访问令牌开启它 +([见下文](#让-ai-客户端访问-nas-或服务器上的副本));在 layerling.com 上它始终关闭。 + +1. 在项目文件夹中用 `npm run dev` 启动 layerling(见[安装与运行](#安装与运行))。 +2. 打开一个编辑器标签页,例如 `http://127.0.0.1:3000/?editor=1`——也可以不打开:当没有编辑器打开时,第一个需要它的工具会用编辑器启动你的浏览器(NAS 或服务器上的副本不适用;`LAYERLING_MCP_OPEN_EDITOR=0` 可关闭此行为)。 +3. 按下面的说明连接你的 AI 客户端。它会自行用 + `node scripts/layerling-mcp-server.mjs` 启动 MCP 服务器。 + +主要工具名包括 `layerling_list_editors`、`layerling_read_scene`、`layerling_list_objects`、 +`layerling_create_shape`、`layerling_update_object`、`layerling_list_edges`、`layerling_apply_edge_treatment`、 +`layerling_hollow_object`、`layerling_array_objects`、`layerling_set_section_view` 和 `layerling_capture_image`。 + +### Claude Code + +无需安装:仓库已经包含 `.mcp.json`,它会为本项目注册 MCP 服务器;还包含一份位于 `.claude/skills/layerling-mcp-skill` +的技能副本,这正是 Claude Code 查找技能的位置。在 Claude Code 中打开 layerling 文件夹并提问: + +```text +Use the layerling MCP tools to list my open layerling editors and inspect the current scene. +``` + +### Claude Desktop + +Claude Desktop 不会读取项目的 `.mcp.json` 或技能文件,但可以通过自己的配置使用同一个 MCP 服务器。在那里添加服务器, +以 [`docs/mcp/claude-desktop-config.example.json`](docs/mcp/claude-desktop-config.example.json) 为模板,并把脚本路径替换为 +你机器上的绝对路径。重启 Claude Desktop 后,提问: + +```text +Use the layerling MCP tools to list open editors, inspect the scene, and modify the selected object. +``` + +### Codex + +把 `docs/skills/layerling-mcp-skill` 中的技能复制到你的 Codex 技能文件夹。 + +Windows PowerShell: + +```powershell +New-Item -ItemType Directory -Force "$env:USERPROFILE\.codex\skills" | Out-Null +Copy-Item -Recurse -Force "docs\skills\layerling-mcp-skill" "$env:USERPROFILE\.codex\skills\layerling-mcp-skill" +``` + +macOS 或 Linux: + +```bash +mkdir -p ~/.codex/skills +cp -R docs/skills/layerling-mcp-skill ~/.codex/skills/ +``` + +然后向你的 Codex 配置添加一个 MCP 服务器条目,以 [`docs/mcp/codex-config.example.toml`](docs/mcp/codex-config.example.toml) +为模板,并把脚本路径替换为你机器上的绝对路径。重启 Codex 并提问: + +```text +Use $layerling-mcp-skill to list my open layerling editors and inspect the current scene. +``` + +### Gemini 与 Antigravity + +对于 Antigravity,仓库在 `.agents/skills/layerling-mcp-skill` 附带了一份技能副本,Antigravity 会自动发现它。 +对于 Gemini CLI,把 `docs/skills/layerling-mcp-skill` 中的技能复制到你的全局技能文件夹。 + +Windows PowerShell: + +```powershell +New-Item -ItemType Directory -Force "$env:USERPROFILE\.gemini\skills" | Out-Null +Copy-Item -Recurse -Force "docs\skills\layerling-mcp-skill" "$env:USERPROFILE\.gemini\skills\layerling-mcp-skill" +``` + +macOS 或 Linux: + +```bash +mkdir -p ~/.gemini/skills +cp -R docs/skills/layerling-mcp-skill ~/.gemini/skills/ +``` + +然后把这台服务器添加到 Gemini CLI 的 `settings.json` 或 Antigravity 的 `mcp_config.json`,以 +[`docs/mcp/gemini-config.example.json`](docs/mcp/gemini-config.example.json) 为模板,并把脚本路径替换为你机器上的绝对路径。 +重启客户端并提问: + +```text +Use the layerling MCP tools to list my open layerling editors and inspect the current scene. +``` + +### 让 AI 客户端访问 NAS 或服务器上的副本 + +你自己托管的副本(NAS 上的 Docker 镜像、家用服务器)可以让 AI 客户端通过网络操作其打开的编辑器。它**默认关闭**, +因为任何能操作这个桥接的人都能读取和修改打开的设计。用服务器上的两个设置开启它,启动时读取——现成镜像无需重新构建: + +```yaml +environment: + LAYERLING_MCP_REMOTE: "true" + LAYERLING_MCP_TOKEN: "a-long-random-secret-of-at-least-16-characters" +``` + +没有至少 16 个字符的令牌,桥接就会保持关闭。然后: + +1. 在浏览器中打开该副本的一个编辑器标签页,例如 `http://nas:3000/?editor=1`,并保持打开。 +2. 把地址和同一个令牌交给 MCP 客户端:在它的配置中设置 `LAYERLING_URL=http://nas:3000` 和 + `LAYERLING_MCP_TOKEN=`(参见 `docs/mcp` 中的示例)。 + +令牌保护这些命令:只有发送它的客户端才能列出或操作编辑器。编辑器页面不需要令牌,但只有当它们是该副本的页面, +并且是通过只有你自己网络中的人才能使用的地址或名称(IP 地址、不带点的名称,或以 `.local` 或 `.lan` 结尾的名称)打开时, +才会计入。这样可以防止互联网上的网页通过你的浏览器访问你的 NAS。如果你通过真实域名打开副本,例如在反向代理后面, +请把它列入 `LAYERLING_MCP_ALLOWED_HOSTS`(逗号分隔)。在你信任的网络上使用它,超出该范围的任何情况都使用 HTTPS: +令牌是在请求头中传输的。 + +## 参与贡献 + +欢迎贡献,你不需要是 3D 打印从业者也能帮忙——把这份 README 里的一句话写得更清楚也算。适合入手的地方: + +- 编辑器缺陷修复 +- 几何与布尔测试用例 +- 导入和导出的边界情况(STL、OBJ、3MF、STEP、SVG) +- 界面打磨 +- 文档截图和视频 +- 无障碍和性能改进 + +提交拉取请求前请阅读 [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md)。每个版本的变更见 +[更新日志](docs/CHANGELOG.md)。 + +## 安全 + +请不要为安全敏感的问题提交公开 issue。报告流程见 [.github/SECURITY.md](.github/SECURITY.md)。 + +## 来源 + +layerling 是 Formsmith746 和 SketchForge 贡献者所开发 [SketchForge-3D](https://github.com/Formsmith746/SketchForge-3D) +的分支。该分支于 2026 年 9 月 16 日从 SketchForge 1.0.9 开始。SketchForge 仍是一个出色的项目, +也是本项目存在的原因。 + +## 商标 + +Tinkercad 是 Autodesk, Inc. 的商标。layerling 是一个独立项目,与 Autodesk 没有关联,也未获其认可或赞助。 + +## 许可证 + +版权所有 (C) 2026 layerling 贡献者。 +版权所有 (C) 2026 SketchForge 贡献者。 + +layerling 是 SketchForge-3D 的修改版本,按 **GNU Affero 通用公共许可证第 3.0 版(仅此版本)** +(`AGPL-3.0-only`)授权——与原项目相同。见 [LICENSE](LICENSE)。 + +如果你修改了 layerling 并让其他人通过网络使用修改后的版本,许可证第 13 条要求你向他们提供相应的源代码。 +起始页正好为此提供了一个 **源代码** 链接:在构建时把 `NEXT_PUBLIC_SOURCE_CODE_URL` 设为你的构建所用源代码的公开 URL。 diff --git a/README.zh-tw.md b/README.zh-tw.md new file mode 100644 index 00000000..b1b03000 --- /dev/null +++ b/README.zh-tw.md @@ -0,0 +1,554 @@ +
+ + + + + +
+ layerling 標誌 + +

layerling

+

簡單易用的 3D 列印 CAD

+

+ 放下形狀、挖出孔洞、倒個圓角,列印出來。在瀏覽器裡就能完成,不需要帳號,也不需要 CAD 背景。 +

+
+ +

+ GNU AGPLv3 授權條款 + 無需帳號 + 專為 3D 列印打造 + 可由 AI 驅動 +

+ +

English · Deutsch · Nederlands · 简体中文 · 繁體中文

+
+ +

+ 瀏覽器中的 layerling +

+ +

瀏覽器中的 layerling

+ +

使用者指南,一步一步說明並附有圖片

+ +## 適合誰用 + +你有一台 3D 印表機。你想要的是剛好能裝上某個東西的零件,而不是一份 CAD 職業。 + +layerling 照著你原本的思路運作:把形狀放到平台上,拖曳到合適尺寸,把第二個形狀變成孔,將兩者組成群組,匯出,列印。開始之前沒有東西要學,也**沒有帳號要註冊**——打開頁面就能開始做。你的設計留在自己的瀏覽器裡:沒有帳號、沒有雲端,任何東西都不會上傳。 + +### 從 Tinkercad 過來? + +layerling 比 Tinkercad 再往 Fusion 360 靠近一步:操作方式相同,所以你會認得所有東西——平台、形狀、實體與孔、群組與取消群組、綁定、按住 Alt 拖曳複製——但它不會停在 Tinkercad 停下的地方。你一直缺少的功能,這裡都準備好了: + +- **倒角與圓角。** 選一條邊,把它切平或倒圓——列印件要摸起來精緻、或要嵌進某個東西時,這是最多人要求的功能。處理過的邊仍然可以修改:隨時移除處理,或按「編輯」在同一批邊上改數值。 +- **抽殼、分割、草圖、螺紋。** 把實體抽成均勻壁厚、用平面切開、繪製有精確長度與角度的草圖再擠出或旋轉,還能加入螺絲、螺帽與攻牙孔。 +- **陣列與包覆。** 讓形狀沿一排、圓周或螺旋重複,或把圖案或文字包覆到圓柱上。 +- **孔陣列。** 點擊平面,把圓孔、方孔、矩形孔、六角孔或長圓孔鋪滿它,可排成網格或交錯排列,並設定間距、邊距與深度——通風口、喇叭網罩和籃子一步完成。 +- **按百分比縮放。** 把一個或多個零件按百分比放大或縮小——可整體縮放,讓排列跟著變大,也可各自原地縮放。 +- **量測與看進內部。** 捲尺、標尺、能把模型切開的剖視圖,以及可回看先前狀態的歷史記錄滑桿。 +- **底層是真正的幾何。** layerling 保留精確的 CAD 形狀,而不只是一堆網格,所以圓角始終是圓角——一路保留到供完整 CAD 程式使用的 STEP 檔。 + +它不是完整的 CAD 套件:沒有參數式時間軸,也沒有組合件。不過你可以**自己執行它**:安裝成應用程式(之後沒有網路也能啟動),或在 Windows、NAS 或家用伺服器上架設自己的副本——見[快速上手](#快速上手)。 + +> **AI 可以陪你一起建模。** layerling 內建 MCP 伺服器。Gemini、Claude 或 Codex 之類的 AI 用戶端能看到開啟的編輯器分頁並在其中操作:新增形狀、修改尺寸、群組、切割、倒圓角、讀回場景、擷取視埠畫面。你描述零件,AI 負責建模,你在旁邊看,隨時可以接手。這一切都在本機執行,什麼都不會離開瀏覽器——設定方式見 [layerling MCP Skill](#layerling-mcp-skill)。 + +## 它能做什麼 + +### 建模 + +- **真正的建模平台**——網格、吸附、用來移動、縮放和旋轉的控點,以及需要時顯示精確數字的面板。 +- **直接輸入位置**——位置卡片能把實體放到精確的 X、Y、Z 座標,零件也可以停放在平台旁邊,就像 Tinkercad 那樣。 +- **座標軸箭頭**——平台左前方的紅、綠、藍箭頭,依照數值計算的方向顯示 X、Y、Z,與 Bambu Studio 和 OrcaSlicer 一致;可在設定中關閉。 +- **會跟著走的軸心**——為實體設定軸心後,它會一直跟著該實體:隨實體移動、旋轉和縮放,會被儲存,可用 X、Y、Z 數值輸入,也可用滑鼠拖曳,並吸附到角落與邊中點——適合鉸鏈和關節。 +- **光影任你調**——明暗對比、陰影強度與柔和度,以及光線的方向和高度(最高可像 Tinkercad 那樣從正上方照射),都在設定裡。「Tinkercad 外觀」按鈕能一次把顏色、網格和光線設成那邊的樣子,較深的網格線還可以每公分一條,各自使用一種顏色。 +- **快速模式**——給較慢的電腦用:設定裡的一個開關會關閉陰影、邊線和相機慣性,並以螢幕解析度繪製視圖;相機慣性也可以單獨關閉,這樣你一放開,視圖就會停下。 +- **對齊面並查看角度**——「對齊面」工具能讓一個零件的面貼上另一個零件的面,可接觸或齊平,也可留間隙;旋轉過的實體會在選取項目下方顯示繞 X、Y、Z 的角度,設定裡的旋轉卡片可以直接輸入這些數值。 +- **吸附到其他形狀**——移動時,形狀會把邊或中心鎖定到周圍形狀的邊和中心上,並顯示參考線,因此不用輸入數字就能讓零件齊平。拖曳時按 Alt 可暫停吸附;Shift 讓移動保持在單一軸向;一開始就按住 Alt 則會拖曳出副本,與 Tinkercad 相同。 +- **放到面上**——類似 Tinkercad 的 Cruise:新形狀會平放在指標下方的面上,斜面也可以;按 C 可拿起選取項目,並以同樣方式放到另一個面上。 +- **參考點**——在實體上按右鍵,用點標記它的中心、角落或邊中點;這些點不會被列印,被拖曳的形狀會吸附到它們。可以拖曳點或輸入座標,標記會隨設計一起儲存。捲尺還能標記量測結果的中點——例如圓孔的中心。 +- **互動式說明**——按 Shift+F1,或點「說明」群組裡的問號,然後點任何按鈕、欄位或視窗:小視窗會顯示使用者指南中對應的部分,並可依需求開啟。 +- **指令搜尋**——按 Ctrl+K,輸入工具、形狀或指令(「fillet」「mirror」「cylinder」),就能直接跳過去;它認得英文和德文詞彙,並在每個項目旁顯示快速鍵。 +- **歷史記錄視圖**——用滑桿回看專案的任何先前狀態,不會改動任何東西;可以匯出該狀態,或從它開始新專案。由 @rmpel 提供。 +- **公釐或英吋**——使用英制單位時,所有量測值都以英吋顯示,可像 Tinkercad 那樣用分數(1 5/8),也可用小數;吸附網格步距從 1/64 到 1 英吋,平台網格也以英吋繪製。 +- **你印表機的列印平台**——從超過 220 種常見印表機中選一台,平台就會採用它的尺寸。名稱和成型體積顯示在工作平面角落(設定裡的開關可隱藏這些資訊與設計名稱),實體超出邊緣時會出現警告。 +- **懸垂與線材**——「顯示懸垂」會用剖面線標出所有比 45°(或你印表機的角度)更陡、需要支撐的面,匯出視窗會在切片前顯示體積、重量和線材公尺數。 +- **形狀庫**——長方體、圓柱、膠囊體(需要時一端可以更小,例如做皮帶罩)、球體、圓錐、角錐、楔形、文字、屋頂、半球、圓環、管、從一個輪廓放樣到另一個輪廓(例如方形到圓形,實心或帶壁,直的或平滑外擴,扭轉或頂部傾斜)、三到二十四邊的多邊形柱體、螺旋彈簧、可直接列印的鉸鏈、Gridfinity 收納盒和底板、滾花握把(直紋、交叉紋或圓紋)等等。 +- **能配合的螺紋**——螺桿、帶內六角、沉頭或六角頭的螺絲、六角螺帽和攻牙孔。從 M2 到 M12、從 #4 到一英吋的 UNC/UNF,以及 G1/16 到 G4 的惠氏管螺紋(ISO 228-1),選一下就有;也可以自己設直徑和螺距,還支援左旋;英制或 G 規格會用每英吋牙數取代公釐。端部可以倒角,而攻牙孔是切割體:把它放進零件裡組成群組,出來的孔就帶螺紋。 +- **能齧合的齒輪**——正齒輪、斜齒輪、人字齒輪和傘齒輪,以及內齒輪和齒條,採用漸開線齒形,像齒輪產生器一樣按模數和齒數設定,並可設定壓力角和列印用背隙——也可以使用圓齒,在小尺寸列印齒輪上更寬容,在旋鈕上握感滑順。選取兩個齒輪,面板會給出它們齧合的中心距。 +- **實體與孔**——把形狀變成切割體,再組成群組形成最終幾何。編輯群組(**E**)會把群組的零件攤開放置以便修改,完成後按「完成」重新建立——群組裡再套群組也可以,無論設計巢狀多深。 +- **多色群組**——群組可以讓每個零件顯示自己的顏色,即使已經挖過孔也一樣;匯出 3MF 或 OBJ 會保留這些顏色,切片軟體就能把各零件對應到線材。 +- **綁定**——Ctrl+B 像 Tinkercad 的綁定一樣把零件連在一起:它們作為一個整體移動、旋轉和縮放,但保留各自顏色,匯出時仍是獨立實體——很適合多色列印。 +- **交集**——只保留兩個以上選取實體的公共部分,或實體與孔重疊的部分。 +- **分割**——用平面把實體或孔切成兩半;抽殼過的實體仍保留內腔。轉動平面可做斜切,拖曳它的箭頭,或用「選取面」把它貼到任何面上。 + +### 細節修整 + +- **倒角與圓角**——切平或倒圓實體的任何一條邊,之後還可以移除或修改該處理。 +- **草圖**——用直線、曲線和現成形狀繪製輪廓,繪製時依長度和角度設定直線(「50<30」,Shift 以 15° 步進吸附),輸入長度、角度和尺寸(像「60+12.5」這樣的算式在每個數字欄位都能用),給角落倒圓或倒角,吸附到其他實體的輪廓,繪製可吸附的構造線,然後擠出或旋轉成精確實體。帶螺距的旋轉會把輪廓繞成一條連續的螺旋股,而不是一圈圈圓環,就像線軸上的線材。草圖也可以做成筆畫:閉合輪廓變成邊框,位於線內側、外側或以線為中心;開放線條變成條帶,端部可選平頭、方頭或圓頭。 +- **抽殼**——把實體變成單一壁厚的殼,你選擇的面可以開口(上、下、前、後、左、右,可任意組合)或全部封閉——適合盒子、杯子和外殼。 +- **刪除面**——點擊圓角、孔或凸台的面並刪除:周圍的面會延伸過來補上缺口,實體仍保持精確,可以繼續倒圓角並用於 STEP 匯出。 +- **自訂形狀**——把反覆用到的實體儲存在形狀庫頂端,點擊或拖曳即可插入任何設計;可以存在瀏覽器裡,也可以放在伺服器的共用儲存區供所有裝置使用。「全部備份」會把它們一起帶上。 +- **孔陣列**——在實體的平面上打孔:選面,挑選圓孔、方孔、矩形孔、六角孔或長圓孔,設定尺寸、間距、網格或交錯排列、到邊緣的邊距和深度(貫穿整個零件或指定深度),建立前可預覽孔的樣子。它們仍是與實體組成群組的普通孔,取消群組後又能自由處理。 +- **面**——把實體的平面往外推,或在其中挖一個凹槽:選面,選擇「向外」或「向內」,設定距邊緣的內縮、圓角半徑和深度,並預覽結果。它對匯入的 STL 也有效,新增的部分仍是與實體組成群組的普通草圖實體。 +- **包覆到圓柱**——把 SVG 圖案、標誌或文字貼到杯子或管子的壁上,可凸起或雕刻,並讓它居中於圓柱。 + +### 檔案 + +- **自己的字型**——文字可以使用任何 TrueType、OpenType 或 WOFF 字型;在 Chrome 和 Edge 中還能使用電腦上安裝的字型。設計只保留所用字母的輪廓,所以在哪裡都能開啟。阿拉伯文和希伯來文由右往左排列,阿拉伯文字母會連寫。 +- **帶上自己的模型**——匯入 STL、OBJ、3MF、STEP 或 SVG,並在其基礎上建模。SVG 會以草圖實體匯入:區域、線條外側或內側的筆畫、去掉孔的剪影,或四周加寬的圖形——一個檔案就能做出餅乾模具,或多色標誌的分層。文字形狀也有相同的填滿模式,形狀庫還提供名牌:用彩色分層製作適合多色列印的文字,可選鑰匙圈孔,字母邊緣可倒圓或倒角;以及圖示標籤:用同樣的彩色分層製作 SVG 圖示,可設定數量,還有「能放幾個就放幾個」來填滿平台。彩色 OBJ——來自 layerling,或來自 Tinkercad 的 ZIP(附帶 `.mtl`)——以及彩色 3MF(包括切片軟體專案),都會依每種顏色匯入為一個實體;包含多個物件的 3MF 則依每個物件匯入為一個實體。 +- **匯出切片軟體要的格式**——STL、帶名稱和顏色的 3MF,或帶顏色的 OBJ,可匯出選取項目或整個場景(隱藏部分不會包含),另有 STEP,方便設計繼續進入完整 CAD 程式。PNG 可儲存一張乾淨的視圖圖片,解析度是兩倍,還可以選擇透明背景。 +- **圖紙匯出**——選取一個零件,或清除選取範圍以匯出整個可見設計,然後選擇 **匯出 → 圖紙 → PDF 或 SVG**。它會產生第一角投影版面的前視圖、上視圖和右側視圖,放在帶邊框的工程圖紙上,附分區編號和右下角標題欄,並標註總體尺寸、隱藏邊,以及軸向對齊圓孔的直徑/位置表格。視圖以公釐 1:1 輸出;圖紙採用能容納內容的最小 ISO 橫向尺寸(也可以自訂更大尺寸)。列印時選擇 **100%/實際大小**。位置從每個視圖左下角的總輪廓角點量起。孔表使用標稱網格幾何,不會自動標註斜孔/非圓孔、螺紋、深度或公差。投影引擎改編自 [Cadverix-3D](https://github.com/WC3D/Cadverix-3D) 的製圖工作。 +- **更新提示**——在已發行的程式上,開啟中的頁面會自行發現新版本,並提示儲存後重新載入,同時列出更新內容。 +- **為設計建立資料夾**——把起始頁上的設計拖曳到資料夾(資料夾還能放進資料夾),或使用「移到……」,藉此整理;搜尋會查遍所有資料夾,「全部備份」會把它們一併儲存。 +- **把專案存成檔案**——把整個專案(包括歷史記錄、草圖和群組)儲存為 `.lyl` 檔,帶到別處繼續。在 Chrome 和 Edge 中,你可以自己選擇資料夾,Ctrl+S 會再次儲存到同一個檔案;其他瀏覽器則會下載它。舊版本留下的 `.skf` 檔仍可開啟;儲存時會在旁邊寫入一個 `.lyl`。 +- **錯誤回報**——頁尾的一個連結會儲存一個 ZIP,裡面包含 `.lyl` 格式的設計,以及記錄版本、瀏覽器和最近訊息的文字檔,可直接附到論壇或 GitHub,因為它們不接受單獨的 `.lyl`。 +- **一眼就認出的設計**——所有內容都在你自己的瀏覽器裡,每個設計都有縮圖。 + +### 視圖 + +- **透視或正交**——用縮放控制項旁的立方體按鈕,或按 **O**,在一般視圖和平坦的正交視圖之間切換。你的觀察方向和取景範圍會保持不變。 +- **在立方體上轉動視圖**——拖曳視圖立方體能像按住滑鼠右鍵一樣轉動視圖,在平板上用一根手指即可;點擊仍會跳到對應的那一側,點擊角落或邊則從那個方向觀察。按鍵 **1**–**6** 也能跳轉,**Shift+1**–**6** 還會縮放到選取項目。 +- **每個設計四個儲存的視圖**——**Shift+7**、**8**、**9** 或 **0** 會按目前樣子儲存視圖(角度、平移、縮放),單獨按對應鍵即可還原。每個設計各有自己的視圖,儲存的 `.lyl` 檔也會帶上它們。 +- **視圖立方體可放在任何角落**——設定 > 外觀 > **視圖立方體位置** 可把立方體放到左上、右上、左下或右下;只要不是左上角,相機控制項就會上移填補它的位置。 +- **從下方觀察**——相機列中網格上的眼睛圖示會隱藏平台,這樣就能看到設計的底面,而不會被平台擋住。 +- **把面板放到想要的位置**——物件清單、設定、剖視圖、捲尺,以及邊、抽殼和陣列的工具面板都可以拖曳標題列移動,並在那裡再次開啟;雙擊即可停靠。 +- **右鍵選單**——在實體上短按右鍵會彈出最常用的指令:複製、孔或實體、群組、對單一實體倒角、倒圓角和抽殼、鏡像和按百分比縮放、隱藏、鎖定、放到工作平面、刪除。按住右鍵拖曳仍然會轉動視圖。 +- **剖視圖**——沿 X、Y 或 Z 方向的平面把視圖剖開,查看壁厚、內腔和互相配合的零件,並附粗調和細調滑桿。只有視圖被剖開:設計和所有匯出內容都保持完整。「剖切為 SVG」會把剖切結果按 1:1 儲存下來,可用於雷射切割或做模板;「量測」能直接在剖切面上讀取壁厚和間隙,並自動與壁面對正。 +- **在任何面上設定工作平面**——按 W 並點擊一個面,就能在該面上建模;點擊角落附近會正好落在角落,點擊邊附近會落在邊上且網格沿邊延伸,點擊空白平台則落在該處。眼睛圖示可以隱藏平面以便看清視圖,同時它仍然生效。AI 也能把工作平面設到某個面上。 +- **在平板上**——一根手指就能操作設計,效果與滑鼠左鍵完全相同:點按選取、拖曳移動、在空白處拖曳會拉出選取框。**兩根手指屬於視圖**:張開或捏合可縮放,一起移動可平移工作平面。放下第二根手指會取消第一根手指已經開始的操作,所以捏合永遠不會碰動零件。轉動視圖沒有專屬手勢;相機列上有一個開關,僅在觸控螢幕上顯示,開啟後一根手指就改為環繞視圖而不是選取。數字欄位在你點按時會交出完整數值,方便直接覆寫——數字小鍵盤沒有方向鍵可以移動游標。手指在繪製草圖點、直線、控點、量測點和邊時比滑鼠伸得更遠,不過**在平板上觸控筆是更好的工具**:更精細,也不會擋住你要瞄準的位置。 + +### 影片 + +由其他人製作,不是本專案出品: + + +- [I'm 100% In on Layerling - The Next Big Free CAD](https://youtu.be/IO7S-7bxS5o) – Printology(英語)。一位 Tinkercad 使用者的初次試用:layerling 在哪些方面做得比 Tinkercad 好、哪些地方仍待改進,以及現在是否值得改用。 +- [10 Things Layerling Can Do That Tinkercad Can't!](https://youtu.be/cx0OVHgUsJM) – Print N Repeat(英語)。該頻道的第二支影片:layerling 能做到而 Tinkercad 做不到的十件事。 +- [Layerling la nueva herramienta gratuita de modelado 3D, más completo que Tinkercad](https://youtu.be/-EEt0RSINoY) – Fulcro 1900(西班牙語)。一支關於 layerling 的影片:這款新的免費 3D 建模工具比 Tinkercad 更完整。 +- [Layerling - Tussen Tinkercad en Fusion 360 in, en Helemaal Gratis!](https://youtu.be/X-UuvsfDI-s) – Werkplaats Marc(荷蘭語)。給 Tinkercad 使用者的 layerling 初探:抽殼、圓角、孔陣列、帶間隙的螺紋、自訂字型與印表機設定,並分別列印有間隙與無間隙的螺栓來展示差異。 +- [Layerling](https://www.youtube.com/playlist?list=PLYqVFeqYBrPE) – TECHNOBENTO(英語)。一個關於 layerling 的播放清單,目前收錄「A new way to sketch in Layerling」。 +- [The PERFECT FREE CAD Program Between Tinkercad and Fusion 360!](https://youtu.be/GIoG-IHPXyg) – Print N Repeat(英語)。一支關於 layerling 的影片:它是介於 Tinkercad 與 Fusion 360 之間的免費 CAD 程式。 +- [Layerling Tutorials](https://www.youtube.com/playlist?list=PLZ-ZWS0D1JIk) – HL ModTech(英語)。一位 Tinkercad 使用者的播放清單,目前包含約 23 分鐘的 layerling 概觀(免費、以瀏覽器執行、延伸 Tinkercad 能力的 CAD)、對其功能的深入介紹,以及關於列印螺紋的簡短更新。 +- [Layerling – Playlist](https://www.youtube.com/playlist?list=PLCsBmX2kOGWs) – Making Layers(英語)。一個關於 layerling 的系列,目前收錄「Tinkercad alternative / upgrade? Introducing Layerling!」——寫給從 Tinkercad 轉來的人的概觀,以及講解草圖工具的「Layerling Sketch Tools!」。 +- [Tinkercad Too Basic? Fusion 360 Too Much? Meet Layerling for 3D Printing](https://youtu.be/kzV7fQ3rXhw) – 3D Jesus | 3D Printing & Design(英語)。在完全沒有手冊的情況下初次試用 layerling:圓角與倒角、抽殼、螺紋、草圖、旋轉實體、陣列、匯入與印表機設定。 + + +## 快速上手 + +最省事的方式是使用代管版本。無需安裝,無需註冊——打開就能開始做: + +**https://layerling.com/** + +本節其餘內容說明如何執行你自己的副本:在自己的電腦上,或在工作室裡一台大家用瀏覽器存取的機器上。無論應用程式從哪裡提供,設計都不會離開建立它的瀏覽器,匯出檔會直接下載到使用者自己的電腦。 + +### Windows 快速上手 + +從沒用過終端機?在還沒安裝任何東西的 Windows 11(或目前版本的 Windows 10)電腦上,開啟 +**PowerShell**(在開始功能表搜尋即可,不需要系統管理員權限),貼上下面這一行: + +```powershell +irm https://raw.githubusercontent.com/henmedia/layerling/main/scripts/windows-quickstart.ps1 | iex +``` + +如果缺少 Git 和 Node.js,它會先裝好;接著把 layerling 下載到 `%USERPROFILE%\layerling`,並在瀏覽器中開啟 +`http://127.0.0.1:3000/`。使用 layerling 時請讓 PowerShell 視窗保持開啟;在該視窗按 `Ctrl+C` 即可停止。 + +想**更新** layerling 時,再執行同一行指令——它會發現資料夾已存在,改為取得最新版本,而不是重新下載一次。指令碼本身位於 +[`scripts/windows-quickstart.ps1`](scripts/windows-quickstart.ps1),執行前你可以先讀清楚它到底做什麼,也可以把它下載下來 +在本機執行,而不是用管線交給 PowerShell。 + +#### 之後再次開啟 + +上面的一行指令還會在桌面留下一個名為 **「Start layerling」** 的捷徑。以後想再次開啟 layerling,雙擊它即可—— +不用 PowerShell、不用重新安裝、不用重新下載,伺服器會啟動,瀏覽器會自動開啟。它還會**先更新 layerling** +(當資料夾裡沒有你自己的變更時),並且只在伺服器真正就緒後才開啟瀏覽器。如果 layerling 已經在執行,它不會啟動 +第二個伺服器,也不會在執行中的副本背後更新——只會開啟頁面。想把 layerling 放在別處,例如另一個磁碟機?以你要的資料夾執行指令碼: + +```powershell +& ([scriptblock]::Create((irm https://raw.githubusercontent.com/henmedia/layerling/main/scripts/windows-quickstart.ps1))) -InstallPath "D:\3DPrinter\Layerling" +``` + +如果你的捷徑是由舊版指令碼建立的,再執行一次一行指令;它會用新的捷徑替換舊的。 + +想手動操作?開啟 PowerShell 並執行: + +```powershell +cd $env:USERPROFILE\layerling +npm run dev +``` + +然後自己開啟 `http://127.0.0.1:3000/`。無論哪種方式,在該視窗按 `Ctrl+C` 都能停止。 + +### Docker + +想在電腦、NAS(Synology、Unraid 等)或家用伺服器上執行 layerling 又不想安裝 Node.js,可以使用 Docker Hub 上現成的映像 +**`henmedia/layerling`**(**`ghcr.io/henmedia/layerling`** 也是同一個映像)。每個版本都會以版本號和 `latest` 發行 +amd64 與 arm64(樹莓派、ARM NAS)映像。應用程式監聽 **3000** 連接埠。 + +最快的方式是一行指令: + +```bash +docker run -d --name layerling -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails --restart unless-stopped ghcr.io/henmedia/layerling:latest +``` + +`-v` 選項會把起始頁的預覽圖片儲存在名為 `layerling-thumbnails` 的 Docker 磁碟區裡,讓它們在更新後仍然存在;不加這個選項, +圖片就在容器內部,每次重新建立容器都會遺失(設計本身儲存在瀏覽器裡,不受影響)。在有容器管理員的 NAS 上 +(Synology Container Manager、Unraid、Portainer),在其映像登錄(Docker Hub)中搜尋 `henmedia/layerling`, +或輸入 `henmedia/layerling:latest`,把 3000 連接埠對應進去,並為 `/app/.codex/project-thumbnails` 新增一個磁碟區。要更新, +重新提取映像並重新建立容器(或讓 Watchtower 代勞)。 + +映像標籤是純版本號,**不帶「v」**:`ghcr.io/henmedia/layerling:1.42.0`,而 GitHub 發行版本叫 `v1.42.0`。 +提取只會取得新映像;已經存在的容器仍會執行舊映像,直到它被刪除並重新建立: + +```bash +docker pull ghcr.io/henmedia/layerling:latest +docker stop layerling +docker rm layerling +docker run -d --name layerling -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails --restart unless-stopped ghcr.io/henmedia/layerling:latest +``` + +`docker inspect layerling | grep image.version` 會顯示容器實際執行的版本。如果你為伺服器儲存區掛載了資料夾,請再加上同樣的 `-v` 選項。 + +想自己建置映像,可以使用儲存庫裡的 [`Dockerfile`](docker/Dockerfile) 和 [`compose.yml`](docker/compose.yml): + +1. **安裝 Docker。** 在 Windows 或 macOS 上,安裝並啟動 [Docker Desktop](https://www.docker.com/products/docker-desktop/)。在 Linux 或 NAS 上,你需要帶 Compose 的 Docker(`docker compose` 或獨立的 `docker-compose`)。 +2. **取得檔案。** 可以下載儲存庫 ZIP([Code → Download ZIP](https://github.com/henmedia/layerling/archive/refs/heads/main.zip))並解壓縮,或複製它: + ```bash + git clone https://github.com/henmedia/layerling.git + cd layerling + ``` +3. **啟動它。** 在專案資料夾中開啟終端機(例如 Windows 上的 PowerShell)並執行: + ```bash + docker compose -f docker/compose.yml up -d --build + ``` + 使用較舊的獨立版程式時,把 `docker compose` 寫成 `docker-compose`。Docker 會建置映像並在背景執行容器(`-d`);首次建置大約需要 2–3 分鐘。不加 `--build` 時,同一條指令會改為提取現成的映像。 +4. **開啟它。** 在同一台電腦上前往 **`http://localhost:3000/`**;從網路中的其他裝置前往 **`http://:3000/`**。 + +日常指令: + +- **停止:** `docker compose -f docker/compose.yml down` +- **重新啟動:** `docker compose -f docker/compose.yml up -d` +- **更新**(取得新程式碼或解壓縮新 ZIP 之後):`docker compose -f docker/compose.yml up -d --build`;使用現成映像時,先 `docker compose -f docker/compose.yml pull`,再 `up -d` + +**安裝為應用程式與離線使用都需要 https,而且需要靜態匯出。** 瀏覽器只會在 `https://` 或 `localhost` 上安裝應用程式並保留供離線使用; +在普通的 `http://192.168.x.x:3000` 位址上兩者都不提供(layerling 會在那裡隱藏安裝提示)。即使有 https,離線檔案 +(`sw.js`)也只寫入靜態匯出(見[靜態託管](#靜態託管web-伺服器上的純檔案)),不會寫入這個在伺服器上執行的映像。 +要在網路上安裝並離線使用,請透過 https 提供靜態匯出;要在容器前面加上一個 https 位址,可使用 Caddy 或帶憑證 +(例如來自 mkcert)的 nginx 之類反向代理。 + +該映像在正式模式下執行 `next start`,所以除非你開啟它,MCP 橋接在那裡是關閉的(見[讓 AI 用戶端存取 NAS 或伺服器上的副本](#讓-ai-用戶端存取-nas-或伺服器上的副本))。要提供共用專案資料夾,請綁定一個可寫入的目錄, +並在 `compose.yml` 中把 `LAYERLING_SHARED_PROJECTS_DIR` 設為它在容器內的掛載路徑,例如 `./shared-projects:/shared-projects` +搭配 `LAYERLING_SHARED_PROJECTS_DIR: "/shared-projects"`(見[網路上的共用設計](#網路上的共用設計))。容器以 UID 999 的身分執行,所以必須允許該使用者寫入這個資料夾:`sudo chown 999:999 ./shared-projects`,或給服務加上 +`user: "1000:1000"`(換成你自己的使用者和群組編號,`id -u` 和 `id -g` 可查看),讓容器以你的身分執行。不加的話, +資料夾會顯示在起始頁上,但什麼都存不進去。修改後執行 `docker compose up -d`:`docker compose restart` 會保留舊設定。 +`docker exec printenv LAYERLING_SHARED_PROJECTS_DIR` 會顯示正在使用的值。 + +要選擇人們首次存取時看到的配色主題,把 `LAYERLING_DEFAULT_THEME` 設為 `system`、`light`、`dark` 或 `graphite` +(同樣在 `compose.yml` 中或 `npm run start` 的環境變數裡設定)。之前開過 layerling 的人會保留瀏覽器已有的主題, +任何人仍可用主題開關更改。不設定時主題跟隨系統。以純檔案方式提供的副本沒有可讀取該設定的伺服器,所以在那裡不生效。 + +給有兒童的班級或工作坊用的話,`LAYERLING_SIMPLE_MODE` 會讓 layerling 以簡易模式啟動:功能區只保留工作坊會用到的工具, +形狀庫只顯示簡短清單,按鈕更大,起始頁只顯示設計,沒有新聞、沒有歡迎文字,也沒有離開 layerling 的連結。`true` +是尚未選擇的人採用的初始值(設定裡有開關,在該模式下退出需要按住兩秒),`always` 對所有人固定生效並移除開關。以 +`?mode=simple` 結尾的連結會為開啟它的裝置開啟該模式,`?mode=full` 則關閉。它的設定方式與其他變數相同, +以純檔案方式提供的副本沒有可讀取它的伺服器(連結和設定在那裡仍然有效)。 + +開啟共用資料夾後,`LAYERLING_NEW_DESIGNS_ON_SERVER` 會讓新增設計預設放在伺服器上:`true` 是尚未選擇的人採用的初始值 +(他們可以在起始頁取消勾選 **在伺服器上新增設計**),`always` 對所有人固定生效並鎖定該核取方塊。設定方式相同, +以純檔案方式提供的副本沒有可讀取它的伺服器。 + +在搭配網域的反向代理後面,代理必須傳遞原始的 `Host` 和 `X-Forwarded-Proto`(nginx:`proxy_set_header Host $host;` +和 `proxy_set_header X-Forwarded-Proto $scheme;`),否則儲存到伺服器會被拒絕,並提示 +「Shared projects only accept requests from this site.」。如果代理改寫了主機名稱而你又無法更改,請把人們使用的位址列入 +`LAYERLING_ALLOWED_ORIGINS`(逗號分隔,例如 `https://layerling.example.com`)。 + +### 靜態託管:Web 伺服器上的純檔案 + +任何 Web 伺服器都能以純檔案方式提供 layerling;伺服器上不執行 Node.js。在一台裝有 Node.js 的電腦上建置一次檔案 +(見[你需要什麼](#你需要什麼)): + +```bash +npm install +npm run export +``` + +完成的網站位於 **`apps/web/.next-export/`**。把該資料夾的**內容**(不是資料夾本身)複製到 Web 伺服器的網站根目錄, +讓 `index.html` 直接位於其中。 + +有四件事要知道: + +- **layerling 需要自己的位址。** 檔案之間以根路徑開頭的位址互相引用(`/_next/...`),所以 layerling 必須從某個位址的根路徑提供,例如 `https://layerling.example.com/` 或 `http://192.168.0.5:8080/`。它不能放在子資料夾裡(`https://example.com/layerling/`),也不能從磁碟開啟(`file://`)。如果你只看到一大段沒有任何樣式的純文字,表示指令碼和樣式檔沒有載入:開啟瀏覽器的開發者工具(F12),在「網路」分頁查看紅色的 `/_next/...` 項目,並比較它們的位址與你放置檔案的位置。 +- **以底線開頭的資料夾也必須能存取。** 有些伺服器會隱藏它們(例如 GitHub Pages 在沒有 `.nojekyll` 檔案時會這樣),而 `_next` 裡裝著整個程式。 +- **在自己的電腦上快速測試:** `npx serve apps/web/.next-export`,然後開啟它印出的位址。 +- **安裝為應用程式與離線使用都需要 https。** 匯出中包含離線檔案(`sw.js`),但瀏覽器只會在 `https://` 位址或 `localhost` 上使用它們,不會在你網路中的普通 `http://` 位址上使用。 + +### 網路上的共用設計 + +layerling 本身只是檔案,所以共用資料夾需要伺服器上有能寫入的程式。有兩種方式,只需要其中一種:**Node 或 Docker** +(本節,搭配 `LAYERLING_SHARED_PROJECTS_DIR`),或者**帶 PHP 的普通 Web 伺服器**(`store` 資料夾,見下文)。 +如果一個 Web 伺服器這兩種方式都沒有,只提供這些檔案——`npx serve`、nginx 或沒有 PHP 的 Apache——layerling 能正常顯示, +但沒有伺服器資料夾。 + +如果你在一台別人會用瀏覽器存取的機器上用 `npm run dev` 或 `npm run start` 執行 layerling,它可以為 `.lyl` 設計提供一個 +共用資料夾。`npm run start` 提供的是 `npm run build` 產生的內容,所以先執行一次建置。把 `LAYERLING_SHARED_PROJECTS_DIR` +指向啟動 layerling 的使用者可寫入的目錄(`/srv` 下的資料夾通常屬於 root,可以自己建一個或更改擁有者)並啟動: + +```bash +LAYERLING_SHARED_PROJECTS_DIR=/srv/layerling-projects npm run start +``` + +起始頁隨後會在瀏覽器設計旁顯示一個名為 **在伺服器上** 的資料夾。開啟它就進入了該資料夾:**新增設計** 會直接在那裡新增一個, +**新增資料夾** 會建立子資料夾,標題下方的一串路徑會顯示你目前的位置。一個 `..` 圖磚可以退回上一層,按鈕左側的 +**返回此瀏覽器中的設計** 會回到此瀏覽器的設計。把設計拖曳到資料夾、該圖磚或路徑中的某一層,或使用其選單裡的 +**移到……**,就能移動設計。從瀏覽器把設計放到伺服器也是同樣方式:把它的卡片拖曳到伺服器資料夾上。 + +起始頁上的兩個按鈕省去了逐一移動設計的麻煩:**全部放到伺服器** 會一次把此瀏覽器的所有設計移入伺服器資料夾, +而 **在伺服器上新增設計** 核取方塊會讓每個新設計都從伺服器資料夾開始,因此從第一次修改起就儲存在那裡。 +名稱在伺服器上已被佔用的設計會留在瀏覽器裡。 + +頂端的搜尋框會搜尋整個伺服器資料夾,而不只是你目前所在的資料夾。每個結果都會說明它在哪個資料夾裡, +而那個資料夾本身就是一個按鈕:點擊就能過去,搜尋會被清空。資料夾也能按名稱找到。搜尋期間, +起始頁上的伺服器圖磚會顯示那邊有多少個相符項目。 + +設計選單裡的 **複製** 會建立它的副本。在伺服器上,檔案本身會被複製到原檔案旁邊,使用一個未佔用的名稱,連圖片一起複製—— +不會重新打包,所以副本與原件的幾何完全一致。在瀏覽器裡,副本會成為獨立的設計,擁有相同的形狀、相同的歷史記錄和 +自己的預覽圖片,並且在伺服器上不屬於任何人。 + +伺服器上的設計會自動存回伺服器,時間點是最後一次修改後五秒,以及你離開編輯器時。縮圖會放在檔案旁邊的 +`.thumbnails` 中。只存在於瀏覽器裡的設計會留在那裡,不受影響。 + +儲存到伺服器的自訂形狀會放進儲存區頂端的 `Custom shapes` 資料夾,每個形狀一個 `.lyl` 及對應圖片。layerling 會在第一個 +這樣的形狀出現時建立它;它是個普通資料夾,所以會顯示在起始頁上,裡面的形狀也能像任何設計一樣開啟和儲存。 +無論走 Node 方式還是 `store.php`,都不需要額外設定。 + +從伺服器開啟設計會得到一份私有的本機工作副本。存回時會先檢查伺服器上的修訂版本;如果期間有人改過該檔案, +layerling 會拒絕覆寫,並讓你重新載入或另存新檔。這是共用檔案儲存,不是同時協作編輯。 + +#### 不用 Node:`store` 資料夾 + +以靜態匯出方式提供(Web 伺服器上的純檔案)的安裝無法自行寫入任何東西。針對這種情況,匯出中附帶了 `store.php`。 +在 `index.html` 旁建立一個名為 `store` 且 Web 伺服器可寫入的資料夾,layerling 就會提供與上面相同的共用儲存, +包括資料夾等全部功能。沒有這個資料夾時該功能不會出現,編輯器裡的簡短指南會說明如何開啟。Web 伺服器需要 PHP。 + +該資料夾**沒有登入保護**:任何能存取該頁面的人都能讀取、寫入和刪除其中的內容。在家庭網路或工作坊裡這正是想要的; +在可公開存取的網站上,請保護它或乾脆不要使用。 + +部署時有一件事要記住:如果用會刪除多餘內容的選項來鏡像匯出檔案——`rsync --delete`、`robocopy /MIR`、WinSCP `-delete`—— +請明確排除 `store`,否則每次更新都會清空專案。 + +## 開發 layerling + +想修改程式碼,就走這條路。 + +### 你需要什麼 + +- Node.js 22.18 或更新版本(指南和字型指令碼會直接載入 TypeScript 檔案,舊版本做不到);24 也可以,Docker 映像用的就是它 +- npm,隨 Node.js 一起提供 + +用 `node -v` 和 `npm -v` 檢查版本。如果這些指令沒有作用,請從 Node.js 官網安裝 Node.js,然後重新開啟終端機。 + +### 安裝與執行 + +```bash +git clone https://github.com/henmedia/layerling.git +cd layerling +npm install +npm run dev +``` + +沒有 Git?在 GitHub 頁面上點綠色的 **Code** 按鈕,選擇 **Download ZIP**,解壓縮後在解開的資料夾裡開啟終端機, +從 `npm install` 開始。 + +然後開啟 `http://127.0.0.1:3000/`。使用應用程式時讓終端機保持開啟;`Ctrl+C` 會停止開發伺服器。 + +想從另一台電腦透過名稱存取開發伺服器,例如 `http://myhost.local:3000/`,請在啟動前把該名稱列入環境變數 +`LAYERLING_ALLOWED_DEV_ORIGINS`(多個名稱用逗號分隔,`*.local` 表示所有以 `.local` 結尾的名稱)。不設定時, +開發伺服器只回應 `localhost` 和 `127.0.0.1`。靜態匯出和 `npm run start` 不需要它。 + +在 Linux 和 macOS 上,`scripts/start-layerling.sh` 會替你完成每天的啟動:先更新程式碼工作目錄(如果你改過裡面的檔案就跳過), +啟動伺服器,等它回應後開啟瀏覽器。可以從任何位置執行,例如 `~/layerling/scripts/start-layerling.sh`。它需要 Git 和 +Node.js,如上所述。如果 layerling 已經在該連接埠執行,它只會開啟瀏覽器,不會再啟動一個伺服器。3000 連接埠被別的程式佔用了? +用 `PORT=3100 scripts/start-layerling.sh` 啟動。它已在 Debian Linux(沒有桌面,所以瀏覽器這一步只印出位址)和 +Windows shell 中測試過;macOS 尚未測試——如果在你的系統上表現異常,請在討論區告訴我們。 + +### 在容器中開發 + +不想安裝 Node.js?那就改用容器開發。你需要帶 Compose 的容器引擎——`docker compose` 或 `podman compose` +(SELinux 上的 Rootless Podman 也可以;compose 檔案裡的 `:z` 標誌會處理檔案標籤): + +```bash +docker compose -f docker/compose.dev.yml up +``` + +開啟 `http://127.0.0.1:3000/`。首次啟動會安裝相依套件;之後的啟動會直接進入支援熱重載的開發伺服器。按 `Ctrl+C` 停止。 +如果更新了相依套件後發現有些東西還是舊的,刪除專案資料夾裡的 `node_modules/` 再重新啟動。 + +同時還在執行 `docker/compose.yml` 裡的正式環境容器?它也使用 3000 連接埠——把其中一個的主機連接埠改掉 +(例如 `"3100:3000"`)。 + +### 常用指令 + +| 指令 | 用途 | +| --- | --- | +| `npm run typecheck` | TypeScript 檢查 | +| `npm run test` | 單元測試 | +| `npm run test:e2e` | 端對端測試 | +| `npm run build` | 正式版建置(由 `npm run start` 提供) | +| `npm run export` | 用於純 Web 代管的靜態匯出 | +| `npm run guide` | 從 `docs/guide` 建置使用者指南頁面(匯出和 `npm run dev` 也會這樣做) | +| `npm run guide:images` | 從執行中的程式重新拍攝指南圖片(需要 `npm run dev -- -p 3010`;見 `docs/guide/README.md`) | +| `npm run printers:update` | 從 OrcaSlicer 的設定重新整理印表機預設 | +| `npm run mcp:layerling` | 為 AI 用戶端啟動 MCP 伺服器(見下文) | + +## layerling MCP Skill + +layerling 內建一個本機 MCP 伺服器,供支援 MCP 工具的 AI 用戶端使用。它讓 AI 代理能夠檢查和操作一個執行中的 +編輯器分頁:列出開啟的編輯器、讀取場景、建立、更新和選取物件、群組、切割和分離零件、列出 CAD 邊 ID、 +套用倒角或圓角、抽殼實體、檢查錯誤並擷取視埠畫面。 + +它針對本機開發伺服器運作。在正式版建置和靜態託管中,MCP 路由是停用的,除非伺服器用存取權杖開啟它 +([見下文](#讓-ai-用戶端存取-nas-或伺服器上的副本));在 layerling.com 上它一律關閉。 + +1. 在專案資料夾中用 `npm run dev` 啟動 layerling(見[安裝與執行](#安裝與執行))。 +2. 開啟一個編輯器分頁,例如 `http://127.0.0.1:3000/?editor=1`——也可以不開:當沒有編輯器開啟時,第一個需要它的工具會幫你開啟瀏覽器並進入編輯器(NAS 或伺服器上的副本不適用;`LAYERLING_MCP_OPEN_EDITOR=0` 可關閉此行為)。 +3. 按下面的說明連線你的 AI 用戶端。它會自行用 + `node scripts/layerling-mcp-server.mjs` 啟動 MCP 伺服器。 + +主要工具名稱包括 `layerling_list_editors`、`layerling_read_scene`、`layerling_list_objects`、 +`layerling_create_shape`、`layerling_update_object`、`layerling_list_edges`、`layerling_apply_edge_treatment`、 +`layerling_hollow_object`、`layerling_array_objects`、`layerling_set_section_view` 和 `layerling_capture_image`。 + +### Claude Code + +無需安裝:儲存庫已經包含 `.mcp.json`,它會為本專案註冊 MCP 伺服器;還包含一份位於 `.claude/skills/layerling-mcp-skill` +的技能副本,這正是 Claude Code 尋找技能的位置。在 Claude Code 中開啟 layerling 資料夾並提問: + +```text +Use the layerling MCP tools to list my open layerling editors and inspect the current scene. +``` + +### Claude Desktop + +Claude Desktop 不會讀取專案的 `.mcp.json` 或技能檔案,但可以透過自己的設定使用同一個 MCP 伺服器。在那裡新增伺服器, +以 [`docs/mcp/claude-desktop-config.example.json`](docs/mcp/claude-desktop-config.example.json) 為範本,並把指令碼路徑替換成 +你電腦上的絕對路徑。重新啟動 Claude Desktop 後,提問: + +```text +Use the layerling MCP tools to list open editors, inspect the scene, and modify the selected object. +``` + +### Codex + +把 `docs/skills/layerling-mcp-skill` 中的技能複製到你的 Codex 技能資料夾。 + +Windows PowerShell: + +```powershell +New-Item -ItemType Directory -Force "$env:USERPROFILE\.codex\skills" | Out-Null +Copy-Item -Recurse -Force "docs\skills\layerling-mcp-skill" "$env:USERPROFILE\.codex\skills\layerling-mcp-skill" +``` + +macOS 或 Linux: + +```bash +mkdir -p ~/.codex/skills +cp -R docs/skills/layerling-mcp-skill ~/.codex/skills/ +``` + +然後在 Codex 設定中新增一個 MCP 伺服器項目,以 [`docs/mcp/codex-config.example.toml`](docs/mcp/codex-config.example.toml) +為範本,並把指令碼路徑替換成你電腦上的絕對路徑。重新啟動 Codex 並提問: + +```text +Use $layerling-mcp-skill to list my open layerling editors and inspect the current scene. +``` + +### Gemini 與 Antigravity + +對於 Antigravity,儲存庫在 `.agents/skills/layerling-mcp-skill` 附帶了一份技能副本,Antigravity 會自動發現它。 +對於 Gemini CLI,把 `docs/skills/layerling-mcp-skill` 中的技能複製到你的全域技能資料夾。 + +Windows PowerShell: + +```powershell +New-Item -ItemType Directory -Force "$env:USERPROFILE\.gemini\skills" | Out-Null +Copy-Item -Recurse -Force "docs\skills\layerling-mcp-skill" "$env:USERPROFILE\.gemini\skills\layerling-mcp-skill" +``` + +macOS 或 Linux: + +```bash +mkdir -p ~/.gemini/skills +cp -R docs/skills/layerling-mcp-skill ~/.gemini/skills/ +``` + +然後把這台伺服器新增到 Gemini CLI 的 `settings.json` 或 Antigravity 的 `mcp_config.json`,以 +[`docs/mcp/gemini-config.example.json`](docs/mcp/gemini-config.example.json) 為範本,並把指令碼路徑替換成你電腦上的絕對路徑。 +重新啟動用戶端並提問: + +```text +Use the layerling MCP tools to list my open layerling editors and inspect the current scene. +``` + +### 讓 AI 用戶端存取 NAS 或伺服器上的副本 + +你自己代管的副本(NAS 上的 Docker 映像、家用伺服器)可以讓 AI 用戶端透過網路操作其開啟的編輯器。它**預設關閉**, +因為任何能操作這個橋接的人都能讀取和修改開啟的設計。用伺服器上的兩個設定開啟它,這些設定會在啟動時讀取——現成映像無需重新建置: + +```yaml +environment: + LAYERLING_MCP_REMOTE: "true" + LAYERLING_MCP_TOKEN: "a-long-random-secret-of-at-least-16-characters" +``` + +沒有至少 16 個字元的權杖,橋接就會保持關閉。然後: + +1. 在瀏覽器中開啟該副本的一個編輯器分頁,例如 `http://nas:3000/?editor=1`,並保持開啟。 +2. 把位址和同一個權杖交給 MCP 用戶端:在它的設定中設定 `LAYERLING_URL=http://nas:3000` 和 + `LAYERLING_MCP_TOKEN=`(參見 `docs/mcp` 中的範例)。 + +權杖保護這些指令:只有傳送它的用戶端才能列出或操作編輯器。編輯器頁面不需要權杖,但只有當它們是該副本的頁面, +並且是透過只有你自己網路中的人才能使用的位址或名稱(IP 位址、不帶點的名稱,或以 `.local` 或 `.lan` 結尾的名稱)開啟時, +才會計入。這樣可以防止網際網路上的網頁透過你的瀏覽器存取你的 NAS。如果你透過真實網域開啟副本,例如在反向代理後面, +請把它列入 `LAYERLING_MCP_ALLOWED_HOSTS`(逗號分隔)。在你信任的網路上使用它,超出該範圍的任何情況都使用 HTTPS: +權杖是在請求標頭中傳輸的。 + +## 參與貢獻 + +歡迎貢獻,你不需要是 3D 列印專業人士也能幫忙——把這份 README 裡的一句話寫得更清楚也算。適合入手的地方: + +- 編輯器錯誤修正 +- 幾何與布林測試案例 +- 匯入和匯出的邊界情況(STL、OBJ、3MF、STEP、SVG) +- 介面細節調整 +- 說明文件截圖和影片 +- 無障礙與效能改進 + +提交提取要求前請閱讀 [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md)。每個版本的變更見 +[版本說明](docs/CHANGELOG.md)。 + +## 安全性 + +安全敏感的問題請不要公開提交。回報流程見 [.github/SECURITY.md](.github/SECURITY.md)。 + +## 來源 + +layerling 是 Formsmith746 和 SketchForge 貢獻者所開發的 [SketchForge-3D](https://github.com/Formsmith746/SketchForge-3D) +的分支。該分支於 2026 年 9 月 16 日從 SketchForge 1.0.9 開始。SketchForge 仍是一個出色的專案, +也是本專案存在的原因。 + +## 商標 + +Tinkercad 是 Autodesk, Inc. 的商標。layerling 是一個獨立專案,與 Autodesk 沒有關聯,也未獲其認可或贊助。 + +## 授權條款 + +著作權所有 (C) 2026 layerling 貢獻者。 +著作權所有 (C) 2026 SketchForge 貢獻者。 + +layerling 是 SketchForge-3D 的修改版本,依 **GNU Affero 通用公共授權條款第 3.0 版(僅此版本)** +(`AGPL-3.0-only`)授權——與原專案相同。見 [LICENSE](LICENSE)。 + +如果你修改了 layerling 並讓其他人透過網路使用修改後的版本,授權條款第 13 條要求你向他們提供對應的原始碼。 +起始頁正是為此提供了一個 **原始碼** 連結:在建置時把 `NEXT_PUBLIC_SOURCE_CODE_URL` 設為你的建置所依據之原始碼的公開 URL。 diff --git a/apps/web/src/lib/i18n.ts b/apps/web/src/lib/i18n.ts index af3db0cc..632a4f32 100644 --- a/apps/web/src/lib/i18n.ts +++ b/apps/web/src/lib/i18n.ts @@ -3,6 +3,7 @@ import { MESSAGES_EN, type MessageKey } from "@/lib/messages.en"; import { DEFAULT_LANGUAGE, LANGUAGE_INFO, + LANGUAGE_TAG_ALIASES, LANGUAGES, isLanguage, languageFromTag, @@ -95,6 +96,8 @@ const LOADERS: Partial> = { it: () => import("@/lib/messages.it").then((module) => module.MESSAGES_IT), ar: () => import("@/lib/messages.ar").then((module) => module.MESSAGES_AR), ja: () => import("@/lib/messages.ja").then((module) => module.MESSAGES_JA), + "zh-cn": () => import("@/lib/messages.zh-cn").then((module) => module.MESSAGES_ZH_CN), + "zh-tw": () => import("@/lib/messages.zh-tw").then((module) => module.MESSAGES_ZH_TW), }; const catalogues = createCatalogueStore({ en: MESSAGES_EN, de: MESSAGES_DE }, LOADERS); @@ -189,7 +192,7 @@ export function detectLanguage(): Language { */ export const LANGUAGE_BOOT_SCRIPT = `try{var m=${JSON.stringify( Object.fromEntries(LANGUAGES.map((language) => [language, LANGUAGE_INFO[language].htmlLang])), -)},l=null;try{var s=localStorage.getItem(${JSON.stringify(LANGUAGE_STORAGE_KEY)});if(m[s])l=s}catch(e){}if(!l){var t=navigator.languages||[navigator.language];for(var i=0;i> = { + "zh-hans": "zh-cn", + "zh-hant": "zh-tw", + "zh-hk": "zh-tw", + "zh-mo": "zh-tw", +}; + /** The words of a guide page that are not chapter text, in the language of the page. */ export type GuideStrings = { site: string; @@ -742,6 +753,87 @@ export const LANGUAGE_INFO: Readonly> = { printButton: "印刷", }, }, + // Simplified Chinese: the whole interface, the 17 chapters of the guide and a README of its own. + // The code carries the region, as Brazilian Portuguese does, so a browser that asks for zh-CN or + // zh-Hans-CN is served it; other Chinese variants stay on English until a translation exists. + "zh-cn": { + name: "简体中文", + htmlLang: "zh-CN", + numberLocale: "zh-CN", + quotes: ["“", "”"], + guideDir: "zh-cn", + communityUrl: GITHUB_DISCUSSIONS, + readme: "README.zh-cn.md", + quickstartAnchor: "windows-快速上手", + legal: { imprint: "版本说明", privacy: "隐私政策" }, + // Chinese keyboards label the keys in English; only the mouse actions get Chinese names. + keyNames: { Ctrl: "Ctrl", Shift: "Shift", Delete: "Delete", Backspace: "Backspace", Home: "Home", End: "End", "Page Up": "Page Up", "Page Down": "Page Down", Enter: "Enter", Click: "单击", RightClick: "右键单击", Drag: "拖动" }, + asciiUmlauts: false, + complete: true, + guide: { + site: "layerling 用户指南", + home: "用户指南", + openEditor: "打开编辑器", + backToEditor: "返回编辑器", + editorElsewhere: "编辑器已在另一个标签页中打开,请切换到那里。", + chapters: "章节", + onThisPage: "本页内容", + previous: "上一章", + next: "下一章", + overviewLead: "layerling 的全部功能,逐步讲解。图片取自运行中的程序,并随每个版本更新。", + sourceNote: "本指南随程序一同完善。如有缺漏或错误,请到", + forum: "讨论区反馈", + notTranslated: "本章尚未翻译为简体中文,以下为英文原文。", + languageMenu: "语言", + search: "搜索指南", + searchNothing: "未找到结果。", + printAll: "打印完整指南", + printAllTitle: "完整用户指南", + printAllLead: "所有章节依次排列,可打印或保存为 PDF:按 Ctrl+P,并在打印设置中关闭“页眉和页脚”。只打印部分章节时,请在其中选择页码。", + printContents: "目录", + printButton: "打印", + }, + }, + // Traditional Chinese as written in Taiwan: the whole interface, the 17 chapters of the guide + // and a README of its own. zh-TW, zh-Hant and the Hong Kong and Macau tags are matched to it. + "zh-tw": { + name: "繁體中文", + htmlLang: "zh-TW", + numberLocale: "zh-TW", + quotes: ["「", "」"], + guideDir: "zh-tw", + communityUrl: GITHUB_DISCUSSIONS, + readme: "README.zh-tw.md", + quickstartAnchor: "windows-快速上手", + legal: { imprint: "版本說明", privacy: "隱私權政策" }, + // Chinese keyboards label the keys in English; only the mouse actions get Chinese names. + keyNames: { Ctrl: "Ctrl", Shift: "Shift", Delete: "Delete", Backspace: "Backspace", Home: "Home", End: "End", "Page Up": "Page Up", "Page Down": "Page Down", Enter: "Enter", Click: "點擊", RightClick: "右鍵點擊", Drag: "拖曳" }, + asciiUmlauts: false, + complete: true, + guide: { + site: "layerling 使用者指南", + home: "使用者指南", + openEditor: "開啟編輯器", + backToEditor: "返回編輯器", + editorElsewhere: "編輯器已在另一個分頁中開啟,請切換到那裡。", + chapters: "章節", + onThisPage: "本頁內容", + previous: "上一章", + next: "下一章", + overviewLead: "layerling 的全部功能,逐步說明。圖片取自執行中的程式,並隨每個版本更新。", + sourceNote: "本指南隨程式一同完善。如有缺漏或錯誤,請到", + forum: "討論區告訴我們", + notTranslated: "本章尚未翻譯為繁體中文,以下為英文原文。", + languageMenu: "語言", + search: "搜尋指南", + searchNothing: "找不到結果。", + printAll: "列印完整指南", + printAllTitle: "完整使用者指南", + printAllLead: "所有章節依次排列,可列印或儲存為 PDF:按 Ctrl+P,並在列印設定中關閉「頁首及頁尾」。只列印部分章節時,請在其中選擇頁碼。", + printContents: "目錄", + printButton: "列印", + }, + }, }; export function isLanguage(value: unknown): value is Language { @@ -757,6 +849,8 @@ export function languageFromTag(tag: string | undefined | null): Language | null const subtags = tag?.trim().toLowerCase().split("-") ?? []; const withRegion = subtags.slice(0, 2).join("-"); if (isLanguage(withRegion)) return withRegion; + const alias = LANGUAGE_TAG_ALIASES[withRegion]; + if (alias) return alias; const primary = subtags[0]; return isLanguage(primary) ? primary : null; } diff --git a/apps/web/src/lib/messages.zh-cn.ts b/apps/web/src/lib/messages.zh-cn.ts new file mode 100644 index 00000000..a164c8d2 --- /dev/null +++ b/apps/web/src/lib/messages.zh-cn.ts @@ -0,0 +1,2874 @@ +import type { MessageKey } from "@/lib/messages.en"; + +/** + * 简体中文界面文案,对照英文目录逐条翻译。 + * + * 键与英文目录完全一致,因此新增或删除句子时,类型检查会指出这里需要同步; + * 占位符(`{name}` 等)与英文保持相同拼写,由程序在运行时填入。 + * + * 面向 3D 打印爱好者,用词以简洁、直接的界面用语为主;产品名、文件格式、 + * 键盘按键与代码保持英文。术语见 docs/TRANSLATING.md。 + */ +export const MESSAGES_ZH_CN: Record = { + "common.cancel": "取消", + "common.save": "保存", + "common.delete": "删除", + "common.rename": "重命名", + "common.duplicate": "复制", + "dashboard.sendToServer": "放到服务器上", + "common.language": "语言", + "common.theme": "主题", + "theme.short.system": "系统", + "theme.short.light": "浅色", + "theme.short.dark": "深色", + "theme.short.graphite": "石墨黑", + "aria.originDimensions": "到原点的距离", + "aria.moveDimensions": "移动尺寸", + "aria.axisMovement": "{axis} 方向移动", + "aria.tapeMeasurements": "卷尺测量", + "aria.rulerDimensions": "标尺尺寸", + "aria.cornerRulerTool": "直角尺", + "aria.deleteCornerRuler": "移除直角尺", + "aria.toggleCornerRulerMode": "切换参考点(端点 / 中点)", + "aria.rulerCoordinateX": "到标尺的 X 距离", + "aria.rulerCoordinateZ": "到标尺的 Y 距离", + "aria.rulerCoordinateElevation": "到标尺的高度", + "ruler.mode.endpoint": "端点(点击切换为中点)", + "ruler.mode.midpoint": "中点(点击切换为端点)", + "aria.toggleCornerRulerOcclude": "切换实体是否遮挡标尺", + "ruler.occlude.on": "实体遮挡标尺(点击使其始终可见)", + "ruler.occlude.off": "标尺始终可见(点击允许实体遮挡)", + "ruler.coordinate.x": "到标尺的 X 位置", + "ruler.coordinate.z": "到标尺的 Y 位置", + "ruler.coordinate.elevation": "到标尺的高度", + "aria.workplane": "工作平面", + "aria.alignmentHandles": "对齐手柄", + "aria.mirrorHandles": "镜像手柄", + "aria.colorPresets": "{name}:预设颜色", + "aria.useColor": "{name}:使用 {color}", + "aria.colorHex": "{name}:十六进制值", + "aria.resetColor": "{name}:重置", + "aria.colorValue": "{name} {color}", + "aria.setColor": "设置颜色 {color}", + "brand.home": "layerling 首页", + "brand.tagline": "面向 3D 打印的简易 3D CAD", + "editor.loading": "正在加载编辑器", + "dashboard.searchPlaceholder": "搜索设计", + "dashboard.searchLabel": "搜索设计", + "dashboard.createDesign": "新建 3D 设计", + "dashboard.untitledDesign": "未命名设计 {number}", + "dashboard.copyOf": "{name}(副本)", + "dashboard.copyOfNumbered": "{name}(副本 {number})", + "notice.createdFromHistory": "已从该状态创建“{name}”。它正在起始页等待。", + "dashboard.projectOnGitHub": "在 GitHub 上了解项目的更多信息", + "dashboard.releaseNotes": "发行说明 v{version}", + "dashboard.footerHelp": "页脚", + "dashboard.forum": "讨论区", + "dashboard.userGuide": "用户指南", + "dashboard.sponsor": "支持项目", + "footer.trademark": "Tinkercad 是 Autodesk, Inc. 的商标。layerling 是一个独立项目,与 Autodesk 无关联,也未获其认可或赞助。", + "dashboard.updateAvailable": "有可用更新:{version}", + "newVersion.title": "layerling 新版本已就绪", + "newVersion.body": "此页面启动时使用的是版本 {current};服务器现在已是 {latest}。重新加载即可切换——你的设计保存在此浏览器中,当前打开的设计会先保存,然后原样恢复。", + "newVersion.titleMismatch": "此页面的一部分来自其他版本", + "newVersion.bodyMismatch": "此页面稍后加载的某个文件与其余部分不匹配,通常发生在更新后,或使用了旧版本的存储副本时。重新加载即可修复——你的设计保存在此浏览器中,当前打开的设计会先保存,然后原样恢复。", + "newVersion.reload": "保存并重新加载", + "newVersion.later": "稍后", + "dashboard.updateLocalHint": "你在这台电脑上运行 layerling:下次启动时,“启动 layerling”快捷方式会获取更新。点击查看步骤。", + "dashboard.updateBannerText": "layerling 有更新的版本可用:{latest}(已安装:{current})", + "dashboard.updateBannerLink": "发行说明与下载", + "tabs.newerVersion": "另一个标签页已在运行 layerling {version},此标签页仍是 {current}。请重新加载它,否则它会继续用旧版本保存。", + "tabs.alreadyOpen": "layerling 已在另一个标签页中打开。最好在那里继续工作,并关闭此标签页。", + "tabs.closeRefused": "浏览器不允许此标签页自行关闭。请用 Ctrl+W 或标签页上的叉号关闭它。", + "tabs.closeThis": "关闭此标签页", + "tabs.keepHere": "在此继续工作", + "tabs.sameProject": "此设计也在另一个标签页中打开。两者都会自动保存并相互覆盖——请只在一个标签页中继续工作。", + "tabs.reload": "重新加载", + "dashboard.updateDismiss": "关闭更新提示", + "dashboard.importGeometry": "打开设计或导入几何体", + "dashboard.continueWorkplane": "继续工作平面", + "dashboard.sharedProjects": "服务器上", + "dashboard.projects": "设计", + "dashboard.newFolderTitle": "为此浏览器的设计创建一个文件夹", + "dashboard.folderTrailLabel": "到此文件夹的路径", + "dashboard.parentFolderRoot": "返回所有设计", + "dashboard.folderEmpty": "空文件夹", + "dashboard.folderDesignsOne": "文件夹 · 1 个设计", + "dashboard.folderDesignsMany": "文件夹 · {count} 个设计", + "dashboard.folderDragHint": "拖到另一个文件夹上,即可将此文件夹放入其中", + "dashboard.dragHintServer": "拖到某个文件夹或服务器文件夹上,即可将此设计移到那里", + "dashboard.folderEmptyTitle": "此文件夹中还没有内容", + "dashboard.folderEmptyHint": "将设计拖到文件夹上,或在设计菜单中选择“移动到 …”。在此新建的设计会放入此文件夹。", + "dashboard.moveToRoot": "设计(无文件夹)", + "dashboard.moveNoFolders": "还没有文件夹。用“新建文件夹”创建一个。", + "dashboard.deleteFolderBodyRoot": "删除文件夹 {name}?其中的内容会移到你的设计顶层。不会删除任何设计。", + "dashboard.deleteFolderBodyIn": "删除文件夹 {name}?其中的内容会移到文件夹 {parent}。不会删除任何设计。", + "dashboard.projectsVisibleOne": "此浏览器中 1 个", + "dashboard.projectsVisibleMany": "此浏览器中 {count} 个", + "dashboard.serverFolderCountOne": "1 个设计", + "dashboard.serverFolderCountMany": "{count} 个设计", + "dashboard.sortLabel": "排序设计", + "dashboard.backupAll": "全部备份", + "dashboard.newOnServer": "服务器上的新设计", + "dashboard.newOnServerTitle": "新设计从服务器文件夹开始,因此从第一次修改起就保存在那里。此浏览器中的设计保持不变。", + "dashboard.newOnServerLockedTitle": "由服务器设定:每个新设计都从服务器文件夹开始。", + "dashboard.sendAllToServer": "全部放到服务器上", + "dashboard.sendAllToServerTitle": "将此浏览器中的每个设计都放入服务器文件夹。此后每个设计都会自行保存在那里。", + "dashboard.backupAllTitle": "将所有设计和自定义形状保存到一个文件——“打开设计或导入几何体”可将它们全部恢复,在另一台电脑上也可以", + "dashboard.restoreBackup": "恢复备份", + "dashboard.restoreBackupTitle": "选择一个由“全部备份”生成的备份文件:其中的所有设计和自定义形状都会恢复,已在此处的设计会跳过", + "dashboard.backupFallbackName": "设计", + "dashboard.sortRecent": "最近", + "dashboard.sortName": "名称", + "dashboard.viewLabel": "设计视图", + "dashboard.viewGrid": "网格视图", + "dashboard.viewList": "列表视图", + "dashboard.emptyTitle": "还没有设计", + "dashboard.emptyHint": "创建一个 3D 设计,它就会显示在这里。", + "welcome.teaserTitle": "欢迎使用 layerling", + "welcome.teaserHint": "一份简短指南,特别适合从 Tinkercad 转来的用户", + "welcome.lead": "layerling 是直接在浏览器中进行 3D 打印的 CAD——和 Tinkercad 一样易用,同时迈向 Fusion 360。免费、无需账号、无需安装——你构建的东西都保存在这台电脑上。", + "welcome.switchTitle": "熟悉 Tinkercad 吗?", + "welcome.switchBody": "那你马上就能上手:把形状拖到工作平面上,分组挖孔、对齐、镜像、捆绑,按住 Alt 拖动复制——操作方式刻意保持一致。只是不再受那边让你困扰的限制。而且在“设置 → 外观”中,一键就能让工作区看起来也一样。", + "welcome.gapTitle": "layerling 新增的功能", + "welcome.gap1": "对边进行倒角和圆角,圆角半径还可沿边变化,随时撤销或修改,全程基于精确的 CAD 几何体,直至 STEP 文件。", + "welcome.gap2": "抽壳实体(壁厚均匀),并用平面分割,也可以斜切。", + "welcome.gap3": "带有精确尺寸和圆角的草图,可拉伸成实体、绕轴旋转或沿路径扫掠。", + "welcome.gap4": "螺纹:螺钉、螺母、螺柱和螺纹孔,涵盖公制、UNC/UNF 和惠氏螺纹。", + "welcome.gap5": "按行、圆周或螺旋排列的阵列,以及将形状包裹到圆柱上。", + "welcome.gap6": "与 CAD 程序交换 STEP,另支持 STL、3MF、OBJ 和 SVG——还有测量、剖视图,以及可回看早期状态的历史记录。", + "welcome.gap7": "约 220 种打印机的打印机配置,带悬垂警告、标记悬垂和耗材估算。", + "welcome.gap8": "AI 可以通过 MCP 接口按需求参与建模——需使用你自己运行的 layerling 副本。", + "welcome.localTitle": "安装为应用或自行托管", + "welcome.localBody": "安装为应用后,layerling 像普通程序一样启动,拥有自己的图标和窗口,甚至无需联网——在 Chrome 或 Edge 中一键即可。如果你更愿意自行托管,让数据不出家门:在 Windows 上只需在 PowerShell 中输入一行命令,它还会在桌面创建快捷方式。对于 NAS 或家庭服务器,有现成的 amd64 和 arm64 Docker 镜像;在那里设计还可以存放在服务器上,让家中每台设备都看到相同的设计。步骤见指南中关于安装和自行托管的章节。", + "welcome.step1Title": "开始一个设计", + "welcome.step1Body": "“新建 3D 设计”会打开一个空的工作平面。已有文件则通过旁边的磁贴打开。", + "welcome.step2Title": "放置形状", + "welcome.step2Body": "从形状库(功能区左上角的“形状”)中把长方体、圆柱体、文字或任意其他形状拖到工作平面上,然后设置尺寸和位置。尺寸也可以输入百分比:50% 即减半。“透明”可让你看透实体。", + "welcome.step3Title": "用挖空体分组", + "welcome.step3Body": "每个形状要么是实体,要么是挖空体。分组后,挖空体会去除材料——孔、槽和凹腔就是这样做出的。对象列表(Ctrl+Shift+O)会显示每个部件,包括已分组的部件,以及它是实体还是挖空体;其搜索也能找到分组内的部件。“编辑分组”(E,或双击)可修改分组中的单个部件;“完成”会重新构建分组。", + "welcome.step4Title": "处理边缘并导出", + "welcome.step4Body": "倒角和圆角作用于你点击的边。完成后,以 STL 或 3MF 发送到切片软件,或以 STEP 发送到 CAD。", + "welcome.moreTitle": "layerling 还能做什么", + "welcome.moreHollowTitle": "抽壳", + "welcome.moreHollowBody": "以均匀壁厚抽空实体,可任选开口的侧面(顶、底、前、后、左、右,也可组合)或完全封闭——内边缘可圆角或保持尖锐。", + "welcome.moreDeleteFaceTitle": "删除面", + "welcome.moreDeleteFaceBody": "点击圆角、孔或凸台的面并将其删除——周围的面会生长以填补空隙,实体保持精确,便于继续添加圆角和导出 STEP。", + "welcome.moreSplitTitle": "分割", + "welcome.moreSplitBody": "用可移动和倾斜的平面将实体或孔一分为二,实现斜切——适合打印平台放不下的大部件。", + "welcome.moreSketchTitle": "草图", + "welcome.moreSketchBody": "绘制轮廓,通过三点作真实圆弧,将任意直边弯曲(双击实体可重新打开其草图),绘制时输入直线的长度和角度(“50<30”)或以 15° 步距吸附,输入精确长度的直线和精确角度的角,对角进行圆角或倒角,沿轴或直线镜像选区,绘制可供点吸附的构造线,将一个开口端拖到另一端以闭合缺口,然后拉伸它们或绕轴旋转——也可以仅以一定宽度构建线条,作为边框或条纹。", + "welcome.moreLibraryTitle": "形状库", + "welcome.moreLibraryBody": "螺纹(公制、UNC/UNF 和 G 管螺纹)、螺栓和螺母、齿轮、内齿圈和齿条(渐开线齿或圆弧齿,可相互啮合)、弹簧、弯管、从一个轮廓到另一个轮廓的放样(也可扭曲或倾斜)、一端较小的胶囊、文字(可设置字母间距,包括沿圆弧弯曲,使用你自己的字体,也支持阿拉伯文和希伯来文的从右到左,可作为轮廓、剪影或分层名牌用于多色打印,带钥匙圈孔——可在侧面或你放置的任意位置——还可选圆角字母边缘;SVG 图标也可作为分层图标牌)、由文字或网址生成的二维码(单独、凸起于底板或雕刻)、免组装铰链、Gridfinity 收纳盒(可选隔间)和底板、滚花握柄(直纹、交叉纹或圆形)、燕尾榫、用于水平孔道的泪滴孔、用于螺钉头的沉孔、锥形沉孔和双锥形沉孔等等——之后都可调整。需要反复使用的实体可保存为自定义形状——保存在浏览器或你自己的服务器上——一键即可放入任何设计。", + "welcome.morePatternTitle": "阵列", + "welcome.morePatternBody": "将形状按行或绕圆周重复 n 次,用于孔阵列或齿圈——还可以按百分比一次缩放多个部件。", + "welcome.moreBundleTitle": "捆绑", + "welcome.moreBundleBody": "像 Tinkercad 中一样用 Ctrl+B 将部件保持在一起,而不合并它们——颜色保留,每个部件在导出时都是独立实体,适合多色打印。分组也可以通过“多色”开关以各自的颜色显示每个部件,即使它已与孔合并。", + "welcome.moreWorkplaneTitle": "在任意面上设置工作平面", + "welcome.moreWorkplaneBody": "将形状直接放到斜面或侧面上,并可隐藏平面以获得清晰视图,而不会丢弃它。", + "welcome.morePlaceTitle": "点击放置", + "welcome.morePlaceBody": "新形状会跟随指针,并落在你点击的位置——可在设置中关闭。", + "welcome.moreSnapTitle": "吸附到其他形状", + "welcome.moreWindowsTitle": "清晰的视图", + "welcome.moreWindowsBody": "对象列表、设置和工具面板可以拖到工作平面上的任意位置,拖动视图立方体可旋转视图,点击其角和边可以倾斜角度显示模型,还可以隐藏平台以从下方观察。右键单击实体会弹出最常用的命令,视图还可以保存为图片。", + "welcome.moreSnapBody": "移动时,边和中心会锁定到相邻形状上,并由参考线显示位置——拖动时按住 Alt 可暂停吸附。按住 Shift 可将移动限制在一个轴上,从一开始就按住 Alt 则拖动副本,与 Tinkercad 相同。新形状会贴放在指针下方的面上,斜面也一样,按 C 可将选中项以同样方式放到另一个面上,就像 Tinkercad 中的 Cruise。", + "welcome.moreGridTitle": "自定义吸附网格", + "welcome.moreGridBody": "在设置中添加度量,例如芯片和洞洞板的 2.54 mm 引脚间距;吸附菜单会提供整格、半格和四分之一格。", + "welcome.moreLayFlatTitle": "平放在面上", + "welcome.moreLayFlatBody": "点击一个面,部件就会以该面朝下放在平台上——一键获得最佳打印方向。“对齐面”可在两个部件之间做同样的事:先点击一个部件的面,再点击另一个部件的面,它们就会接触或齐平,并可设置间隙。", + "welcome.morePivotTitle": "旋转轴心", + "welcome.morePivotBody": "绕管端的轴线或面的中心旋转,而不是绕实体中心。对于单个实体,轴心会随实体保留。", + "welcome.moreMeasureTitle": "测量", + "welcome.moreMeasureBody": "卷尺、标尺和直角尺、到原点的距离——也可用于多个选中的实体——工作平面上的注释,以及剖视图:切开模型查看内部、在剖面上测量壁厚和间隙,并保存为 SVG 供激光切割或制作模板。", + "welcome.moreSaveTitle": "保存到你的文件夹", + "welcome.moreSaveBody": "在 Chrome 和 Edge 中,你可以自行选择文件夹和名称,Ctrl+S 会将设计再次保存到该文件——打开的文件会就地替换。其他浏览器则会下载文件。", + "welcome.moreBackupTitle": "备份所有设计", + "welcome.moreBackupBody": "一键即可将所有设计打包到一个文件中;打开它就能全部恢复,在此浏览器或其他浏览器中皆可。", + "welcome.morePrintersTitle": "即刻打印", + "welcome.morePrintersBody": "约 220 种打印机及其打印平台;当物体超出平台或过高时 layerling 会发出警告,标记需要支撑的悬垂,并在导出时估算重量和耗材。", + "welcome.moreImportTitle": "导入", + "welcome.moreImportBody": "支持 STL、OBJ 和 3MF 及其颜色,STEP 和 SVG,以及作为参考的图片——还能将其他 layerling 设计中的部件直接导入当前设计。SVG 会作为草图导入:一个区域、外侧或内侧的描边,或不含孔的剪影,例如用于饼干模具;切换为旋转草图后,它会变成花瓶之类的圆形实体。SVG 图案或文字可以包裹到圆柱上、凸起或雕刻。", + "installHint.title": "将 layerling 安装为应用", + "installHint.body": "作为应用,layerling 启动更快、无需联网,拥有自己的图标和窗口,而且不必每次都重新加载。你不会有任何损失:设计保持原样,layerling 仍会在有新版本时通知你。", + "installHint.install": "立即安装", + "installHint.dismiss": "隐藏此提示", + "installHint.later": "暂不", + "tabletHint.title": "使用平板电脑?", + "tabletHint.body": "指南中有一章专门讲手指和触控笔操作:选择多个实体、旋转视图、长按菜单,以及在 iPad 上需要注意的事项。", + "tabletHint.open": "打开该章节", + "tabletHint.dismiss": "隐藏此提示", + "storageNotice.title": "你的设计保存在此浏览器中——请备份", + "storageNotice.body": "layerling 对保存在浏览器中的设计不承担责任。浏览器可能出错,浏览器更新也可能引发问题。因此请不时保存设计:“全部备份”会将所有设计放入一个文件,打开的设计也可以用“导出(LYL)”保存为文件。", + "supportNudge.title": "喜欢 layerling 吗?", + "supportNudge.body": "layerling 免费且没有广告。如果它对你有用,你可以帮助支付服务器和后续开发的费用。", + "supportNudge.more": "支持项目", + "supportNudge.dismiss": "关闭此提示", + "update.previewShow": "预览:本次更新带来了什么?", + "update.previewHide": "隐藏预览", + "update.previewLoading": "正在加载预览 …", + "update.previewNone": "此版本没有预览。发行说明在链接后面。", + "whatsNew.title": "自你上次访问以来的新增内容({from} → {to})", + "whatsNew.titleRecent": "最近新增的内容", + "whatsNew.version": "版本 {version}", + "whatsNew.earlier": "显示更早的版本({count})", + "whatsNew.beforeLastVisit": "上次访问之前", + "whatsNew.earlierHeading": "更早的版本", + "whatsNew.dismiss": "知道了", + "whatsNew.close": "关闭此提示", + "whatsNew.footerLink": "有哪些新变化?", + "whatsNew.excerpt": "这只是节选。一次发布还可能包含更多较小的改动和错误修复。", + "whatsNew.releaseNotes": "所有改动都在 GitHub 的发布说明中。", + "palette.open": "搜索命令(Ctrl+K)", + "palette.title": "命令搜索", + "palette.placeholder": "搜索工具、形状或命令 …", + "palette.close": "关闭命令搜索", + "palette.empty": "未找到内容。换一个词试试,例如“圆角”“镜像”或“圆柱体”。", + "palette.disabled": "当前不可用 – 通常是因为没有选中任何内容。", + "palette.hint": "↑ ↓ 选择 · Enter 运行 · Esc 关闭", + "palette.addShape": "添加形状:{shape}", + "palette.group.mode": "模式", + "palette.group.objects": "对象", + "palette.selectObject": "选择实体:{name}", + "palette.recent": "最近使用", + "palette.all": "所有命令", + "palette.switchGeometry": "切换到 3D 编辑器", + "palette.switchSketch": "切换到草图模式", + "shortcuts.group.help": "帮助", + "shortcuts.commandSearch": "打开命令搜索", + "interactiveHelp.title": "交互式帮助", + "interactiveHelp.subtitle": "点击任意位置即可查看说明", + "interactiveHelp.named": "“{name}”", + "interactiveHelp.close": "关闭帮助窗口", + "interactiveHelp.nothing": "此处没有可说明的内容。指向按钮、输入框、控制柄或窗口即可。", + "interactiveHelp.loading": "正在指南中查找 …", + "interactiveHelp.noIndex": "此处还无法使用指南。请从起始页打开。", + "interactiveHelp.panelOnly": "此部分没有自己的名称。点击其窗口中的问号,可打开指南中对应的部分。", + "interactiveHelp.sectionOnly": "指南中有关于此部分的章节。", + "interactiveHelp.noMatch": "指南中还没有关于“{name}”的内容。试试其中的搜索。", + "interactiveHelp.also": "指南中也有", + "interactiveHelp.search": "搜索指南", + "interactiveHelp.open": "在指南中打开", + "interactiveHelp.started": "交互式帮助已开启:点击按钮、输入框或窗口即可查看说明。按 Esc 退出。", + "interactiveHelp.ended": "交互式帮助已关闭", + "shortcuts.interactiveHelp": "开启或关闭交互式帮助", + "installHint.chromium": "点击地址栏右侧的图标安装,或在浏览器菜单的“安装为应用”中安装。", + "installHint.safariMac": "在 Safari 中:文件菜单 →“添加到程序坞”。", + "installHint.ios": "在 Safari 中:分享图标 →“添加到主屏幕”。", + "installHint.firefox": "Firefox 无法安装应用 – layerling 仍可在此标签页中离线启动。", + "welcome.moreOfflineTitle": "可离线使用", + "welcome.moreOfflineBody": "首次访问之后,layerling 无需联网也能启动 – 像普通程序一样安装,你的设计保存在自己的电脑上。", + "welcome.moreAiTitle": "用 AI 建模", + "welcome.moreAiBody": "AI 助手可以通过 MCP 接口创建和编辑形状,并在自己打开的编辑器中进行操作。这需要你自行运行的副本(npm run dev 或 Docker 镜像);在 layerling.com 上,AI 连接是关闭的。", + "welcome.morePointsTitle": "参考点", + "welcome.moreSearchTitle": "命令搜索", + "welcome.moreSimplifyTitle": "简化网格", + "welcome.moreSimplifyBody": "三角形数量极多的导入网格可以缩减到一小部分,并提供前后对比视图和滑块 – 让切割、分组和拖动保持流畅。", + "welcome.moreHistoryTitle": "历史记录", + "welcome.moreLookTitle": "按喜好调整外观", + "welcome.moreLookBody": "背景与工作平面、X、Y、Z 轴箭头、每个实体的边线、草图颜色,以及对比度、阴影和光照方向,都可以在设置中调整 – 例如避免深色实体彼此混在一起。在较慢的电脑上,快速模式会一次性关闭所有耗性能的选项。", + "welcome.moreHistoryBody": "用滑块回看项目任意较早的状态,不会改动任何内容 – 可以导出该状态、从中新建项目,或把单个对象带回当前设计。", + "welcome.moreDrawingTitle": "车间用图纸", + "welcome.moreDrawingBody": "导出 → 图纸:在 ISO 图纸上以 1:1 呈现主视、俯视和侧视图,标出总尺寸、隐藏边和圆孔表 – 可输出 PDF 或 SVG,用于打印或带到车床、铣床上。", + "welcome.moreSearchBody": "按 Ctrl+K,输入工具、形状或命令的名称即可直接跳转 – 支持英文或德文,每一项旁边都显示快捷键。设计中的实体也可以按名称查找。", + "welcome.morePointsBody": "右键点击实体,用点标出它的中心、角点或边的中点 – 这些点不会被打印,形状会吸附到它们 – 然后就能把孔精确放在另一个部件的中心。", + "welcome.videosTitle": "layerling 相关视频", + "welcome.videosHint": "由他人制作,并非本项目出品。链接会在新标签页中打开 YouTube;点击之前不会从那里加载任何内容。", + "welcome.help": "编辑器中的“帮助”组里有简明指南和所有快捷键列表。页脚的“错误报告”会保存你的设计以及论坛或 GitHub 报告所需的全部内容。", + "welcome.guideLink": "阅读带图完整用户指南", + "welcome.guideUrl": "/guide/index.html", + "guide.helpLink": "在用户指南中了解此内容", + "guide.fullGuide": "打开带图的完整用户指南", + "guide.videos": "他人制作的视频:", + "dashboard.projectOptions": "设计选项", + "dashboard.projectOptionsFor": "{name} 的设计选项", + "dashboard.optionsFor": "{name} 的选项", + "shared.optionsFor": "{name} 的服务器设计选项", + "shared.menuFor": "服务器设计 {name} 的选项", + "dashboard.noSnapshot": "尚无快照", + "dashboard.shapeCount": "{count} 个形状", + "dashboard.today": "今天", + "dashboard.justNow": "刚刚", + "dashboard.minutesAgo": "{count} 分钟前", + "shared.title": "服务器上的设计", + "shared.refresh": "刷新", + "shared.backToLocal": "返回此浏览器中的设计", + "shared.trailLabel": "服务器文件夹内的路径", + "shared.trailRoot": "服务器", + "shared.newFolder": "新建文件夹", + "shared.newDesign": "新建设计", + "shared.newFolderTitle": "新建文件夹", + "shared.newFolderCancel": "放弃新建文件夹", + "shared.newFolderSuggestion": "新建文件夹", + "shared.folderName": "文件夹名称", + "shared.createFolder": "创建", + "shared.renameFolderTitle": "重命名文件夹", + "shared.renameFolderCancel": "取消重命名", + "shared.deleteFolderTitle": "删除文件夹", + "shared.deleteFolderCancel": "取消删除", + "shared.folderOptions": "文件夹选项", + "shared.folderOptionsFor": "文件夹 {name} 的选项", + "shared.folderMenuFor": "文件夹 {name} 的选项", + "shared.moveTo": "移动到 …", + "shared.searchCountOne": "{query} 的 1 个匹配项", + "shared.searchCountMany": "{count} 个匹配项,对应 {query}", + "shared.searchHitsOne": "服务器上有 1 个匹配项", + "shared.searchHitsMany": "服务器上有 {count} 个匹配项", + "shared.searchTruncated": "仅显示前几项。", + "shared.searchClear": "返回文件夹", + "shared.searchEmptyTitle": "未找到内容", + "shared.searchEmptyHint": "服务器上没有任何设计或文件夹的名称包含此内容。", + "shared.searchFolderIn": "{name} 中的文件夹", + "shared.searchFolderRoot": "服务器文件夹顶层的文件夹", + "shared.openFolderOf": "打开文件夹 {name}", + "shared.moveToTitle": "移动 {name}", + "shared.moveToCancel": "取消移动", + "shared.moveNoTargets": "这里没有可移入的文件夹。请先新建一个。", + "shared.folderNameBadStart": "以点开头的名称在服务器上会保持隐藏。", + "shared.folderNameBadChars": "不允许使用斜杠、引号以及 < > : | ? *。", + "shared.folderNameTaken": "这里已有同名文件夹。", + "shared.folderMeta": "文件夹", + "shared.parentFolderRoot": "返回服务器", + "shared.parentFolderIn": "返回 {name}", + "shared.dragHint": "拖到某个文件夹上即可将此设计移到那里", + "shared.options": "服务器设计选项", + "shared.emptyHint": "在导出窗口中将 layerling 设计(.lyl)保存到服务器。", + "shared.emptyTitle": "这里还没有内容", + "shared.loadingTitle": "正在加载服务器设计", + "confirm.deleteProjectTitle": "删除设计?", + "confirm.deleteProjectCancel": "取消删除设计", + "confirm.deleteSharedTitle": "从服务器删除设计?", + "confirm.deleteSharedCancel": "取消删除服务器设计", + "confirm.renameTitle": "重命名设计", + "confirm.renameCancel": "取消重命名设计", + "confirm.projectName": "设计名称", + "confirm.deleteProjectBody": "确实要删除设计 {name} 吗?", + "confirm.deleteSharedBody": "从服务器删除 {name}?使用此服务器的所有人都将看不到它,此浏览器中的工作副本也会一并删除。", + "confirm.deleteFolderBody": "文件夹 {name} 将从服务器删除。", + "confirm.deleteFolderProjectOne": "其中的设计也会一并删除。", + "confirm.deleteFolderProjectMany": "其中的 {count} 个设计也会一并删除。", + "confirm.deleteFolderSubfolders": "子文件夹及其中的所有内容同样如此。", + "confirm.clearTapeTitle": "删除所有测量?", + "confirm.clearTapeCancel": "取消删除测量", + "confirm.clearTapeBody": "此设计中的所有卷尺测量都将被删除。此操作无法撤销。", + "confirm.emptyProjectTitle": "保留空设计?", + "confirm.emptyProjectBody": "{name} 是空的。要保留它吗?", + "confirm.yes": "是", + "confirm.no": "否", + "confirm.cancel": "取消", + "confirm.delete": "删除", + "sketch.revolvePreview": "旋转 3D 预览", + "sketch.revolvePreviewTitle": "3D 预览", + "sketch.revolvePreviewEmpty": "在轴的左侧绘制闭合轮廓", + "sketch.revolveAxis": "旋转轴", + "sketch.shapeMoved": "草图形状已移动", + "sketch.shapeResized": "草图形状已调整大小", + "sketch.shapeRotated": "选中项已旋转", + "sketch.rotateSelection": "旋转选中项(Shift:以 15° 为步进)", + "sketch.imageMoved": "草图图像已移动", + "sketch.imageResized": "草图图像已调整大小", + "sketch.viewControls": "草图视图控制", + "sketch.resetView": "重置草图视图", + "sketch.zoomIn": "放大", + "sketch.showMeasurements": "显示测量", + "sketch.showPartEdges": "显示透视到的部件:它们在草图平面上的所有边", + "sketch.zoomOut": "缩小", + "sketch.removeMeasurement": "移除测量", + "sketch.pointActions": "点操作", + "sketch.makeCorner": "设为角点", + "sketch.corner": "角点", + "sketch.segmentActions": "直线操作", + "sketch.curveLine": "曲线化", + "sketch.curveLineHint": "将此直边弯成曲线;拖动两个控制柄塑造形状", + "sketch.straightenLine": "直线化", + "sketch.straightenLineHint": "将这条曲边重新变直", + "sketch.mirror": "镜像", + "sketch.mirrorHint": "将选中项复制到轴的另一侧", + "sketch.mirrorLeftRight": "左右", + "sketch.mirrorLeftRightHint": "沿穿过平台中央的垂直轴镜像:副本落在另一侧,左或右", + "sketch.mirrorTopBottom": "上下", + "sketch.mirrorTopBottomHint": "沿穿过平台中央的水平轴镜像:副本落在上方或下方", + "sketch.mirrorAcrossLine": "沿直线", + "sketch.mirrorAcrossLineHint": "沿草图中的一条直线镜像:接下来点击该直线", + "sketch.mirrorPickLine": "点击要沿其镜像的直线", + "status.sketchMirrored": "已添加镜像副本", + "status.sketchMirrorNoAxis": "请选择直线作为轴,而不是曲线", + "status.sketchMirrorNothing": "请先选择要镜像的点或直线", + "sketch.makeSmooth": "设为平滑", + "sketch.splitHandles": "拆分控制柄", + "sketch.split": "分割", + "sketch.fillet": "圆角", + "sketch.filletCorner": "圆角化角点", + "sketch.filletCornerDisabled": "选择要圆角的角点", + "sketch.filletRadius": "半径", + "sketch.filletAppliedMany": "已圆角 {count} 个角", + "sketch.chamferAppliedMany": "已倒角 {count} 个角", + "sketch.cornersSkipped": "({count} 个不是两条直线之间的角)", + "sketch.filletCorners": "对选中的 {count} 个角做圆角", + "sketch.chamferCorners": "对选中的 {count} 个角做倒角", + "sketch.filletApplied": "角已圆角", + "sketch.chamfer": "倒角", + "sketch.chamferCorner": "倒角化角点", + "sketch.chamferCornerDisabled": "选择要倒角的角点", + "sketch.chamferDistance": "距离", + "sketch.chamferApplied": "角已倒角", + "sketch.apply": "应用", + "sketch.imageWidthUpdated": "草图图像宽度已更新", + "sketch.imageHeightUpdated": "草图图像高度已更新", + "sketch.imageOpacityUpdated": "草图图像不透明度已更新", + "sketch.imageAspectUpdated": "图像宽高比设置已更新", + "sketch.closeImageSettings": "关闭图像设置", + "sketch.lockImage": "锁定草图图像", + "sketch.keepProportions": "保持比例", + "sketch.keepProportionsHint": "边框的控制柄和输入的尺寸会等比例缩放两个方向", + "sketch.lockOutline": "锁定", + "sketch.unlockOutline": "解锁", + "sketch.lockOutlineHint": "锁定轮廓(L):之后无法移动、缩放或更改", + "sketch.unlockOutlineHint": "解锁轮廓(L)", + "status.sketchOutlineLocked": "轮廓已锁定:请先解锁(L)", + "status.selectSketchOutlineLock": "选择一个轮廓以锁定", + "status.sketchOutlineLockedOn": "轮廓已锁定", + "status.sketchOutlineUnlocked": "轮廓已解锁", + "sketch.unlockImage": "解锁草图图片", + "sketch.lockImageHint": "锁定图片(L)", + "sketch.unlockImageHint": "解锁图片(L)。锁定的图片会让点击穿透;按住 Alt 点击即可再次选中。", + "sketch.imageLocked": "草图图片已锁定", + "sketch.imageUnlocked": "草图图片已解锁", + "sketch.deleteImage": "删除草图图片", + "sketch.deleteImageHint": "删除图片", + "sketch.unlockBeforeDelete": "删除前请先解锁图片", + "sketch.aspectLocked": "已锁定宽高比", + "sketch.aspectUnlocked": "已解锁宽高比", + "sketch.imageSettings": "{name} 图片设置", + "sketch.imageProperties": "属性", + "sketch.imageWidth": "宽度", + "sketch.imageHeight": "高度", + "sketch.imageOpacity": "不透明度", + "sketch.imagePositionX": "位置 X", + "sketch.imagePositionY": "位置 Y", + "sketch.imageAlign": "对齐", + "sketch.imageRotation": "旋转", + "sketch.imageRotated": "参考图已旋转", + "sketch.centreImageX": "至 X = 0", + "sketch.centreImageY": "至 Y = 0", + "sketch.centreImageAxisHint": "旋转时,X = 0 即为旋转轴。", + "sketch.imageCentred": "参考图已居中", + "sketch.calibrateImage": "校准", + "sketch.calibrateCancel": "取消校准", + "sketch.calibrateFirst": "点击图片中一段已知距离的第一个点。", + "sketch.calibrateSecond": "点击第二个点。", + "sketch.calibrateLength": "实际距离", + "sketch.calibrateApply": "应用", + "sketch.imageCalibrated": "参考图已校准", + "sketch.cropImage": "裁剪", + "sketch.cropImageDone": "完成裁剪", + "sketch.cropImageHint": "向内拖动控制点:图片不会被挤压,只会裁掉边缘;向外拖动可恢复。", + "sketch.uncropImage": "显示完整图片", + "sketch.imageCropped": "参考图已裁剪", + "sketch.imageUncropped": "已取消裁剪", + "workspace.gridColor": "网格颜色", + "workspace.backgroundColor": "窗口背景(浅色主题)", + "workspace.surfaceColor": "网格下方的工作平面(浅色主题)", + "workspace.showAxes": "坐标轴箭头", + "workspace.showPlateLabels": "平台标签", + "workspace.gridLinesGrow": "缩放时网格线变粗", + "workspace.gridLinesGrowHint": "网格线也铺在平台上,放大时会像 Tinkercad 那样变粗;关闭后,无论怎样缩放都保持一个像素宽,与草图中一致。", + "workspace.showPlateLabelsHint": "在平台上显示设计名称;选择打印机后,还显示打印机名称和构建体积。", + "workspace.showAxesHint": "在平台前左角显示 X(红色,向右)、Y(绿色,向后)和 Z(蓝色,向上)箭头,与数值计数方向一致。", + "workspace.edgeLines": "所有实体显示边线", + "workspace.edgeLinesHint": "为每个实体绘制轮廓,避免深色彼此混在一起。超大的导入网格不绘制。", + "workspace.strongHoles": "更清晰地显示孔", + "workspace.strongHolesHint": "孔绘制得更深、更不透明,并带一圈深色边线,使其在半透明实体中更醒目。", + "workspace.edgeColor": "边线颜色", + "workspace.sketchBackground": "草图:窗口背景(浅色主题)", + "workspace.sketchPlateColor": "草图:网格下方区域(浅色主题)", + "workspace.sketchGridColor": "草图:网格颜色(浅色主题)", + "workspace.sketchMatch": "草图与工作区一致", + "workspace.sketchMatchHint": "草图沿用工作区的窗口背景、网格下方区域和网格颜色。", + "workspace.shadowStrength": "阴影强度", + "workspace.shadowSoftness": "阴影柔和度", + "workspace.shadowCrisp": "锐利", + "workspace.shadowSoft": "柔和", + "workspace.lightAzimuth": "光照方向", + "workspace.lightFromLeft": "从左方", + "workspace.lightFromFront": "从前方", + "workspace.lightFromRight": "从右方", + "workspace.lightElevation": "光照高度", + "workspace.lightLow": "低", + "workspace.lightAbove": "从上方", + "workspace.classicLook": "经典外观", + "workspace.classicLookHint": "白色地面、浅蓝网格并每隔 1 厘米加深一条线、黑色边线、来自上方的光与柔和阴影。之后所有项仍可调整。", + "workspace.gridMajorEvery": "加深网格线间隔", + "workspace.gridMajorSteps": "{count} 个网格步距", + "workspace.gridMajorColor": "加深线颜色", + "workspace.lightReset": "重置光照与阴影", + "workspace.shadeContrast": "着色对比度", + "workspace.shadeSoft": "柔和", + "workspace.shadePunchy": "强烈", + "editor.group.home": "主页", + "editor.group.clipboard": "剪贴板", + "editor.group.history": "历史记录", + "editor.group.shapes": "形状", + "editor.group.visibility": "可见性", + "editor.group.combine": "组合", + "editor.group.modify": "修改", + "editor.group.arrange": "排列", + "editor.group.manage": "管理", + "editor.tool.note": "备注", + "editor.tool.copy": "复制", + "editor.tool.paste": "粘贴", + "editor.tool.duplicate": "复制副本", + "editor.tool.delete": "删除", + "editor.tool.undo": "撤销", + "editor.tool.redo": "重做", + "editor.tool.history": "历史记录", + "editor.tool.hideSelected": "隐藏选中项", + "editor.tool.showSelected": "显示选中项", + "editor.tool.showOutliner": "显示对象列表", + "editor.tool.hideOutliner": "隐藏对象列表", + "editor.tool.group": "分组", + "editor.tool.ungroup": "取消分组", + "editor.tool.bundle": "捆绑", + "editor.tool.intersect": "布尔交集", + "editor.tool.intersectPreview": "显示公共部分", + "status.intersectPreviewOn": "正在显示所选形状的公共部分。移动形状可看到变化;{tool} 可应用,Esc 关闭预览。", + "status.intersectPreviewOff": "预览已关闭:所剩形状不足两个,无法求公共部分", + "status.intersectPreviewEmpty": "这些形状目前没有公共部分", + "status.intersectPreviewTooBig": "三角形太多,无法预览公共部分", + "status.intersectionEmptyKept": "这些形状没有公共部分,因此无交集。未做任何更改。", + "editor.tool.align": "对齐", + "editor.tool.mirror": "镜像", + "editor.tool.rotationPivot": "设置旋转中心", + "editor.tool.array": "阵列", + "editor.tool.split": "分割", + "editor.tool.snapToGrid": "吸附到网格", + "editor.tool.chamfer": "倒角", + "editor.tool.fillet": "圆角", + "editor.tool.hollow": "抽壳", + "editor.tool.deleteFace": "删除面", + "editor.tool.simplify": "简化网格", + "mate.title": "对齐面", + "mate.subtitle": "将一个面贴合到另一个面", + "mate.cancel": "取消对齐面", + "mate.step.source": "1. 点击此实体上要移动的面。", + "mate.step.target": "2. 点击它要贴合的另一个实体的面。", + "mate.step.ready": "两个面均已选取。选择方式与间隙,然后应用。", + "mate.mode": "方式", + "mate.mode.against": "面对面", + "mate.mode.flush": "齐平", + "mate.gap": "间隙", + "mate.apply": "对齐", + "shell.title": "抽壳实体", + "shell.subtitle": "等厚壁", + "shell.help": "壁向内生长,外部保持不变。", + "shell.wall": "壁厚", + "shell.openings": "开口侧", + "shell.side.top": "顶部", + "shell.side.bottom": "底部", + "shell.side.front": "前", + "shell.side.back": "后", + "shell.side.left": "左", + "shell.side.right": "右", + "shell.side.closed": "封闭(内腔)", + "shell.sidesNone": "无开口:四周封闭。", + "shell.sidesHint": "可组合多个侧面。", + "shell.edges": "内部边", + "shell.edges.round": "圆角", + "shell.edges.sharp": "尖角", + "shell.edgesHint": "作用于内壁分开处,例如台阶或开口。普通长方体的内角保持尖角——先对外部边做圆角,内部才会是圆角。", + "shell.apply": "抽壳", + "shell.working": "正在抽壳…", + "shell.cancel": "取消抽壳", + "shell.errorTooThick": "此实体的壁不能这么厚。请选择更薄的壁。", + "shell.errorRoundedEdges": "此长方体的上下边带圆角,壁必须明显薄于该圆角。请选择更薄的壁,或先把上下边的圆角设为 0 再抽壳。若仍失败,可用页脚的“错误报告”保存设计以便反馈。", + "shell.errorCannotHollow": "此实体无法抽壳,即使壁很薄也不行。它的轮廓对 CAD 内核来说可能不够干净;与外缘相连的挖空,例如一直切到导入形状底边的开口,也可能导致此问题。", + "shell.errorNoFlatTop": "此实体没有可敞开的平顶面。球体和自由形状无法用这种方式抽壳。", + "shell.errorNoFlatBottom": "此实体没有可敞开的平底面。", + "edge.errorOldRevolve": "此旋转实体由旧版 layerling 以网格方式构建。打开“编辑草图”并重新完成,即可将其变为精确实体;之后便可抽壳、圆角和倒角。", + "shell.errorNoFlatSide": "此实体在所选一侧没有可敞开的平面。", + "shell.errorProjectChanged": "抽壳过程中对象或项目已更改;请重试。", + "shell.errorFailed": "无法对此实体抽壳。请选择其他壁厚或开口。", + "status.shelled": "已抽壳,壁厚 {size} mm", + "status.shelledClosed": "已抽壳,壁厚 {size} mm,四周封闭:内腔仅在剖视图中可见", + "status.shelledMcp": "MCP 已对对象抽壳,壁厚 {size} mm", + "status.shellRebuilt": "已重新计算壁,厚度恢复为 {size} mm", + "status.shellRebuildFailed": "无法按此尺寸重新计算抽壳。壁已随实体一同缩放。", + "status.sketchRebuildFailed": "无法按此尺寸重建草图实体。编辑草图后,倒角和圆角才能再次作用于它。", + "edge.revertShell": "抽壳(壁厚 {size} mm)", + "deleteFace.title": "删除面", + "deleteFace.subtitle": "相邻面会闭合缺口", + "deleteFace.help": "点击要删除的面;再次点击可取消该面。周围的面会延伸直至闭合缺口:圆角、孔或凸台随之消失,实体仍保持精确。", + "deleteFace.preparing": "正在读取面…", + "deleteFace.countNone": "尚未选取面", + "deleteFace.countOne": "已选取 1 个面", + "deleteFace.countMany": "已选取 {count} 个面", + "deleteFace.apply": "删除", + "deleteFace.working": "正在删除面…", + "deleteFace.cancel": "取消删除面", + "deleteFace.errorUnchanged": "这些面无法删除:周围的面无法闭合缺口。请选取要移除部分的每个面,例如圆角的全部面或孔的整个壁,且不要选中实体本身的面。", + "deleteFace.errorMesh": "此实体没有可删除的精确面:layerling 将其保留为网格,如同导入的 STL、OBJ 或 3MF,以及分割、包裹或简化后的实体,或长文本等非常精细的形状。以 STEP 导入的零件具有精确面。", + "deleteFace.errorResized": "此实体在开启“缩放时保持边尺寸”的情况下被缩放,因此其精确面已不再匹配尺寸。请撤销缩放,删除面,然后再次缩放。", + "deleteFace.errorProjectChanged": "删除面的过程中对象或项目已更改;请重试。", + "deleteFace.errorFailed": "无法删除这些面。请选取其他面。", + "deleteFace.errorNoFaces": "无法读取此实体的面。请关闭该工具后重新打开。", + "deleteFace.errorTooSlow": "删除这些面耗时过长,已在 45 秒后停止;未做任何更改。CAD 内核无法在此零件上处理这些面:请选取其他面,或减少数量。", + "status.facesDeletedOne": "已删除 1 个面", + "status.facesDeletedMany": "已删除 {count} 个面", + "status.facesDeletedMcpOne": "MCP 已删除 1 个面", + "status.facesDeletedMcpMany": "MCP 已删除 {count} 个面", + "status.deleteFaceCancelled": "已取消删除面", + "status.deleteFaceCancelledChanged": "因对象已更改,删除面已取消", + "edge.revertDeleteFaceOne": "已删除面(1 个面)", + "edge.revertDeleteFaceMany": "已删除面({count} 个面)", + "editor.tool.dropToWorkplane": "落到工作平面", + "editor.tool.layFlat": "平放于面", + "editor.tool.mateFaces": "对齐面", + "editor.tool.centerOnWorkplane": "居中到工作平面", + "editor.homeDashboard": "起始页", + "editor.addShape": "添加形状", + "editor.visibilityOptions": "可见性选项", + "editor.import": "导入", + "editor.export": "导出", + "editor.workspaceSettings": "工作区设置", + "editor.keyboardShortcuts": "键盘快捷键", + "editor.bugReport": "问题报告", + "editor.bugReportHint": "将问题报告保存为 ZIP:包含设计及其版本、浏览器和最近的消息,便于在论坛或 GitHub 上附上", + "bugReport.fileSuffix": "bug-report", + "status.bugReportBuilding": "正在生成问题报告……", + "status.bugReportSaved": "问题报告已保存为 ZIP。将该文件附到论坛或 GitHub 的帖子中。", + "editor.group.help": "帮助", + "editor.guide": "快速指南", + "guide.title": "快速指南", + "guide.close": "关闭快速指南", + "guide.footer": "以上功能的按键:本按钮旁边的键盘按钮。", + "guide.group.view": "视角操作", + "guide.view.orbit": "右键转动视图,中键平移视图,滚轮缩放。按住 Ctrl 再按左键也可平移。在实体上短按右键会打开常用命令菜单。未选中任何对象时,方向键同样可以转动视图。", + "guide.view.touch": "在触摸屏上,两根手指也能做到这些:张开手指缩放,一起移动手指平移视图。相机栏中的开关可让单指转动视图。", + "guide.view.cube": "角落的立方体可跳到正视图,拖动它则转动视图,房子按钮把整个场景重新装回画面。按 1 到 6 键也能跳转,配合 Shift 还会缩放到选中项。", + "guide.view.panels": "对象列表、设置窗口、指南和工具面板挡住内容时,可拖动标题栏将其移开;双击可重新停靠。", + "guide.view.projection": "缩放控件旁的立方体按钮在普通视图和平面正交视图之间切换。下方带网格的眼睛图标可隐藏平台,以便从下面查看底面。平台前左角的红、绿、蓝箭头按数值的计数方式显示 X、Y 和 Z(可在设置中关闭)。", + "guide.view.section": "左侧栏底部的剖视按钮(切割工具)沿一个平面切开视图,以便查看壁和空腔。它只是视图:设计和导出内容保持完整。“剖视导出 SVG”会按 1:1 保存该平面上的轮廓,例如用于激光切割。“测量”直接在剖切处测量:在蓝色轮廓上点击两下,再在对侧壁上任意点击一下,即可得到与之垂直的壁厚。面板可通过标题栏移动。", + "guide.group.workplane": "工作平面", + "guide.workplane.place": "按 W 键或点击工作平面图标,可把临时工作平面放到任意点击的面上:靠近角时正落在角上,靠近边时落在边上,在空白平台上则落在点击处。新形状会与之对齐。", + "guide.workplane.reset": "点击空白处(或按 Esc)会让工作平面回到地面,眼睛图标下方的向下箭头也可做到。Shift+W 会直接把它放到选中项上。", + "guide.workplane.hide": "工作平面按钮旁的眼睛图标可隐藏设在某个面上的工作平面,但不会取消它:新形状仍会落在上面。", + "guide.workplane.grid": "在工作区设置(齿轮图标)中,如有需要可完全隐藏网格。", + "guide.group.shapes": "用形状搭建", + "guide.shapes.add": "在功能区中打开“形状”,把长方体、圆柱体、球体、齿轮、文字或屋顶拖到平台上。", + "guide.shapes.text": "文字本身就是一种形状:可选择字体(也可用自己的字体)、沿圆弧弯曲,并在“填充”下生成轮廓、剪影或更宽的一层。“制作分层”会把它变成用于多色打印的名牌,形状库中的“图标牌”对 SVG 图标做同样的事。", + "guide.shapes.inspector": "右侧面板给出真实数值:宽度、深度、高度、位置、旋转、颜色。输入胜过拖动。点击形状的角可同时编辑宽度和深度。旋转过的实体还会在选中项下方显示绕 X、Y、Z 的角度,“旋转”卡片可输入这些数值。", + "guide.shapes.wrap": "平面 SVG 或文字可在其设置的“包裹到圆柱”中贴到圆柱壁上,做凸起或雕刻;然后再将其居中到圆柱上。", + "guide.shapes.myShapes": "常用的实体可变成形状库顶部的自定义形状:选中它们,点“保存选中项”,之后一键即可插入任何设计。它们保存在此浏览器中;若在服务器上启用共享存储,则每台设备都能使用;起始页的“全部备份”会把它们一并带走。", + "guide.shapes.handles": "选中项周围的控制柄可移动、缩放和旋转它。按住 Shift 拖角上的控制柄可在三个方向上保持比例(也可在属性中打开“保持比例”),按住 Alt 则从中心缩放。右下角的网格决定吸附目标。移动时,形状还会吸附到其他形状的边和中心(粉色参考线);拖动时按住 Alt 可暂停吸附。拖动时按住 Shift 可让移动只沿 X 或 Y 方向;一开始就按住 Alt 则拖动的是副本。可以把形状停在平台旁边,留着以后使用。", + "guide.group.select": "选择与排列", + "guide.select.click": "点击选中,按住 Shift 可加选,点击空白处取消选择。", + "guide.select.position": "在属性面板的“位置”下输入实体的位置:X 和 Y 是平台上的坐标,Z 是其底面的高度。", + "guide.select.group": "把该在一起的分组,把该固定的锁定,把挡路的隐藏——都在功能区里。“捆绑”(Ctrl+B)只是把部件连在一起而不合并:颜色得以保留,例如用于多色打印。在分组的设置中打开“多色”后,分组也会用各自的颜色显示每个部件。", + "guide.select.align": "“对齐”让多个实体沿一条边或中心排开;“镜像”让选中项沿某个平面翻转(左右、前后或上下)。要得到镜像副本,请先复制。", + "guide.select.pivot": "先设置旋转轴心,再点击一个面:平面会给出其中心,例如管子端口的轴线。此后选中项将绕该点而不是自身中心旋转——倾斜的管口仍沿其轴线转动。只选中一个实体时,轴心跟随该实体;选中多个时,仅对当前选择有效。红色的轴心标记可用鼠标拖动,并吸附到角和边的中点。再次点击该工具即可移除。", + "guide.select.mateFaces": "“对齐面”(在“排列”下):选中要移动的部件,点击它的一个面,再点击另一个部件的面。“面对面”让两者背对背贴合;“齐平”让两者并排落在同一平面内。可选的间隙会留出余量。部件只会转到两个面平行,然后沿另一面的法线滑动,因此其侧向位置保持不变。一步撤销即可还原。", + "guide.select.carry": "按 C 可拾起选中项:它会贴到指针下方的面上,斜面也行,点击即可放下(Esc 取消)。把新形状移到实体上方时,它们会自动这样做。", + "guide.select.layFlat": "点“平放于面”(在“排列”下),再点击选中项的一个面:指针下方的面会在点击前高亮,实体随之转动,使该面贴在工作平面上——便于把部件放到最适合打印的一面上。", + "guide.select.pattern": "“阵列”把选中项沿一行或绕圆周重复 n 次——用于孔网格、螺栓圆和带齿的环。副本先以预览显示,只有点“创建”才会真正添加。选中多个部件时,右侧属性面板可统一改色或把它们变成孔。“按百分比缩放”(右键菜单或 Ctrl+K)按百分比放大或缩小选中项,可整体缩放,也可每个部件就地缩放。", + "guide.select.overhangs": "“显示悬垂”(眼睛图标旁的下拉菜单中)会把悬垂角度大于 45°、打印时需要支撑的面全部用红白斜线标出。角度可在设置的“外观”中调整。", + "guide.select.notes": "备注用于记录几何形状无法表达的信息。把它放在实体上,它会随实体移动;放在实体旁边,它则留在工作平面上。备注随设计保存,绝不会出现在导出中。右键点击实体,可用参考点标记其中心、角或边中点,形状会吸附到这些点。", + "guide.select.history": "“历史记录”(在撤销和重做旁边)只回看,不会改动任何内容:滑到项目更早的状态,用方向键逐步移动,按 Esc 返回。在那里可以导出该状态、以它为起点新建项目,或永久删除整个历史记录(左下角的按钮,会先询问一次)。视图打开期间,会改动设计的工具均被禁用。", + "guide.group.measure": "测量", + "guide.measure.tape": "卷尺可读取角、边和面之间的距离——先设一个点,拖到下一个点,测量即完成。", + "guide.measure.cornerRuler": "直角尺一键即可落到工作平面上,显示两条成直角的带刻度臂,自身不是实体。拖动控制柄可移动它,点击控制柄可旋转 90°,旁边的 × 可将其移除。控制柄左侧的小按钮改为测量到实体的中部而非其边缘。工作平面在侧壁上时,直角尺就躺在该壁上,并会吸附到实体附近的角。", + "guide.measure.ruler": "形状列表中的标尺(纯测量工具:绝不会出现在导出中,也不能分组或切割)会在视图中直接以浮动数字显示与它接触或重叠的任一实体的范围,且可就地编辑。浮动加号可创建所测形状的副本。", + "guide.group.solid": "实体与孔", + "guide.solid.modes": "每个形状不是实体就是孔。孔是切割工具:它会去除材料。", + "guide.solid.group": "分组会把孔施加到其下方的实体上——内孔、槽或凹槽就是这样做出的。", + "guide.solid.intersect": "“交集”只保留两个实体共有的部分。", + "guide.solid.edit": "“编辑分组”(E)会把分组的部件逐个摊开,“完成”再把它们重建——嵌套在分组里的分组也一样。", + "guide.solid.split": "“分割”用平面把实体或孔一分为二。转动平面即可斜切。", + "guide.group.edges": "倒角与圆角", + "guide.edges.pick": "选中一个实体,选择“倒角”或“圆角”(B 和 Shift+B 键作用相同),然后点击要应用到的边。", + "guide.edges.apply": "输入尺寸并按 Enter。这一步正是多数 Tinkercad 设计所缺的。", + "guide.edges.undo": "处理过的实体可以再处理。在边处理工具中,“撤销边特征”会退回上一次处理,“编辑”则带着其边和数值重新打开;撤销会全部退回。", + "guide.edges.hollow": "“抽壳”把实体变成壁厚均匀的壳体:选择壁厚、哪些面保持开口(任意若干面,或都不开)以及内边是圆角还是尖角。抽壳后的实体可像圆角一样再次修改。", + "guide.edges.deleteFace": "“删除面”可移除已有的圆角、孔或凸台:点击它的所有面,然后按 Delete。周围的面会合拢补上缺口,实体保持精确。", + "guide.group.sketch": "绘制草图", + "guide.sketch.start": "“草图”选项卡绘制平面轮廓,并将其变成实体——向上拉伸或绕轴旋转。", + "guide.sketch.draw": "直线、曲线和现成的形状。闭合轮廓会变成实体;使用“描边”时,改为按宽度构建线条本身,开放的线也可以。", + "guide.sketch.construction": "构造线是虚线,永远不属于轮廓:在“绘制”下打开它,或把一条直线变成构造线。新点会吸附到它与另一条线的交点——以便把角放在中点或固定距离处。", + "guide.sketch.image": "参考图可放在下面并描摹;位置合适后将其锁定。", + "guide.sketchGroup.draw": "绘制", + "guide.sketchDraw.close": "再次点击第一个点即可闭合轮廓。按 Esc 结束连续的直线。", + "guide.sketchGroup.edit": "选择与编辑", + "guide.sketchEdit.select": "“选择”可移动点和线(拖动,或用方向键微调;拖动时按住 Shift 可让移动只沿一个轴);Shift+点击可加点或加线,也可取消选择,在闭合轮廓内部点击会全选它;其边框的角和边上有控制柄,按住 Shift 拖角可保持比例。“添加或移除点”在线段上点击可加点,在点上点击可移除;“擦除”则删除。", + "guide.sketchEdit.corner": "点击角点会为其提供“圆角”和“倒角”选项,点击直线会提供“曲线化直线”(拖动两个控制柄调整形状),两条直线相接处会显示它们的夹角:点击数值即可输入新值(Tab 切换要转动的线)。按 R 可将闭合轮廓旋转 45 度。", + "guide.sketchGroup.clipboard": "剪贴板", + "guide.sketchClipboard.use": "复制、剪切(Ctrl+X)、粘贴和创建副本(Ctrl+D)都作用于选中项。副本会落在原对象旁边的空位上,因此不会与之相连。", + "guide.sketchGroup.view": "视图操作与测量", + "guide.sketchView.zoom": "滚轮缩放。Home 让整个草图适应视图,F 缩放到选中项。", + "guide.sketchView.measure": "侧栏中的卷尺可测量两点之间的距离。点击直线或点会显示其长度;在直线上,可直接在尺寸标签中输入长度。", + "guide.sketchGroup.finish": "生成实体", + "guide.sketchFinish.body": "“完成草图”把闭合轮廓变成实体。做旋转时,在轴的左侧画出截面的一半,然后使用“完成旋转”。", + "guide.sketchFinish.edit": "在实体上点“编辑草图”,或双击它,即可回到这里。在它上面做过的边处理会丢失,因为边是重新生成的。", + "guide.group.files": "保存与分享", + "guide.files.autosave": "设计与导出内容 100% 在浏览器本地计算和保存。无需账号,不会上传任何内容。", + "guide.files.project": "LYL 是 layerling 自己的设计格式:整个设计(包括历史记录)都在一个文件里。在“导出”下可选择文件名,以及随文件带走的撤销步数——最少为“无”,以便分享不带历史记录的设计。在 Chrome 和 Edge 中可自行选择文件夹,Ctrl+S 会再次保存到该文件;其他浏览器则是下载。较早的 .skf 文件仍可打开。安装应用后(Chrome 或 Edge),在文件管理器中双击 .lyl 文件即可在 layerling 中打开。", + "guide.files.export": "STL、3MF 和 OBJ 用于切片软件(3MF 和 OBJ 带颜色),STEP 用于完整的 CAD 程序,SVG 用于平面轮廓。隐藏的部件不会包含在内。“材料”框显示按实体计算出的体积、重量和耗材米数。PNG 保存视图的图片,可按需使用透明背景。", + "guide.files.import": "可以导入 STL、OBJ、3MF、STEP 和 SVG 并围绕它们建模,PNG 或 JPG 图片会被描摹成宽 50 mm 的轮廓。带颜色的 OBJ 或 3MF 会按颜色各成一个实体,包含多个对象的 3MF 则按对象各成一个实体;导入 OBJ 时,可同时选中其 .mtl 或 Tinkercad 的 ZIP。“修改”区域的“简化网格”可让三角形数量极多的网格变精简,并提供前后对比视图;切割和分组仍能处理多少三角形,可在工作区设置中设定。", + "guide.files.bugReport": "底部页脚中的“问题报告”会保存一个 ZIP,内含以 .lyl 保存的设计,以及记录其版本、浏览器和最近消息的文本,便于在论坛或 GitHub 上附上。", + "guide.files.storeOff": "在自己的服务器上,在 index.html 旁创建名为 store 的文件夹,即可在浏览器之外将设计也保存在服务器上。这需要 PHP。", + "guide.files.storeOn": "此安装也会把设计保存在服务器上。起始页会在浏览器设计旁显示该文件夹:把设计拖进去、新建子文件夹,或直接在那里新建设计——它会自动保存。自定义形状也可放进去,放在名为 Custom shapes 的文件夹中。", + "guide.group.search": "查找命令", + "guide.search.palette": "找不到工具?按 Ctrl+K(或“帮助”区域的放大镜)打开命令搜索:输入“圆角”“镜像”或“圆柱体”,用方向键选择后按 Enter。它也认识德语词,会在每条结果旁显示快捷键和所属工具栏区域,还会列出置灰的条目,便于你看到它们的位置。", + "guide.group.settings": "设置", + "guide.settings.workspace": "齿轮图标可打开单位、网格、平台尺寸、颜色、光照与阴影、工具栏按钮大小、缩放时网格线是否加密、供较慢电脑使用的快速模式以及历史记录保留多少。自定义吸附步距(例如 2.54 mm 的排针间距)也在这里添加。", + "guide.settings.language": "语言在最右上角的语言列表中选择,也可在起始页的“设置”中选择。", + "shortcuts.title": "键盘快捷键", + "shortcuts.close": "关闭键盘快捷键", + "shortcuts.print": "打印或保存为 PDF", + "shortcuts.intro": "快捷键在画布获得焦点时生效。在输入框中输入时它们不会触发。", + "shortcuts.or": "或", + "shortcuts.click": "点击", + "shortcuts.rightClick": "右键点击", + "shortcuts.drag": "拖动", + "shortcuts.group.selection": "选择", + "shortcuts.group.clipboard": "剪贴板", + "shortcuts.group.history": "历史记录", + "shortcuts.group.file": "文件", + "shortcuts.group.organise": "分组与可见性", + "shortcuts.group.shape": "调整选中项形状", + "shortcuts.group.transform": "移动与旋转", + "shortcuts.group.view": "视图与工作平面", + "shortcuts.group.sketch": "草图模式", + "shortcuts.group.edgeModifier": "倒角与圆角", + "shortcuts.clearSelection": "取消选择", + "shortcuts.delete": "删除选中项", + "shortcuts.selectAll": "选中所有可见形状", + "shortcuts.addToSelection": "加入或移出选中项", + "shortcuts.contextMenu": "选中项的常用命令菜单", + "shortcuts.axisLockDrag": "拖动时按住:仅沿 X 或 Y 移动", + "shortcuts.duplicateDrag": "拖动副本,原对象保持不动", + "shortcuts.pauseObjectSnap": "拖动时按下:暂停吸附到其他形状", + "shortcuts.sizeAroundCenter": "在形状旁输入尺寸时:以中心为基准扩大,而不是从对边扩展", + "shortcuts.copy": "复制", + "shortcuts.cut": "剪切", + "shortcuts.paste": "粘贴", + "shortcuts.duplicate": "创建副本", + "shortcuts.undo": "撤销", + "shortcuts.redo": "重做", + "shortcuts.historyView": "在历史记录视图中:上一个或下一个状态", + "shortcuts.historyViewClose": "在历史记录视图中:回到当前状态", + "shortcuts.historyViewPage": "在历史记录视图中:向前或向后十个状态", + "shortcuts.historyViewEnds": "在历史记录视图中:最早的状态或当前状态", + "shortcuts.wheel": "鼠标滚轮", + "shortcuts.group": "分组", + "shortcuts.ungroup": "取消分组或取消捆绑", + "shortcuts.bundle": "捆绑(连在一起但不合并)", + "shortcuts.editGroup": "编辑选中的分组", + "shortcuts.lock": "锁定或解锁选中项", + "shortcuts.hide": "隐藏选中项", + "shortcuts.showHidden": "显示所有隐藏项", + "shortcuts.import": "打开或关闭导入对话框", + "shortcuts.export": "打开或关闭导出对话框", + "shortcuts.save": "将设计保存到其文件", + "shortcuts.outliner": "显示或隐藏对象列表", + "shortcuts.hole": "将选中项变为孔", + "shortcuts.solid": "将选中项变回实体", + "shortcuts.transparent": "让选中项透明,或恢复不透明", + "shortcuts.multicolor": "为选中的分组启用多色:每个部件用各自的颜色,或全部使用同一颜色", + "shortcuts.mirror": "镜像模式", + "shortcuts.fillet": "用于选中实体的圆角工具(再按一次:关闭)", + "shortcuts.chamfer": "用于选中实体的倒角工具(再按一次:关闭)", + "shortcuts.align": "对齐模式", + "shortcuts.note": "放置备注", + "shortcuts.carryOntoFace": "拾起选中项并放到某个面上(类似 Tinkercad 的 Cruise)", + "shortcuts.dropToWorkplane": "把选中项放到工作平面上", + "shortcuts.nudge": "按当前视图方向移动一个网格步距", + "shortcuts.nudgeCoarse": "移动五个网格步距", + "shortcuts.raise": "升高或降低选中项", + "shortcuts.rotate": "旋转 45°", + "transform.rotateHandle": "拖动以旋转", + "transform.cornerWidth": "宽度", + "transform.cornerDepth": "深度", + "transform.resize": "调整大小", + "transform.height": "高度", + "transform.lift": "抬升", + "sketch.modeBadge": "草图视图", + "sketch.modeBadgeRevolve": "旋转草图", + "status.sketchUpdated": "草图已更新", + "status.revolveCreated": "已创建旋转草图", + "shortcuts.rotateFine": "旋转 22.5°", + "shortcuts.views": "六个标准视图", + "shortcuts.viewsFocus": "标准视图,并缩放到选中项", + "shortcuts.savedViews": "转到该键保存的视图", + "shortcuts.saveView": "为此设计保存视图——转动、平移和缩放", + "shortcuts.orbit": "未选中任何对象时,转动视图 15°", + "shortcuts.orbitCoarse": "未选中任何对象时,转动视图 90°", + "shortcuts.pan": "未选中任何对象时,平移视图", + "shortcuts.panCoarse": "未选中任何对象时,进一步平移视图", + "shortcuts.resetView": "让整个场景适应视图", + "shortcuts.focusSelection": "缩放到选中项", + "shortcuts.projection": "正交或透视", + "shortcuts.zoom": "放大或缩小", + "shortcuts.placeWorkplane": "放置工作平面", + "shortcuts.placeWorkplaneOnSelection": "将其放到选中的面上", + "shortcuts.reverseWorkplane": "放置时按住可反向", + "shortcuts.leaveMode": "退出工作平面或卷尺模式", + "shortcuts.sketchEscape": "放下工具(回到“选择”),然后清除选择", + "shortcuts.sketchDelete": "删除选中的元素", + "shortcuts.sketchRotate": "将闭合草图旋转 45°", + "shortcuts.sketchLockImage": "锁定或解锁选中的轮廓或参考图", + "shortcuts.sketchResetView": "让整个草图适应视图", + "shortcuts.sketchFocusSelection": "在草图中缩放到选中项", + "shortcuts.sketchZoom": "放大或缩小草图", + "shortcuts.sketchNudge": "将选中的点、线或图像移动一个网格步距(Shift:更大步距)", + "shortcuts.sketchTools": "选择绘制工具:1 直线,2 贝塞尔曲线,3 平滑曲线,4 添加或移除点(未在绘制直线时)", + "shortcuts.sketchHandleNudge": "将点中的曲线控制柄移动一个网格步距(Shift:更大步距)", + "shortcuts.sketchAxisLock": "拖动时:让移动只沿一个轴", + "shortcuts.sketchAngleSnap": "绘制时:按 15° 步距吸附新直线", + "shortcuts.sketchTypedLine": "绘制时:输入长度,按“<”或 Tab 输入角度,Enter 确定该点", + "shortcuts.sketchDimensionSymmetric": "在直线的长度输入框中:向两侧扩展", + "shortcuts.edgeApply": "应用预览", + "shortcuts.edgeCancel": "放弃预览", + "editor.modeLabel": "编辑器模式", + "editor.modeGeometry": "3D 编辑器", + "editor.modeSketch": "草图", + "editor.renameProject": "重命名设计", + "status.ready": "就绪", + "status.alreadyAligned": "已对齐", + "status.buildingBrep": "正在构建 B-Rep…首次导出 STEP 会加载 OpenCascade 内核(约 22 MB),每个会话仅一次", + "status.buildingSvg": "正在构建 SVG 俯视投影…", + "status.buildingSketch": "正在构建精确草图几何…", + "status.chooseSelectFirst": "添加草图图像前先选择“选择”工具", + "status.chooseImageFile": "选择 PNG、JPG、WebP、GIF 或其他图像文件", + "status.chooseEdgeFeature": "选择要移除的边特征", + "status.chooseSecondPoint": "选择第二个测量点", + "status.sketchStrokeSet": "草图按描边构建", + "status.sketchStrokeOff": "草图已改回按区域构建", + "pivot.dragHint": "拖动以移动轴心,它会吸附到角和边中点", + "status.closeProfile": "结束草图前至少闭合一个轮廓", + "status.sketchChainCleared": "已清除当前草图链", + "status.edgeCancelled": "已取消边修改器", + "status.edgeCancelledChanged": "对象已更改,边修改器已取消", + "status.edgeNeedsAdjustment": "边处理需要调整", + "status.edgePreviewReady": "边处理预览已就绪", + "status.finishBeforeRedo": "先完成当前拖动或变换,再重做", + "status.finishBeforeRotate": "先完成当前拖动或变换,再旋转", + "status.finishBeforeSave": "先完成当前拖动或变换,再保存设计文件", + "status.finishBeforeUndo": "先完成当前拖动或变换,再撤销", + "status.clipboardEmpty": "layerling 剪贴板为空", + "status.noHiddenShapes": "没有隐藏的形状", + "status.nothingToMirror": "没有可镜像的对象", + "status.nothingToRedo": "没有可重做的操作", + "status.nothingToRedoSketch": "此草图中没有可重做的操作", + "status.nothingToUndoSketch": "此草图中没有可撤销的操作", + "status.oneLylAtATime": "一次只能打开一个设计文件;STL、OBJ、STEP 和 SVG 几何需分别导入", + "status.lylUnavailable": "此处无法打开 layerling 设计文件(.lyl)", + "status.pasteCancelled": "设计已更改,粘贴已取消", + "status.rotationClosedOnly": "仅闭合草图对象可旋转", + "status.selectClosedSketch": "选择要旋转的闭合草图对象", + "status.selectGroupFirst": "先选择一个分组", + "scalePercent.title": "按百分比缩放", + "scalePercent.subtitle": "各方向等比", + "scalePercent.help": "输入目标大小:120 % 表示放大五分之一,50 % 表示缩小一半。底部位置保持不变。", + "scalePercent.percent": "新尺寸", + "scalePercent.mode": "多个部件", + "scalePercent.mode.together": "一起", + "scalePercent.mode.togetherHint": "围绕共同中心放大,布局随之一起放大,如同一个整体", + "scalePercent.mode.each": "各自原位", + "scalePercent.mode.eachHint": "每个部件在原位放大,部件之间的间距保持不变", + "scalePercent.apply": "缩放", + "scalePercent.errorPercent": "输入 1 到 1000 之间的百分比。", + "holePattern.title": "孔阵列", + "holePattern.subtitle": "在平面上排布孔", + "holePattern.cancel": "关闭孔阵列", + "holePattern.step.pick": "点击实体上的一个平面。", + "holePattern.count.one": "该面上可容纳 1 个孔。", + "holePattern.count.many": "该面上可容纳 {count} 个孔。", + "holePattern.none": "此处放不下孔:该面对于此尺寸和边距来说太小。", + "holePattern.tooMany": "孔数将超过 {limit} 个。增大孔尺寸或加大间距。", + "holePattern.form": "孔形状", + "holePattern.form.round": "圆形", + "holePattern.form.square": "正方形", + "holePattern.form.rectangle": "长方形", + "holePattern.form.hexagon": "六边形", + "holePattern.form.slot": "槽形", + "holePattern.size.diameter": "直径(Ø)", + "holePattern.size.side": "边长", + "holePattern.size.corners": "对角直径(Ø)", + "holePattern.size.width": "宽度", + "holePattern.size.height": "高度", + "holePattern.spacing": "中心距", + "holePattern.wall": "孔间壁厚", + "holePattern.arrangement": "排列方式", + "holePattern.arrangement.grid": "网格", + "holePattern.arrangement.staggered": "交错", + "holePattern.margin": "距面边缘的边距", + "holePattern.depth": "深度", + "holePattern.depth.through": "贯穿整个实体", + "holePattern.depth.custom": "自定义深度", + "holePattern.depthValue": "孔深", + "holePattern.repick": "换一个面", + "holePattern.apply": "创建", + "holePattern.holeName": "孔", + "status.holePatternStart": "孔阵列:点击实体上的一个平面。", + "status.holePatternCancelled": "已取消孔阵列", + "status.holePatternSelectOne": "孔阵列只能选择一个实体。", + "status.holePatternNeedsSolid": "孔阵列只能用于实体,不能用于孔。", + "status.holePatternOtherTool": "先完成其他工具的操作。", + "status.holePatternMissed": "那不是所选实体的面。", + "status.holePatternCurved": "该面是曲面。请选择平面。", + "status.holePatternReady": "已选择面。设置孔形状、尺寸和间距。", + "status.holePatternTooMany": "一个阵列的孔数会过多。", + "status.holePatternNone": "该面上放不下任何孔。", + "status.holePatternCreated": "已创建孔阵列:{count} 个孔,已与实体分组", + "faceTool.title": "面", + "faceTool.subtitle": "将平面推出或压入", + "faceTool.cancel": "关闭面工具", + "faceTool.step.pick": "点击实体上的一个平面。", + "faceTool.step.ready": "设置内缩、圆角半径和深度,然后点击“创建”。", + "faceTool.empty": "内缩和圆角半径使该面没有剩余。请减小这些值。", + "faceTool.direction": "方向", + "faceTool.direction.out": "向外:添加材料", + "faceTool.direction.in": "向内:挖出凹槽", + "faceTool.inset": "距面边缘的内缩", + "faceTool.radius": "圆角半径", + "faceTool.depth": "深度", + "faceTool.repick": "换一个面", + "faceTool.apply": "创建", + "faceTool.bodyName": "面拉伸", + "faceTool.pocketName": "面凹槽", + "status.faceToolStart": "面:点击实体上的一个平面。", + "status.faceToolCancelled": "已取消面工具", + "status.faceToolSelectOne": "面工具只能选择一个实体。", + "status.faceToolNeedsSolid": "面工具只能用于实体,不能用于孔。", + "status.faceToolOtherTool": "先完成其他工具的操作。", + "status.faceToolMissed": "那不是所选实体的面。", + "status.faceToolCurved": "该面是曲面。请选择平面。", + "status.faceToolReady": "已选择面。设置内缩、圆角半径和深度。", + "status.faceToolCreated": "面已向外推出 {depth} mm", + "status.faceToolPocketCreated": "已在该面上挖出深 {depth} mm 的凹槽", + "status.faceToolFailed": "面工具无法构建此实体:{message}", + "status.honeycombConverted": "蜂窝已转换为孔阵列:{count}", + "welcome.moreHolePatternTitle": "孔阵列", + "welcome.moreHolePatternBody": "点击实体的某个平面,在其上排布孔:圆形、正方形、长方形、六边形或槽形,可按网格或交错排列,并可设置间距、距边缘的边距和深度(贯穿整个实体或指定深度)。创建前会预览孔;它们仍是普通孔,并与实体分组,可用于通风口、扬声器格栅、篮筐和外壳。", + "guide.select.holePattern": "孔阵列(工具栏中“阵列”旁的按钮、右键点击实体,或按 Ctrl+K):点击一个平面,然后设置孔形状、尺寸、间距、排列方式、边距和深度。孔会以预览显示;点击“创建”后作为孔添加并与实体分组。取消分组即可再次分开。", + "guide.select.faceTool": "面(工具栏中“孔阵列”旁的按钮、右键点击实体,或按 Ctrl+K):点击一个平面,选择向外或向内,然后设置距边缘的内缩、圆角半径和深度。添加的内容是草图实体,并与原实体分组。", + "scalePercent.errorTooSmall": "“{name}”会小于 0.01 mm。", + "scalePercent.errorTooLarge": "“{name}”会超出其形状允许的大小。请在设置中“形状默认值”下为其设置更高的“自定义尺寸上限”,或选择更小的百分比。", + "status.scaledByPercent": "已缩放到 {percent} %", + "status.scaledByPercentSkipped": "已缩放到 {percent} %;{skipped} 个锁定项保持不变", + "status.selectionColored": "已为 {count} 个部件着色", + "status.selectShapeFirst": "先选择一个形状", + "status.selectShapeWithEdge": "先选择带边特征的形状", + "status.selectSketchImageLock": "选择要锁定或解锁的草图图像", + "status.selectSketchPoint": "选择要移除的草图点或线段", + "status.selectSketchGeometry": "先选择草图几何", + "status.sketchCopied": "已复制草图选中项", + "status.sketchCut": "已剪切草图选中项", + "status.sketchPasted": "已粘贴草图几何", + "status.sketchDuplicated": "已创建草图选中项的副本", + "status.sketchClipboardEmpty": "先复制一些草图几何", + "status.selectSolidAndHole": "选择两个实体,或一个实体和一个孔,以进行相交", + "status.selectSolidForStep": "导出 STEP 前至少选择一个实体形状", + "status.selectTwoToAlign": "选择至少两个形状以进行对齐", + "status.selectTwoToGroup": "选择至少两个形状以进行分组", + "status.rulerNotSolid": "标尺不是实体,在此不计入", + "status.selectHighlightedEdges": "选择高亮的边,然后调整预览", + "status.sharpAngleLowered": "没有符合条件的边,阈值现为 {angle}°", + "status.sharpAngleLoweredForEdge": "阈值已降至 {angle}°,使点击的边被纳入", + "status.selectOneToSeparate": "选择一个要分离的对象", + "status.selectSketchShape": "选择一个由草图创建的形状以进行编辑", + "status.selectedAllVisible": "已选择所有可见形状", + "status.selectionCleared": "已清除选择", + "status.selectionHidden": "已隐藏选中项", + "status.selectionShown": "选中项已可见", + "status.selectionLockedNow": "选中项已锁定", + "status.selectionUnlocked": "选中项已解锁", + "status.objectLocked": "对象已锁定", + "status.selectionToHole": "已将选中项改为孔", + "status.selectionTransparent": "已将选中项改为透视显示", + "status.selectionOpaque": "已将选中项改为不透明", + "status.selectionMulticolor": "所选分组的每个部件显示各自颜色", + "status.selectionOneColor": "所选分组显示单一颜色", + "status.multicolorNeedsGroup": "多色仅适用于分组:先选择一个分组", + "status.selectionToSolid": "已将选中项改为实体", + "status.selectionRaised": "已将选中项上移", + "status.selectionLowered": "已将选中项下移", + "status.centeredOne": "已将选中项居中于工作平面", + "status.centeredMany": "已将 {count} 个对象居中于工作平面", + "status.nothingMeasurable": "选中项没有可居中的几何", + "status.alreadyCentered": "选中项已在工作平面上居中", + "status.sharedUnavailable": "此安装不会将设计保存在服务器上", + "status.sketchCancelled": "已取消草图", + "status.sketchImageSelected": "已选择草图图像", + "status.sketchMeasurementRemoved": "已移除草图测量", + "status.sketchRedo": "草图重做", + "status.sketchUndo": "草图撤销", + "status.edgeRemoveChanged": "移除边特征时对象已更改;请重试", + "status.groupChanged": "分组时场景已更改;请选择对象后重试", + "status.intersectChanged": "相交时场景已更改;请选择对象后重试", + "status.noPrintableSurface": "所选对象没有可打印表面", + "status.onlyOnePart": "所选对象只有一个连通部件", + "status.meshTooDense": "此网格有 {triangles} 个三角形。边处理可处理 {limit} 个;超过后内核耗时会超出值得等待的范围。对于形状库中的形状,暂时改用其自身设置。对于导入的部件,请先以 STEP 格式导入或以更少的三角形保存。", + "status.threadTooDense": "螺纹由 {triangles} 个三角形构成,对边处理来说过多,其上限为 {limit}。因此请在边处理之后再添加螺纹:先对实体倒角或倒圆,再加螺纹。属性面板中的头部倒角无需这样处理也能修整螺钉头的边缘。", + "status.unlockImageDelete": "删除草图图像前先按 L 解锁", + "status.unlockImageEdit": "编辑草图图像前先按 L 解锁", + "status.updatingRevolve": "正在更新旋转预览…", + "status.waitForPreview": "等待有效的边预览后再应用", + "status.deletedOne": "已删除 1 个形状", + "status.deletedMany": "已删除 {count} 个形状", + "status.cutTooComplex": "此几何过于复杂,无法剪切:{triangles} 个三角形,上限为 {limit}。请先简化(减面)网格,或在“工作区设置”中提高上限。", + "status.groupNotMerged": "已分组,但未合并为一个实体:各部件合计 {triangles} 个三角形,超过上限 {limit}。导出时它们会以重叠状态保留,切片软件会将其报告为错误(非流形边)。请在“工作区设置”中提高上限或简化网格,然后重新分组。", + "status.cutNotWatertightTooComplex": "此网格不是封闭的,且有 {triangles} 个三角形,对备用剪切方式来说过于复杂(上限 {limit})。请先修复或简化(减面)网格。", + "status.cutOne": "已剪切 1 个形状", + "status.cutMany": "已剪切 {count} 个形状", + "status.movedOne": "已移动 1 个形状", + "status.movedMany": "已移动 {count} 个形状", + "status.rotatedOne": "已将 1 个形状旋转 {angle}°", + "status.rotatedMany": "已将 {count} 个形状旋转 {angle}°", + "status.snappedOne": "已将 1 个形状吸附到 {grid} mm 网格", + "status.snappedMany": "已将 {count} 个形状吸附到 {grid} mm 网格", + "status.shownHiddenOne": "已显示 1 个隐藏形状", + "status.shownHiddenMany": "已显示 {count} 个隐藏形状", + "status.hiddenOnOpenOne": "此设计中有 1 个形状已隐藏", + "status.hiddenOnOpenMany": "此设计中有 {count} 个形状已隐藏", + "status.hiddenOnOpenShow": "全部显示", + "status.droppedToWorkplane": "已将选中项落到工作平面", + "status.layFlatStart": "平放:将鼠标移到选中项的某个面上(该面会高亮),点击即可将其放到工作平面", + "status.layFlatCancelled": "已取消平放", + "status.mateStart": "对齐面:点击所选实体的一个面", + "status.mateTarget": "现在点击另一个实体的面", + "status.mateReady": "已选取两个面", + "status.mateMissedSource": "点击所选实体的一个面", + "status.mateMissedTarget": "点击另一个实体的面", + "status.mateCancelled": "已取消对齐面", + "status.mateSelectOne": "选择要移动的那个实体", + "status.mated": "面已对齐", + "status.layFlatMissed": "没有点中选中项的任何面,未发生旋转", + "status.laidFlat": "已贴合到该面", + "status.selectOneToWrap": "选择一个要包裹的实体", + "status.wrapTooWide": "{length} 无法绕这个圆柱一周,绕一周只有 {circumference}。请使用至少 {diameter} 的直径,或缩短该实体。", + "status.wrapTooThick": "实体厚度超过直径的一半,无法放入壁内", + "status.wrapNeedsDiameter": "输入直径", + "status.wrapNothing": "此实体上没有可包裹的内容", + "status.wrappedAround": "已包裹到直径 {diameter} 的圆柱上", + "status.wrappedInward": "已包裹到直径 {diameter} 的圆柱壁内", + "status.mcpWrapped": "MCP 已将实体包裹到圆柱上", + "status.separatedParts": "已分离 {count} 个部件", + "status.separatedOutlines": "已分离为 {count} 个实体,每个轮廓一个,各自保留自己的草图", + "status.copiedOne": "已复制 1 个形状", + "status.copiedMany": "已复制 {count} 个形状", + "status.alignAnchor": "对齐锚点:{name}(已锁定)", + "status.measured": "测得 {value} mm", + "status.preparingEdges": "正在 CAD 工作线程中准备{kind}边", + "status.removedFeature": "已移除{label}", + "status.editingFeature": "已收回{label}:边和数值已重新填入。修改后再应用一次。", + "status.selectOneSolid": "选择一个实体进行{kind}", + "status.validatingFile": "正在校验 {name},之后将其作为新设计打开", + "status.importCancelled": "由于设计已更改,已取消导入 {count} 个文件", + "status.svgInvalid": "{reason}。修正其轮廓后重新导入源 SVG", + "status.mcpAligned": "MCP 对齐已{label}", + "status.exportedStepOne": "已导出 STEP B-Rep,含 1 个实体{skipNote}", + "status.exportedStepMany": "已导出 STEP B-Rep,含 {count} 个实体{skipNote}", + "status.importedFile": "已导入 {name}。", + "status.importedFiles": "已导入 {count}/{total} 个文件。", + "status.importFailedList": "未导入:{details}{more}。", + "status.importFailedMore": " 以及另外 {count} 项", + "status.importColoredParts": "{name} 有 {count} 种颜色,将作为 {count} 个实体导入,各自位于原位并一起选中。", + "status.importObjectParts": "{name} 包含 {objects} 个对象,将作为 {count} 个实体导入,各自位于原位并一起选中。", + "status.importSvgSkipped": "{count} 个形状({name})未能生成实体,已被略过。请在绘图软件中合并重叠的图形、闭合轮廓,然后重新保存 SVG。", + "status.importObjNoMtl": "缺少 {name} 的材质颜色:请连同 .mtl 文件一起选择,或导入整个 ZIP。", + "status.importObjVertexColors": "{name} 几乎每个点都有自己的颜色,这种颜色渐变常见于扫描件和 AI 生成的模型。layerling 无法显示它,因此已将其作为单一颜色的一个实体导入。", + "status.importMtlAlone": ".mtl 文件只保存颜色。请连同它的 .obj 一起选择。", + "status.importZipEmpty": "此 ZIP 中没有 layerling 可导入的文件", + "status.importZipUnreadable": "无法打开此 ZIP", + "status.import3mfPainted": "{name} 中的面在切片软件里被涂过色;layerling 不读取这些涂色,部件将按其耗材颜色导入。", + "status.importUnsupported": "无法导入此文件类型", + "status.importUnreadable": "无法读取此文件", + "status.importingFile": "正在导入 {index}/{total}:{name}{stepNote}", + "status.stepKernelNote": "… 首次导入 STEP 会加载 OpenCascade 内核(约 22 MB)", + "status.edgeNoUndoHistory": "此边特征没有保存的撤销记录", + "status.noEdgeFeature": "没有可移除的边特征", + "status.editingProfile": "正在编辑草图轮廓", + "status.editingInsetProfile": "正在编辑该面的轮廓(内缩 {distance} mm,圆角半径 {radius} mm)", + "status.sketchProfileClosed": "轮廓已闭合:编辑路径或完成草图", + "status.sketchSegmentAdded": "已添加草图线段", + "status.sketchPointSegmentAdded": "已添加草图点和线段", + "status.sketchPointAdded": "已添加草图点", + "status.sketchPrimitiveAdded": "已将{shape}添加到草图", + "status.sketchPointRemoved": "已移除草图点", + "status.sketchLineRemoved": "已移除草图直线", + "status.sketchImageRemoved": "已移除草图图像", + "status.sketchImageAdded": "已将 {name} 添加到草图", + "status.sketchSelectionRemoved": "已移除选中的草图几何图形", + "status.sketchPointMoved": "已移动草图点", + "status.sketchHandleAdjusted": "已调整曲线控制柄", + "status.sketchMadeCorner": "已改为角点", + "status.sketchLineCurved": "直线已改为曲线", + "status.sketchLineStraightened": "曲线已改为直线", + "status.sketchLinesCurved": "{count} 条直线已改为曲线", + "status.sketchLinesStraightened": "{count} 条曲线已改为直线", + "status.sketchMadeSmooth": "已改为平滑", + "status.sketchHandlesSplit": "已拆分曲线控制柄", + "status.sketchPointInserted": "已向路径添加点", + "status.editingRevolveProfile": "正在编辑旋转轮廓", + "status.sketchCannotExtrude": "此草图轮廓无法拉伸为 3D", + "status.sketchCannotRevolve": "此草图轮廓无法旋转为 3D", + "status.revolveStarted": "已开始旋转草图:在轴线左侧绘制", + "status.sketchStarted": "已开始草图:放置第一个点", + "status.sketchTool.line": "直线:点击各点以绘制直线段", + "status.sketchArcStraight": "这三个点位于同一直线上,无法画出经过它们的圆弧", + "status.sketchArcAdded": "已添加圆弧,半径 {radius}", + "status.sketchTool.arc": "圆弧:点击两端,再点击圆弧经过的第三个点", + "status.sketchTool.bezier": "贝塞尔:点击并拖动各点以拉出曲线控制柄", + "status.sketchTool.smooth": "平滑曲线:点击各点以构建顺畅的路径", + "status.sketchTool.rectangle": "矩形:在草图上拖动以创建闭合矩形", + "status.sketchTool.circle": "圆:拖出包围框以创建闭合圆", + "status.sketchTool.ellipse": "椭圆:拖出包围框以创建闭合椭圆", + "status.sketchTool.halfCircle": "半圆:拖出包围框以创建闭合半圆", + "status.sketchTool.pieSlice": "扇形:拖出包围框以创建闭合扇形", + "status.sketchTool.boltCircle": "螺栓孔圆:拖出包围框以创建带孔的圆盘", + "status.sketchTool.triangle": "三角形:拖出包围框以创建闭合三角形", + "status.sketchTool.hexagon": "六边形:拖出包围框以创建闭合六边形", + "status.sketchTool.select": "选择:编辑草图几何图形,点击闭合轮廓内部可将其全部选中,也可放置和缩放参考图", + "status.sketchTool.refine": "细化:点击线段可添加点,点击点可将其移除", + "status.sketchTool.erase": "擦除:点击点或线段将其移除", + "status.sketchTool.measure": "测量:选择两个点", + "status.imageNotAdded": "无法添加草图图像", + "status.revolveSettingsFailed": "无法应用旋转设置", + "status.noteAdded": "已放置注释", + "status.notePinned": "注释已固定到该对象", + "status.noteRemoved": "已删除注释", + "status.pointsAdded": "已放置 {count} 个参考点", + "status.pointsExist": "这些点已标记", + "status.pointRemoved": "已删除参考点", + "status.pointsRemoved": "已删除 {count} 个参考点", + "status.alreadyWrapped": "此形状已包裹在圆柱上。请撤销包裹,或从平铺的形状重新开始。", + "status.noteLimitReached": "一个设计最多容纳 {count} 条注释", + "status.noteMode": "点击对象或工作平面以放置注释", + "status.notesHidden": "注释已隐藏", + "status.overhangsShown": "红色斜线标出的面:悬垂角度超过 {angle}°、需要支撑的面。可在设置中调整该角度。", + "status.overhangsHidden": "悬垂已隐藏", + "status.notesShown": "注释已显示", + "status.nothingToUndo": "没有可撤销的操作", + "status.undo": "撤销", + "status.redo": "重做", + "status.undoWorkplaneBase": "撤销:工作平面已回到平台", + "status.undoWorkplaneFace": "撤销:工作平面已回到某个面上", + "status.redoWorkplaneBase": "重做:工作平面已回到平台", + "status.redoWorkplaneFace": "重做:工作平面又回到某个面上", + "status.historyViewOpened": "正在回看。滑动到更早的状态,关闭视图前不会有任何改动。", + "status.historyViewClosed": "已回到当前状态", + "status.historyViewBlocksEdits": "更改设计前请关闭历史记录视图", + "status.historyViewEmpty": "暂无可回看的内容", + "status.finishBeforeHistory": "请先完成当前操作再回看", + "status.historyProjectCreating": "正在从此状态创建项目…", + "status.historyProjectCreateFailed": "无法从此状态创建项目", + "status.historyProjectUnavailable": "无法从此处创建新项目", + "historyView.title": "历史记录", + "historyView.subtitle": "回看,不更改任何内容", + "historyView.close": "关闭历史记录视图", + "historyView.slider": "撤销步数", + "historyView.earlier": "更早的状态", + "historyView.later": "更晚的状态", + "historyView.position": "状态 {index}/{count}", + "historyView.objectsOne": "1 个对象", + "historyView.objectsMany": "{count} 个对象", + "historyView.atCurrent": "当前状态", + "historyView.stepsBackOne": "当前状态之前 1 步", + "historyView.stepsBackMany": "当前状态之前 {count} 步", + "historyView.stepsAheadOne": "当前状态之后 1 步(重做)", + "historyView.stepsAheadMany": "当前状态之后 {count} 步(重做)", + "historyView.export": "导出此状态", + "historyView.bringBack": "带入设计", + "historyView.bringBackMany": "将 {count} 个对象带入设计", + "historyView.bringBackHint": "将选中对象的副本按此状态下的样子添加到设计中", + "historyView.bringBackNothing": "点击此状态中的某个对象,将其带回设计(按住 Shift 点击可选多个)", + "status.broughtBackOne": "已带回 {name}(来自 {time})", + "status.broughtBackOneNoTime": "已带回 {name}(来自状态 {index})", + "status.broughtBackMany": "已带回 {count} 个对象(来自 {time})", + "status.broughtBackManyNoTime": "已带回 {count} 个对象(来自状态 {index})", + "historyView.inside": "位于 {path} 内:仅供查看和挑选,不会有任何改动", + "historyView.backOut": "退出", + "historyView.backOutHint": "再次关闭此分组,并选中该分组本身", + "historyView.openGroup": "打开分组", + "historyView.openGroupHint": "查看选中分组的内部以挑选其部件;不会有任何改动", + "historyView.openGroupNothing": "选择一个分组以查看其内部", + "historyView.delete": "删除历史记录", + "historyView.deleteHint": "永久移除所有更早的步骤;设计保留当前状态", + "historyView.deleteNothing": "没有可删除的更早步骤", + "historyView.deleteTitle": "删除全部历史记录?", + "historyView.deleteBody": "设计将完全保持当前的样子。所有更早的步骤会被永久移除:撤销和此视图都无法再回退,此后保存的文件也不再包含历史记录。", + "historyView.deleteConfirm": "删除历史记录", + "status.historyCleared": "已删除历史记录:设计保留当前状态", + "historyView.createProject": "从此状态新建项目", + "historyView.copyName": "{name}({time})", + "historyView.lastStep": "上一步", + "historyView.nextStep": "下一步", + "historyView.lastStepNone": "无:已是最早的状态", + "historyView.nextStepNone": "无:已是最新的状态", + "historyStep.start": "历史记录的起点", + "historyStep.addedOne": "添加了 {name}", + "historyStep.addedMany": "添加了 {count} 个对象", + "historyStep.deletedOne": "删除了 {name}", + "historyStep.deletedMany": "删除了 {count} 个对象", + "historyStep.grouped": "将 {count} 个对象分组为 {name}", + "historyStep.ungrouped": "已取消 {name} 的分组", + "historyStep.splitOne": "将 {name} 分割为 {count} 个对象", + "historyStep.replaced": "将 {removed} 个对象替换为 {added}", + "historyStep.movedOne": "移动了 {name}", + "historyStep.movedMany": "移动了 {count} 个对象", + "historyStep.rotatedOne": "旋转了 {name}", + "historyStep.rotatedMany": "旋转了 {count} 个对象", + "historyStep.resizedOne": "调整了 {name} 的尺寸", + "historyStep.resizedMany": "调整了 {count} 个对象的尺寸", + "historyStep.colorOne": "更改了 {name} 的颜色", + "historyStep.colorMany": "更改了 {count} 个对象的颜色", + "historyStep.holeOne": "将 {name} 设为孔", + "historyStep.holeMany": "将 {count} 个对象设为孔", + "historyStep.solidOne": "将 {name} 设为实体", + "historyStep.solidMany": "将 {count} 个对象设为实体", + "historyStep.renamedOne": "将 {name} 重命名为 {newName}", + "historyStep.mirroredOne": "镜像了 {name}", + "historyStep.mirroredMany": "镜像了 {count} 个对象", + "historyStep.edgesOne": "更改了 {name} 的边", + "historyStep.edgesMany": "更改了 {count} 个对象的边", + "historyStep.roundedOne": "为 {name} 的边添加圆角", + "historyStep.roundedMany": "为 {count} 个对象的边添加圆角", + "historyStep.chamferedOne": "为 {name} 的边添加倒角", + "historyStep.chamferedMany": "为 {count} 个对象的边添加倒角", + "historyStep.hollowedOne": "抽壳了 {name}", + "historyStep.hollowedMany": "抽壳了 {count} 个对象", + "historyStep.facesDeletedOne": "删除了 {name} 的面", + "historyStep.facesDeletedMany": "删除了 {count} 个对象的面", + "historyStep.groupOpened": "打开 {name} 以编辑其部件", + "historyStep.groupClosed": "关闭了 {name}", + "historyStep.duplicatedOne": "已复制 {name}", + "historyStep.duplicatedMany": "已复制 {count} 个对象", + "historyStep.copiesOf": "已制作 {count} 份 {name} 的副本", + "historyStep.hiddenOne": "已隐藏 {name}", + "historyStep.hiddenMany": "已隐藏 {count} 个对象", + "historyStep.shownOne": "已显示 {name}", + "historyStep.shownMany": "已显示 {count} 个对象", + "historyStep.lockedOne": "已锁定 {name}", + "historyStep.lockedMany": "已锁定 {count} 个对象", + "historyStep.unlockedOne": "已解锁 {name}", + "historyStep.unlockedMany": "已解锁 {count} 个对象", + "historyStep.editedOne": "已修改 {name}", + "historyStep.editedMany": "已修改 {count} 个对象", + "historyStep.reordered": "已更改对象的顺序", + "historyStep.noteAdded": "已添加备注", + "historyStep.noteRemoved": "已移除备注", + "historyStep.noteChanged": "已修改备注", + "historyStep.pointAdded": "已添加参照点", + "historyStep.pointRemoved": "已移除参照点", + "historyStep.pointChanged": "已移动参照点", + "historyStep.workplane": "已更改工作平面", + "historyStep.changed": "已修改设计", + "status.edgeCancelledUndo": "边修改已取消 · 撤销", + "status.edgeCancelledRedo": "边修改已取消 · 重做", + "status.alignStart": "对齐:选择一个圆点,或点击已选中的形状将其固定为基准", + "status.alignCancelled": "已取消对齐", + "status.alignAnchorSet": "已设置对齐基准", + "status.alignAnchorNamed": "对齐基准:{name}", + "status.mirrorStart": "镜像:选择一个轴向箭头", + "status.mirrorCancelled": "已取消镜像", + "status.pivotPickStart": "旋转中心:点击一个面,平面会以其中点为准,例如管端的轴心", + "status.pivotPickCancelled": "已取消设置旋转中心", + "status.pivotSet": "旋转中心已设置,选中项现在绕该点旋转", + "status.pivotMissed": "未命中任何实体,旋转中心未设置", + "status.pivotCleared": "已移除旋转中心,恢复绕中心旋转", + "array.title": "阵列", + "array.subtitle": "排成一行或一圈的副本", + "array.targetMany": "{count} 个形状", + "array.cancel": "取消阵列", + "array.helpRow": "选中项按等距重复,可同时沿 X、Y 和 Z 排列(斜向一排、阶梯状)。间距为负时朝反方向排列。", + "array.helpCircle": "选中项围绕中心分布。每份副本升高可形成螺钉,半径变化可形成螺旋。提示:用“设置旋转中心”点击某个面,中心就落在那里。", + "array.helpCirclePivot": "选中项围绕中心分布,该中心来自你设置的旋转中心。", + "array.mode": "布局", + "array.mode.row": "行", + "array.mode.circle": "圆周", + "array.count": "数量(含原件)", + "array.spacingX": "间距 X", + "array.spacingY": "间距 Y", + "array.spacingZ": "间距 Z(高度)", + "array.rise": "每份副本升高", + "array.radiusChange": "每份副本半径变化", + "array.angle": "总角度", + "array.centerX": "中心 X", + "array.centerY": "中心 Y", + "array.rotateCopies": "副本", + "array.rotateCopies.yes": "随圆周转向", + "array.rotateCopies.no": "保持方向", + "array.apply": "创建", + "status.arrayStart": "阵列:设置数量和间距,预览会显示副本", + "status.arrayCancelled": "已取消阵列", + "status.arrayCreated": "已创建阵列:{count} 份副本", + "status.workplaneToolStart": "新建工作平面", + "status.workplaneToolCancelled": "已取消工作平面工具", + "status.workplaneFromFace": "工作平面已设为选中的面", + "status.workplaneReset": "工作平面已重置为基准", + "status.workplaneHidden": "工作平面已隐藏。新建形状仍会落在其上。", + "status.workplaneShown": "已显示工作平面", + "status.workplaneUpdated": "工作平面已更新", + "status.mcpSelectedOne": "MCP 已选中 1 个对象", + "status.mcpSelectedMany": "MCP 已选中 {count} 个对象", + "status.mcpCleared": "MCP 已清除选择", + "status.selectSolidBeforeExport": "导出前至少选择一个实体形状", + "status.addSolidBeforeExport": "导出前添加一个实体形状", + "status.exportedSelectedOne": "已导出 1 个选中的形状", + "status.exportedSelectedMany": "已导出 {count} 个选中的形状", + "status.exportedSelectedAs": "{selected} 导出为 {label}", + "status.exportedAs": "已导出 {label}", + "status.exportHiddenSkippedOne": " (已略过 1 个隐藏部件)", + "status.exportHiddenSkippedMany": " (已略过 {count} 个隐藏部件)", + "status.exportOnlyHidden": "待导出的所有部件均已隐藏。显示它们后再导出。", + "status.exportFailed": "无法导出 {label}", + "status.exportFileFailed": "无法写入 {name}。该文件可能已在其他程序中打开;下次导出 STL 时会重新询问文件。", + "status.stlSavedToFile": "已将 STL 保存到 {name}。除非在导出窗口中使用“另存为”,否则此后导出此设计的 STL 会覆盖该文件。", + "status.exportUnioned": "已保存为 {label},{count} 个重叠实体已合并", + "status.exportUnionFailed": "无法合并重叠的实体,它们在文件中分别存在", + "status.exportSplinters": "未写入文件:切割残留的 {count} 个细小碎片。", + "status.dismiss": "关闭消息", + "export.drawing.label": "工程图", + "export.drawing.description": "前视图、俯视图和右视图,标注总尺寸和圆孔位置,比例为 1:1。", + "export.drawing.note": "下载 SVG 或矢量 PDF。图纸会自动扩展以容纳设计;按 100% / 实际大小打印。孔表仅涵盖与坐标轴对齐的圆孔;斜孔、螺纹、深度和公差不会自动标注。", + "export.drawing.fileFormat": "工程图文件格式", + "status.buildingDrawing": "正在生成工程图…", + "status.exportedDrawing": "已将 1:1 工程图导出为 {format}", + "status.drawingHoleCutFailed": "无法为工程图切除所有孔。导出前请检查孔的几何形状。", + "status.drawingFailed": "无法导出工程图", + "export.drawing.short": "2D", + "drawing.front": "前视", + "drawing.top": "俯视", + "drawing.right": "右视", + "drawing.bores": "圆孔 — 位置以各视图左下角为基准(mm)", + "drawing.id": "编号", + "drawing.view": "视图", + "drawing.diameter": "直径", + "drawing.firstAngle": "第一角投影", + "drawing.customSheet": "自定义图幅", + "drawing.revision": "图号 / 版本", + "drawing.drawnBy": "制图 / 日期", + "drawing.scale": "比例", + "drawing.units": "尺寸单位", + "drawing.sheet": "图幅", + "drawing.notes": "注释", + "drawing.note1": "按 100% / 实际大小打印。", + "drawing.note2": "由网格推导的名义几何。", + "drawing.note3": "仅包含与视图轴线平行的孔。", + "drawing.note4": "螺纹、深度和公差", + "drawing.note5": "不会自动标注。", + "error.drawingTooManyHoles": "此工程图将包含超过 200 个圆孔。请选择更小的零件。", + "error.drawingTooLarge": "1:1 工程图将大于 5,080 mm。请选择更小的零件。", + "error.drawingTooManyTriangles": "工程图各视图合计最多支持 {limit} 个三角面,当前需要 {count} 个。请选择更少或更简单的对象。", + "error.drawingTooManyEdges": "某个视图的边过多,工程图无法容纳。请选择更少或更简单的对象。", + "error.drawingNoGeometry": "此视图没有实体几何。", + "status.exportStepFailed": "无法导出 STEP", + "status.exportStepNothing": "此处没有可写成 STEP 的内容,请改用 STL", + "status.exportStepSkippedList": " · 未包含在 STEP 中:{list}", + "status.exportStepSkippedItem": "“{name}”({reason})", + "status.exportStepSkippedMore": " 以及另外 {count} 个", + "status.exportStepSkip.twist": "此扭曲形状尚无精确形式", + "status.exportStepSkip.deform": "此变形尚无精确形式", + "status.exportStepSkip.mesh": "没有 CAD 来源的网格;以 STEP 导入的部件会一并包含", + "status.exportStepSkip.oval": "椭圆形底面没有精确形式", + "status.exportStepSkip.hole": "孔没有精确形式,未切削", + "status.exportStepSkip.holeCut": "无法切孔,实体将不带孔导出", + "status.exportStepSkip.failed": "CAD 内核无法构建", + "status.exportStepSkip.noExact": "没有精确形式", + "status.packagingShared": "正在打包用于服务器的设计…", + "status.serverSaved": "已保存到服务器", + "status.serverSaveRetry": "暂时无法保存到服务器,将自动重试。", + "status.sharedNoProject": "保存到服务器前先打开一个设计", + "status.serverSaveStopped": "已停止自动保存:设计在服务器上已更改。请重新加载,或以其他名称保存。", + "status.packagingProject": "正在打包可编辑设计、历史记录和去重后的资源…", + "status.savedProject": "已保存可编辑的 layerling 设计(.lyl)", + "status.savedToFile": "已保存到 {name}", + "status.saveFileFailed": "无法写入 {name}。请通过“导出 → 另存为”重新选择文件。", + "status.fileNotWritable": "没有修改 {name} 的权限。请通过“导出 → 另存为”重新选择文件。", + "status.saveProjectFailed": "无法保存 layerling 设计", + "status.importNoneFailed": "无法导入所选的 {total} 个文件中的任何一个。{summary}", + "status.sketchSelectedOne": "已选中 1 个草图项", + "status.sketchSelectedMany": "已选中 {count} 个草图项", + "status.sketchSelectionCleared": "已清除草图选择", + "status.cruisePlace": "点击以放置 {name}。按 Esc 取消。", + "status.carryPlace": "选中项跟随指针:悬停在实体上时会贴到下方的面上。点击放下,按 Esc 取消。", + "status.carryCancelled": "已取消放置", + "status.dragCancelled": "已取消,一切恢复原状", + "status.carryPlaced": "已将 {count} 个部件放置到该面上", + "status.cruiseCancelled": "已取消放置", + "status.shapeAdded": "已添加 {name}", + "status.shapeAddedMcp": "MCP 已添加 {name}", + "status.shapeImportedMcp": "MCP 已导入 {name}", + "status.shapeUpdatedMcp": "MCP 已更新 {name}", + "status.shapeLocked": "“{name}”已锁定", + "status.shapeUnlocked": "“{name}”已解锁", + "status.shapeHidden": "“{name}”已隐藏", + "status.shapeShown": "“{name}”已显示", + "status.alignedOne": "已对齐 1 个形状 {alignment}", + "status.alignedMany": "已对齐 {count} 个形状 {alignment}", + "status.duplicatedOne": "已复制 1 个形状", + "status.duplicatedMany": "已复制 {count} 个形状", + "status.groupedMany": "已分组 {count} 个形状", + "status.cutLeftOpen": "已切割,但切口是开放的:此零件的表面存在缺口({count} 条开放边),因此 layerling 无法将其闭合。以 STL 或 3MF 重新导入该零件可能得到闭合网格。", + "status.bundledMany": "已捆绑 {count} 个形状:它们一起移动,并保留各自的颜色和类型", + "status.selectTwoToBundle": "捆绑前至少选择两个形状", + "status.bundleNotOneBody": "捆绑体不是单个实体。请将其分组(Ctrl+G),或逐个处理其中的部件(按 E 打开)。", + "status.intersectedMany": "已求交 {count} 个形状", + "status.mcpAlignedOne": "MCP 已对齐 1 个对象 {alignment}", + "status.mcpAlignedMany": "MCP 已对齐 {count} 个对象 {alignment}", + "status.mcpDeletedOne": "MCP 已删除 1 个对象", + "status.mcpDeletedMany": "MCP 已删除 {count} 个对象", + "status.mcpGrouped": "MCP 已分组 {count} 个对象", + "status.mcpBundled": "MCP 已捆绑 {count} 个对象", + "status.mcpSeparated": "MCP 已分离 {count} 个部件", + "status.mcpUngroupedOne": "MCP 已取消分组(1 个)", + "status.mcpUngroupedMany": "MCP 已取消分组({count} 个)", + "status.mirroredOne": "已镜像 1 个形状 {axis}", + "status.mirroredMany": "已镜像 {count} 个形状 {axis}", + "status.pastedOne": "已粘贴 1 个形状", + "status.pastedMany": "已粘贴 {count} 个形状", + "status.ungroupedOne": "已取消分组(1 个)", + "status.ungroupedEdgesTakenBack": "已取消分组,边特征已收回(Ctrl+Z 可恢复)", + "status.ungroupedMany": "已取消分组({count} 个)", + "status.exactSketchCreated": "已在 10 mm 高度创建精确草图", + "status.groupedHoleConsumed": "已分组:孔已从实体中挖去材料", + "status.intersectionEmpty": "交集为空", + "status.mcpBooleanCut": "MCP 布尔切割完成", + "status.mcpCutConsumed": "MCP 切割已从实体中挖去材料", + "status.mcpGroupConsumed": "MCP 分组已从实体中挖去材料", + "status.insertedDesign": "已插入 {count} 个来自 {name} 的实体", + "status.insertDesignEmpty": "{name} 没有可插入的实体", + "status.insertDesignFailed": "无法插入 {name}", + "status.revolveUpdated": "旋转已更新", + "status.filletedOne": "已为 1 条边添加圆角", + "status.filletedMany": "已为 {count} 条边添加圆角", + "status.chamferedOne": "已为 1 条边添加倒角", + "status.chamferedMany": "已为 {count} 条边添加倒角", + "status.chamfilletedOne": "已为 1 条边倒角并倒圆", + "status.chamfilletedMany": "已为 {count} 条边倒角并倒圆", + "status.filletedMcpOne": "MCP 为 1 条边添加了圆角", + "status.filletedMcpMany": "MCP 为 {count} 条边添加了圆角", + "status.chamferedMcpOne": "MCP 为 1 条边添加了倒角", + "status.chamferedMcpMany": "MCP 为 {count} 条边添加了倒角", + "inspector.selectionTitle": "已选中 {count} 个部件", + "inspector.selectionMixed": "混合选中:单击一次即可将它们全部设为实体或全部设为孔。", + "inspector.selectionMixedColors": "多种", + "inspector.gearPair": "齿轮对:啮合所需的中心距为 {distance} mm。当前中心距为 {current} mm。", + "inspector.gearPairMismatch": "这两个齿轮无法啮合:模数 {a} 与模数 {b}。需将两者的模数设为相同值。", + "inspector.gearPairInternal": "内齿圈与小齿轮:啮合所需的中心距为 {distance} mm。当前中心距为 {current} mm。", + "inspector.gearPairFit": "将模数设为 {module} 可让它们按当前位置啮合。", + "inspector.gearPairFitApply": "适配两者的模数", + "inspector.gearPairFitHint": "将两个齿轮调整为此模数,使其按当前位置啮合。齿数、高度和中心孔保持不变。", + "status.gearPairFitted": "两个齿轮的模数已设为 {module}。", + "inspector.selectionHint": "颜色、实体或孔以及锁定会应用于每个选中部件。尺寸需在单个部件上通过控制柄或“按百分比缩放”(右键)修改。", + "inspector.shapeMode": "形状模式", + "inspector.solid": "实体", + "inspector.hole": "孔", + "inspector.transparent": "透明", + "inspector.multicolor": "多色", + "inspector.settingsFor": "{name} 设置", + "inspector.expand": "展开设置", + "inspector.minimize": "收起设置", + "inspector.moveHint": "拖动可移动;放到右边缘或双击即可重新停靠", + "inspector.editSketch": "编辑草图", + "inspector.shapeColor": "形状颜色", + "inspector.color": "颜色", + "inspector.customColor": "自定义颜色", + "export.png.description": "视图截图", + "export.png.note": "将当前视图保存为两倍分辨率的图片——不含控制柄、选择框和尺寸。适合用于论坛发帖、打印站点或提问。先旋转并缩放到合适的画面。", + "export.png.scope": "视图", + "export.png.plate": "显示打印平台", + "export.png.transparent": "透明背景", + "status.imageSaved": "视图已保存为图片", + "status.imageFailed": "无法生成视图图片", + "inspector.recentColors": "最近使用", + "inspector.keptColors": "已保留", + "inspector.keepColor": "保留此颜色", + "inspector.unkeepColor": "将此颜色从已保留中移除", + "inspector.keptFull": "已保留 21 种颜色,需先移除一种", + "contextMenu.label": "选中项的命令", + "contextMenu.paste": "粘贴", + "contextMenu.selectAll": "全选", + "contextMenu.selectMultiple": "多选", + "status.selectMultipleStart": "多选:点按实体以添加或移除。点按空白处或按 Esc 完成。", + "status.selectMultipleEnd": "多选已完成", + "contextMenu.showHidden": "显示所有隐藏项", + "contextMenu.toHole": "设为孔", + "contextMenu.toSolid": "设为实体", + "contextMenu.group": "分组", + "contextMenu.ungroup": "取消分组", + "contextMenu.hide": "隐藏", + "contextMenu.lock": "锁定", + "contextMenu.unlock": "解锁", + "contextMenu.drop": "落到工作平面", + "contextMenu.carry": "放置在面上", + "contextMenu.simplify": "简化网格…", + "contextMenu.markCenter": "标记中心", + "contextMenu.markCorners": "标记角点", + "contextMenu.markMidpoints": "标记边中点", + "contextMenu.removeAllPoints": "删除所有参考点({count})", + "contextMenu.deleteKey": "Del", + "inspector.custom": "自定义", + "inspector.wrapCylinder": "包裹到圆柱", + "inspector.wrapDiameter": "直径", + "inspector.wrapInward": "向内(雕刻)", + "inspector.wrapHint": "平放在平台上的形状会立到壁面上:从左到右绕圆柱一圈,后边缘成为顶部。然后将其居中到圆柱上。", + "inspector.wrapInwardHint": "厚度会进入壁内。设为孔并居中后,会在该直径的圆柱上雕刻。", + "inspector.wrapApply": "包裹", + "simplify.title": "简化网格", + "simplify.showTriangles": "显示三角形", + "simplify.before": "之前 · {count} 个三角形", + "simplify.after": "之后 · {count} 个三角形", + "simplify.working": "之后 · 处理中…", + "simplify.hint": "右键拖动可旋转,滚轮可缩放,中键拖动可平移。两个视图会同步移动。", + "simplify.groupNote": "此实体是分组的结果。简化后只保留其网格:编辑分组及其原始部件将不再可用。", + "simplify.keep": "保留", + "simplify.keepPercent": "保留三角形的比例(百分比)", + "simplify.targetTriangles": "保留的三角形数量", + "simplify.triangles": "个三角形", + "simplify.apply": "简化", + "status.meshSimplified": "已从 {before} 个三角形简化为 {after} 个", + "status.mcpSimplified": "MCP 简化了一个网格", + "status.selectOneMeshToSimplify": "选择一个导入的网格进行简化", + "inspector.separateParts": "分离部件", + "inspector.makeEllipse": "设为椭圆", + "inspector.makeEllipseHint": "圆柱体保持正圆。设为椭圆后仍是同一实体,可分别设置长度和宽度。", + "inspector.separatedPartName": "{name} 部件 {index}", + "inspector.keepProportions": "保持比例", + "inspector.properties": "属性", + "inspector.resetProperty": "恢复默认值", + "inspector.saveDefaults": "保存为默认值", + "inspector.saveDefaultsHint": "此类新形状将以此值起始(与设置中的“形状默认值”相同)。", + "inspector.resetDefaults": "重置默认值", + "inspector.resetDefaultsHint": "恢复应用对此类形状的初始值。", + "inspector.position": "位置", + "inspector.rotation": "旋转", + "inspector.pivot": "轴心", + "inspector.pivotRemove": "移除", + "inspector.taper": "锥度", + "inspector.twist": "扭曲与倾斜", + "inspector.teeth": "齿数", + "inspector.helix": "螺旋", + "inspector.snapGrid": "吸附网格", + "inspector.unitsSwitch": "单位:毫米或英寸", + "inspector.objectSnap": "吸附到形状", + "inspector.objectSnapHint": "边和中心会锁定到其他形状。拖动时按住 Alt 可暂停吸附。", + "inspector.gearType": "齿轮类型", + "gear.spur": "直齿轮", + "gear.helical": "斜齿轮", + "gear.herringbone": "人字齿轮", + "gear.bevel": "锥齿轮", + "gear.profileInvolute": "渐开线", + "gear.profileSimple": "简单", + "gear.involuteHint": "分度圆 {pitch} mm。可与模数为 {module} 的任何齿轮啮合;中心距 = 两轮齿数之和 × 模数 / 2。", + "gear.profileRound": "圆弧", + "gear.roundHint": "由圆弧构成的圆齿,小齿轮打印更宽容,用作旋钮时手感顺滑。分度圆 {pitch} mm。可与模数为 {module} 的任何圆齿齿轮啮合;中心距 = 两轮齿数之和 × 模数 / 2。", + "gear.simpleHint": "直齿,仅作外观。需要两个齿轮顺畅啮合时,改用渐开线。", + "gear.internal": "内齿圈", + "gear.rack": "齿条", + "gear.internalHint": "齿朝内。分度圆 {pitch} mm。模数为 {module} 的齿轮可在其内部运转;中心距 =(齿圈齿数 − 齿轮齿数)× 模数 / 2。", + "gear.internalRoundHint": "齿朝内的圆弧齿。分度圆 {pitch} mm。模数为 {module} 的圆齿齿轮可在其内部运转;中心距 =(齿圈齿数 − 齿轮齿数)× 模数 / 2。", + "gear.rackHint": "每齿齿距 {pitchLength} mm;长度为齿数 × 齿距。模数为 {module} 的齿轮可在其上滚动:其中心位于分度线前方 齿数 × 模数 / 2 处,分度线在齿顶后方 {offset} mm。", + "gear.rackRoundHint": "圆弧齿,每齿齿距 {pitchLength} mm;长度为齿数 × 齿距。模数为 {module} 的圆齿齿轮可在其上滚动:其中心位于分度线前方 齿数 × 模数 / 2 处,分度线在齿顶后方 {offset} mm。", + "inspector.threadRole": "类型", + "inspector.threadHead": "头部", + "inspector.thread": "螺纹", + "thread.rod": "螺纹杆", + "thread.screw": "螺钉", + "thread.nut": "螺母", + "thread.bore": "螺纹孔", + "thread.headCylinder": "内六角头", + "thread.headCountersunk": "沉头", + "thread.headHex": "六角头", + "thread.right": "右旋", + "thread.left": "左旋", + "thread.profileV": "V 形螺纹(ISO)", + "thread.profileTrapezoidal": "梯形", + "thread.profileRound": "圆形", + "thread.profileWhitworth": "惠氏螺纹(55°)", + "thread.profileCustom": "自定义(梯形)", + "thread.customSize": "自定义", + "thread.group.metric": "M – 公制粗牙", + "thread.group.UNC": "UNC – 美制英寸粗牙", + "thread.group.UNF": "UNF – 美制英寸细牙", + "thread.group.G": "G – 管螺纹", + "thread.hint.metric": "ISO 公制粗牙螺纹(ISO 261),与标准螺钉和螺母一致。", + "thread.hint.UNC": "例如相机和三脚架螺钉 1/4\"-20(ISO 1222),较大的脚架云台为 3/8\"-16。", + "thread.hint.UNF": "直径与 UNC 相同,螺距更细(ASME B1.1)。", + "thread.hint.G": "例如淋浴软管 G1/2、洗衣机 G3/4、卡扣接头花园龙头 G3/4(小型为 G1/2)。", + "shape.box": "长方体", + "shape.roundedBox": "圆角长方体", + "shape.cylinder": "圆柱体", + "shape.slot": "胶囊", + "shape.ellipse": "椭圆", + "shape.sphere": "球体", + "shape.cone": "圆锥", + "shape.pyramid": "棱锥", + "shape.wedge": "楔形", + "shape.text": "文字", + "shape.nameTag": "名牌", + "shape.roundRoof": "圆形屋顶", + "shape.halfSphere": "半球", + "shape.torus": "圆环", + "shape.tube": "管", + "shape.bentTube": "弯管", + "shape.loft": "放样", + "shape.star": "星形", + "shape.heart": "心形", + "shape.crescent": "月牙", + "shape.gear": "齿轮", + "shape.honeycomb": "蜂窝", + "shape.hinge": "铰链", + "shape.knurl": "滚花", + "shape.dovetail": "燕尾", + "shape.teardrop": "泪滴孔", + "shape.counterbore": "沉孔", + "shape.countersink": "锥形沉孔", + "shape.doubleCountersink": "双面锥形沉孔", + "shape.thread": "螺纹", + "shape.spring": "弹簧", + "shape.gridfinity": "Gridfinity", + "shape.polygon": "多边形", + "shape.ruler": "标尺", + "shape.group": "分组", + "shape.bundle": "捆绑", + "inspector.bundleNote": "捆绑只是把部件固定在一起:每个部件保留自己的颜色和类型,孔不挖任何东西,导出时每个部件都是独立实体。按 E 可打开编辑,Ctrl+Shift+G 可取消捆绑。", + "shape.intersection": "交集", + "shape.importedMesh": "导入的网格", + "shape.sketchExtrusion": "草图实体", + "shape.sketchRevolve": "旋转实体", + "shape.threadMenu": "螺纹\n螺钉\n螺母", + "shape.basicShapes": "形状", + "shapeMenu.moveHint": "拖动标题栏可移动此面板;双击可将其放回按钮下方", + "shapeMenu.keepOpen": "放置形状时保持打开", + "shapeMenu.keepOpenOn": "保持打开,直到取消固定", + "shapeMenu.resize": "调整形状库大小", + "shapeMenu.resizeHint": "拖动边缘或角可调整大小;双击恢复原状。变窄时只显示图片", + "myShapes.title": "自定义形状", + "myShapes.basicShapes": "基础形状", + "myShapes.saveSelection": "保存选中项", + "myShapes.saveSelectionHint": "将选中的实体保存在此处,以便在任何设计中再次插入", + "myShapes.selectFirst": "先选择要保存的实体", + "myShapes.nameLabel": "名称", + "myShapes.defaultName": "自定义形状", + "myShapes.empty": "选择一个或多个实体,然后选择“保存所选”。它们会留在这里,供每个设计使用。", + "myShapes.insertHint": "点击插入,或拖到工作平面上", + "myShapes.deleteConfirm": "删除?", + "myShapes.backup": "备份自定义形状", + "myShapes.backupHint": "备份此浏览器中的自定义形状:全部存入一个 ZIP 文件,供其他浏览器或电脑使用", + "myShapes.load": "载入形状", + "myShapes.loadHint": "将形状载入此浏览器:从备份 ZIP 或 .lyl 设计载入", + "myShapes.onServer": "服务器上", + "myShapes.inBrowser": "此浏览器中", + "myShapes.locationLabel": "保存在", + "myShapes.groupEmpty": "还没有", + "myShapes.moveToServer": "放到服务器", + "myShapes.newFolder": "新建文件夹", + "myShapes.newFolderHint": "新建文件夹以整理自定义形状", + "myShapes.folderNameLabel": "文件夹名称", + "myShapes.createFolder": "创建", + "myShapes.folderLabel": "文件夹", + "myShapes.noFolder": "无文件夹", + "myShapes.moveToFolder": "移到文件夹", + "myShapes.renameFolder": "重命名文件夹", + "myShapes.deleteFolder": "删除文件夹", + "myShapes.deleteFolderConfirm": "连同内容一起删除({count} 项)?", + "myShapes.folderEmpty": "此文件夹为空", + "myShapes.newSubfolder": "在其中新建文件夹", + "status.myShapeSaved": "“{name}”已保存在此浏览器的自定义形状中", + "status.myShapeSavedServer": "“{name}”已保存在服务器上的自定义形状中", + "status.myShapeMovedToServer": "“{name}”现在位于服务器上", + "status.myShapeFolderCreated": "已创建文件夹“{name}”", + "status.myShapeFolderDeleted": "文件夹“{name}”已连同其中的形状删除", + "status.myShapeMovedToFolder": "“{name}”已移到“{folder}”", + "status.myShapeMovedOutOfFolder": "“{name}”已不在任何文件夹中", + "status.myShapeNameTakenInFolder": "已有名为“{name}”的自定义形状位于“{folder}”中;请先重命名其中一个", + "status.myShapeNameTaken": "服务器上已有名为“{name}”的自定义形状;请另选一个名称", + "status.myShapeGone": "此形状已不存在;列表已刷新", + "status.myShapeInserted": "已插入“{name}”", + "status.myShapeDeleted": "“{name}”已从自定义形状中移除", + "status.myShapesNoneToBackUp": "还没有可备份的形状", + "status.myShapesBackedUp": "已备份 {count} 个形状", + "status.myShapesLoaded": "已将 {count} 个形状添加到自定义形状", + "status.myShapesLoadedSkipped": "已将 {count} 个形状添加到自定义形状;{skipped} 个已存在", + "status.myShapesLoadFailed": "已添加 {count} 个形状;无法读取:{names}", + "prop.length": "长度", + "prop.width": "宽度", + "prop.height": "高度", + "prop.textHeightHint": "厚度,从平台向上", + "prop.bevel": "斜角", + "prop.topRadius": "顶部半径", + "prop.baseRadius": "底部半径", + "prop.thickness": "厚度", + "prop.outerDiameter": "外径", + "prop.innerDiameter": "内径", + "prop.toothSize": "齿尺寸", + "prop.toothWidth": "齿宽", + "prop.gearProfile": "齿形", + "prop.gearModule": "模数(mm)", + "prop.gearPressureAngle": "压力角", + "prop.gearBacklash": "齿隙", + "prop.gearRim": "轮缘", + "prop.centerHole": "中心孔", + "prop.topLength": "顶部长度", + "prop.loftBottomOutline": "底部轮廓", + "prop.loftTopOutline": "顶部轮廓", + "prop.loftBottomWidth": "底部宽度", + "prop.loftBottomDepth": "底部长度", + "prop.loftTopWidth": "顶部宽度", + "prop.loftTopDepth": "顶部长度", + "prop.loftBottomCorner": "底部圆角半径", + "prop.loftTopCorner": "顶部圆角半径", + "prop.loftBottomSides": "底部角数", + "prop.loftTopSides": "顶部角数", + "prop.loftOffsetX": "顶部宽度方向偏移", + "prop.loftOffsetZ": "顶部长度方向偏移", + "prop.loftWall": "壁厚(0 = 实心)", + "prop.loftSmooth": "平滑过渡(%)", + "loft.smoothHint": "0 为直线收缩,如同圆锥。100 则形成 S 形曲线:两侧从两端竖直伸出,并在中间改变尺寸,如同从细管平滑扩到粗管的软管接头。", + "prop.loftTwist": "扭转", + "prop.sketchFill": "填充", + "prop.sketchFill.area": "面积", + "prop.sketchFill.outside": "描边在外", + "prop.sketchFill.inside": "描边在内", + "prop.sketchFill.center": "描边居中", + "prop.sketchFill.grow": "加宽", + "prop.sketchFill.shrink": "收窄", + "prop.sketchFill.shrinkHint": "填充形状的边缘四周内缩一个线宽——可用作配合间隙,或从同一草图切出内壁。", + "prop.sketchFill.growHint": "填充形状四周外扩一个线宽——可用作多色打印中文字或标志下方的底层。", + "nameTag.title": "名牌", + "nameTag.defaultText": "名字", + "nameTag.makeLayers": "生成分层", + "nameTag.makeLayersHint": "将文字变成名牌:字母在上,下方是彩色分层,每层稍宽。", + "nameTag.cardHint": "字母在上,下方每一行是一层,各有自己的颜色。每次更改都会立即显示。", + "nameTag.letterSize": "字母大小", + "nameTag.letterSizeHint": "从上方看,平台上大写字母的高度。", + "nameTag.layers": "分层", + "nameTag.addLayer": "在底部添加一层", + "nameTag.removeLayer": "移除底层", + "nameTag.color": "颜色", + "nameTag.wider": "加宽量({unit})", + "nameTag.height": "高度({unit})", + "nameTag.noHoles": "无孔", + "nameTag.corners": "角", + "nameTag.corner.round": "圆角", + "nameTag.corner.bevel": "斜角", + "nameTag.corner.miter": "尖角", + "nameTag.letterEdge": "字母边缘", + "nameTag.edge.none": "无", + "nameTag.edge.round": "圆角", + "nameTag.edge.chamfer": "倒角", + "nameTag.letterEdgeSize": "边缘尺寸", + "nameTag.keyring": "钥匙环孔", + "nameTag.keyringDiameter": "孔径", + "nameTag.keyringSide": "侧边", + "nameTag.side.left": "左侧", + "nameTag.side.right": "右侧", + "nameTag.side.top": "顶部", + "nameTag.keyringAlong": "沿侧边位置", + "nameTag.keyringAlongHint": "让挂耳沿所在侧边上下移动,例如对准向外伸出的字母。0 为中间。", + "nameTag.keyringAlongHintTop": "让挂耳沿顶部左右移动。0 为中间。", + "nameTag.side.free": "自由", + "nameTag.side.freeHint": "将钥匙环孔放到名牌旁独立的挂耳上:像其他形状一样移动和旋转,再就地固定到名牌上。", + "nameTag.keyringTab": "钥匙环挂耳", + "nameTag.keyringTabFix": "固定到名牌", + "nameTag.keyringTabFixHint": "将挂耳就地并入最近的名牌:孔会穿过每一层,文字或尺寸改变时挂耳仍随名牌。选择“自由”可再次将其分离。", + "nameTag.letters": "字母", + "nameTag.makeTags": "生成 {count} 个名牌", + "nameTag.makeTagsOne": "生成 1 个名牌", + "nameTag.makeTagsNone": "生成名牌", + "nameTag.bundleNote": "每一层都是独立的实体,各有自己的颜色。要圆角或斜切某一层的边缘,请打开捆绑。", + "shape.iconTag": "图标牌", + "iconTag.title": "图标牌", + "iconTag.hint": "选择一个 SVG、PNG 或 JPG 文件:图标会像名牌那样变成分层挂牌。", + "iconTag.browse": "浏览…", + "iconTag.noFile": "尚未选择文件", + "iconTag.preview": "预览", + "iconTag.width": "宽度(mm)", + "iconTag.widthHint": "图标的宽度,{min} 至 {max} mm。", + "iconTag.ok": "确定", + "iconTag.building": "正在生成…", + "iconTag.unreadable": "此 SVG 无法生成图标牌:它需要闭合轮廓。", + "iconTag.cardHint": "图标在上,下方每一行是一层,各有自己的颜色。每次更改都会立即显示。", + "iconTag.icon": "图标", + "iconTag.iconWidth": "宽度", + "iconTag.iconWidthHint": "从上方看,顶部图标的宽度。", + "iconTag.makeLayersHint": "将轮廓变成图标牌:图标在上,下方是彩色分层,每层稍宽。", + "iconTag.count": "数量", + "iconTag.countHint": "要多少个挂牌,1 至 100,排列在平台中央。", + "iconTag.fill": "放得下多少就多少", + "iconTag.fitsNone": "平台上连一个挂牌也放不下。", + "iconTag.makeTags": "生成 {count} 个挂牌", + "iconTag.replace": "另一个文件…", + "iconTag.part": "描摹依据", + "iconTag.part.dark": "深色部分", + "iconTag.part.light": "浅色部分", + "iconTag.partHint": "图片会被描摹成轮廓。选择其中哪一部分作为图标。", + "status.iconReplaced": "图标已替换为“{name}”", + "status.iconLayered": "图标已分成 {count} 层", + "status.iconLayersUpdated": "分层已更新", + "status.iconTagsMade": "已生成 {count} 个挂牌", + "status.iconTagAdded": "已添加图标牌“{name}”", + "shape.qrCode": "二维码", + "shape.qrPlate": "二维码底板", + "qrCode.title": "二维码", + "qrCode.hint": "输入文字或网址。它会变成可打印的二维码,可单独打印或放在底板上。", + "qrCode.text": "文字或网址", + "qrCode.count": "已用 {used} / {max} 字节", + "qrCode.tooLong": "太长:{used} / {max} 字节。缩短文字或选择更低的纠错级别。", + "qrCode.enterHint": "Enter 生成二维码,Shift+Enter 换行。", + "qrCode.noText": "为二维码输入文字。", + "qrCode.failed": "无法生成二维码。", + "qrCode.preview": "预览", + "qrCode.errorCorrection": "纠错级别", + "qrCode.errorCorrectionHint": "级别越高,二维码部分脏污或损坏时仍能读取,但需要更多模块。", + "qrCode.recovery": "二维码损坏 {percent} % 时仍可读取", + "qrCode.style": "构建方式", + "qrCode.styleHint": "放在底板上时,二维码可以用自己的颜色凸起,用于多色打印,也可以刻入底板。", + "qrCode.style.code": "仅二维码", + "qrCode.style.raised": "在底板上凸起", + "qrCode.style.engraved": "雕刻", + "qrCode.sizeBy": "尺寸依据", + "qrCode.sizeBy.width": "宽度", + "qrCode.sizeBy.module": "模块尺寸", + "qrCode.width": "宽度(mm)", + "qrCode.moduleSize": "模块尺寸(mm)", + "qrCode.moduleInfo": "单个模块:{size} mm({count} × {count} 个模块)", + "qrCode.widthInfo": "宽度:{width} mm({count} × {count} 个模块)", + "qrCode.widthHint": "宽度 {min} 至 {max} mm。", + "qrCode.moduleSmall": "小于 0.8 mm 的模块难以清晰打印——这只是经验法则,并非保证。请把二维码加大、缩短文字或降低纠错级别。", + "qrCode.quietZone": "静区(4 个模块)", + "qrCode.quietZoneHint": "扫描器在二维码周围需要的空白边缘:这里即底板的边缘。", + "qrCode.quietZoneAlone": "不带底板的二维码没有自己的边缘:请在四周留出 4 个模块的空白。", + "qrCode.height": "高度(mm)", + "qrCode.heightRaised": "二维码高度(mm)", + "qrCode.heightEngraved": "雕刻深度(mm)", + "qrCode.tooDeep": "雕刻深度必须比底板至少浅 0.2 mm。", + "qrCode.plateThickness": "底板厚度(mm)", + "qrCode.ok": "确定", + "qrCode.building": "正在生成…", + "qrCode.cardHint": "修改文字后重新生成二维码。它会保持原来的位置和宽度。", + "qrCode.regenerate": "重新生成", + "status.qrCodeAdded": "已添加二维码", + "status.qrCodeRegenerated": "二维码已重新生成", + "inspector.more": "更多", + "inspector.less": "更少", + "prop.textFill": "填充", + "prop.textFill.filled": "实心", + "prop.textFill.outline": "轮廓", + "prop.textFill.outer": "外轮廓线", + "prop.textFill.inner": "内轮廓线", + "prop.textWider": "加宽(多色打印底座)", + "textLayers.layer": "第 {number} 层", + "textLayers.grow": "加宽量", + "textLayers.names": "姓名列表", + "textLayers.namesHint": "每行一个姓名,最多 100 个:每个姓名生成一个与这个相同的名牌,按行排在下方。", + "textLayers.namesPlaceholder": "安娜\n小明\n小红", + "status.textLayered": "文本已分成 {count} 层", + "status.textLayersUpdated": "分层已更新", + "status.keyringTabMade": "已单独生成一个钥匙环挂片,就在名牌旁边:像其他形状一样移动并旋转到位,然后在其面板中按“固定到名牌”。", + "status.keyringTabFixed": "钥匙环挂片已按你放置的位置成为名牌的一部分。", + "status.keyringTabNoTag": "没有可固定钥匙环挂片的名牌或图标牌。", + "status.textTagsMade": "已生成 {count} 个名牌", + "status.mcpTextLayered": "MCP 已将文本分成 {count} 层", + "status.mcpTextTagsMade": "MCP 已生成 {count} 个名牌", + "prop.textFillHint": "倒角和分段仅适用于填充字母;填充模式或剪影会将字母画成平面。", + "prop.sketchLineWidth": "线宽", + "prop.sketchSilhouette": "剪影(无孔)", + "prop.slotSmallEnd": "小端(直径)", + "prop.slotCentreDistance": "中心距", + "prop.loftTiltX": "顶部倾斜,前/后", + "prop.loftTiltZ": "顶部倾斜,左/右", + "loft.round": "圆 / 椭圆", + "loft.rectangle": "矩形", + "loft.polygon": "多边形", + "prop.topWidth": "顶部宽度", + "prop.bottomLength": "底部长度", + "prop.bottomWidth": "底部宽度", + "prop.positionX": "X", + "prop.positionY": "Y", + "prop.positionZ": "Z(高度)", + "prop.rotateX": "绕 X 轴", + "prop.rotateY": "绕 Y 轴", + "prop.rotateZ": "绕 Z 轴(高度)", + "prop.pivotX": "轴心 X", + "prop.pivotY": "轴心 Y", + "prop.pivotZ": "轴心 Z(高度)", + "prop.twist": "扭转", + "prop.widthOffset": "宽度偏移", + "prop.tiltedMeasures": "实体已倾斜:长度、宽度和高度是它自身的尺寸,而非空间方向上的尺寸。", + "prop.lengthOffset": "长度偏移", + "font.manage": "你自己的字体…", + "font.customGroup": "你自己的字体", + "font.builtInGroup": "内置", + "font.missing": "缺少字体", + "font.title": "你自己的字体", + "font.subtitle": "用于文本:字体文件或电脑中已安装的字体", + "font.close": "关闭你自己的字体", + "font.addFile": "选择字体文件…", + "font.addFileHint": "TrueType(.ttf)、OpenType(.otf)或 WOFF(.woff)。字体会保存在此浏览器中。", + "font.fromSystem": "从电脑中选择字体…", + "font.systemSearch": "搜索字体", + "font.systemUnsupported": "只有电脑上的 Chrome 和 Edge 能读取已安装的字体。请选择字体文件,或将其拖到这里。在 Windows 上,文件对话框会隐藏 Fonts 文件夹,此时请从资源管理器把字体拖过来。在 Mac 上,字体位于 /Library/Fonts 和 ~/Library/Fonts。", + "font.dropHint": "或将字体文件拖到这里,也可直接从资源管理器的 Fonts 文件夹拖入。", + "font.systemNeedsHttps": "浏览器仅在安全页面(如 layerling.com 上的 https)提供已安装字体。此页面通过 http 运行。请改为从资源管理器的 Fonts 文件夹将字体拖到这里。", + "font.systemDenied": "浏览器未被允许读取已安装的字体。请在站点设置中允许,或选择字体文件。", + "font.systemMore": "还有 {count} 个 – 请缩小搜索范围。", + "font.reading": "正在读取字体…", + "font.added": "已添加字体“{name}”", + "font.use": "使用", + "font.remove": "从此浏览器移除", + "font.removed": "“{name}”已不在此浏览器中。设计会保留其文本用到的字母。", + "font.stored": "在此浏览器中", + "font.fromDesign": "仅设计用到的字母", + "font.none": "还没有你自己的字体。", + "font.licence": "设计只保留其文本所用字母的轮廓,从不包含字体文件。转交他人前,请检查字体的许可。", + "font.usedOnText": "将字体“{name}”应用到文本", + "font.error.font-too-large": "文件大于 40 MB。", + "font.error.font-woff2": "layerling 无法读取 WOFF2。请改用字体的 TTF 或 OTF 版本。", + "font.error.font-collection": "这是字体集合(.ttc)。请选择单个字体文件。", + "font.error.font-unreadable": "该文件不是可读取的字体。", + "font.error.font-no-letters": "该字体没有 layerling 能绘制的字母。", + "font.error.generic": "无法添加字体:{message}", + "prop.font": "字体", + "prop.text": "文本", + "prop.textCurved": "沿圆弧", + "prop.textSpacing": "字距(%)", + "prop.textSpacingHint": "在字体自带间距之上额外增加的字母间距,以字母大小的百分比表示;小于 0 则更紧。字母大小不变,外框随之调整。", + "prop.textStretch": "将字母拉伸到外框", + "prop.textRadius": "圆弧半径", + "prop.textInward": "沿底部", + "prop.textFlipped": "上下翻转", + "prop.segments": "分段", + "prop.sidesFollowSize": "边数随尺寸变化", + "prop.sides": "边数", + "prop.steps": "步数", + "prop.torusSides": "环向边数", + "prop.torusSteps": "管向步数", + "prop.teeth": "齿数", + "prop.helixAngle": "螺旋角", + "prop.quality": "质量", + "prop.turns": "圈数", + "prop.wire": "线径", + "prop.springHand": "旋向", + "spring.right": "右旋", + "spring.left": "左旋", + "prop.threadSize": "规格", + "prop.diameter": "直径", + "prop.pitch": "螺距", + "prop.threadHand": "方向", + "prop.threadProfile": "牙型", + "prop.threadFlankAngle": "牙侧角", + "prop.threadDepth": "螺纹深度", + "prop.threadCoreDiameter": "芯径", + "thread.flankAngleHint": "单个牙两侧牙面之间的夹角。60° 是尖 V 形螺纹,30° 是梯形螺纹。在 90° 或更小的情况下,没有任何牙面比 45° 更平缓,因此螺纹无需支撑即可打印。", + "prop.clearance": "间隙(XY)", + "prop.threadChamferTop": "倒角,顶端", + "prop.threadChamferBottom": "倒角,底端", + "thread.axialClearanceHint": "沿螺纹方向的额外活动量(mm),在间隙之上叠加:螺母的每个牙会变薄这么多,而直径保持不变。若想让螺纹转动顺畅又不左右晃动:把间隙保持在 0.2 到 0.3 左右,并在此处设为 0.2。设为 0 时,活动量仅来自间隙,而间隙对牙面的张开只有大约一半的效果。", + "thread.clearanceHint": "整个直径上的额外余量。打印螺纹需要的余量比想象中更多:牙面之间的间隙大约只有它的一半。0.3 左右偏紧,0.4 常见,0.5 偏松。建议先打印一对测试。", + "thread.boltClearanceHint": "让螺栓变细这么多,用于本身没有活动量的金属螺母(0.3 到 0.4,与打印螺母原本会有的余量相当)。搭配打印螺母时请保持为 0,把余量留给螺母。", + "prop.boltClearance": "用于杆件和螺钉的间隙", + "prop.axialClearance": "沿轴向(Z)的活动量", + "prop.headHeight": "头部高度", + "prop.chamfer": "倒角", + "prop.headChamfer": "头部倒角", + "prop.rimChamfer": "边缘倒角", + "prop.threadsPerInch": "每英寸牙数", + "prop.startAngle": "起始角度", + "prop.sweep": "扫掠", + "prop.starPoints": "角数", + "prop.starOuterSize": "外径", + "prop.starInnerSize": "内径", + "prop.starOuterFillet": "外圆角", + "prop.starInnerFillet": "内圆角", + "prop.heartTipFillet": "尖端圆角", + "prop.crescentThickness": "厚度", + "prop.crescentTipFillet": "尖端圆角", + "prop.honeycombCellSize": "单元尺寸", + "prop.honeycombWallThickness": "壁厚", + "prop.honeycombFrameWidth": "边框宽度", + "prop.dovetailWideEnd": "宽度(宽端)", + "prop.dovetailNeckWidth": "颈部宽度", + "prop.dovetailLength": "尾部长度", + "prop.dovetailClearance": "作为孔时的间隙", + "prop.hingeLength": "长度(轴向)", + "prop.hingeOpenWidth": "展开宽度", + "prop.hingeKnuckleDiameter": "铰链节直径", + "prop.hingeKnuckles": "铰链节数", + "prop.hingePinDiameter": "销直径", + "prop.hingeLeafThickness": "叶片厚度", + "prop.hingePinless": "无销(使用自备销)", + "prop.hingeAngle": "开合角度", + "prop.hingeClearance": "间隙", + "prop.gridfinityType": "类型", + "gridfinity.bin": "收纳盒", + "gridfinity.baseplate": "底板", + "gridfinity.binHint": "42 mm Gridfinity 网格上的收纳盒:可放在底板上,也能堆叠在其他收纳盒上,包括用其他 Gridfinity 生成器做出的盒子。", + "gridfinity.baseplateHint": "Gridfinity 收纳盒所放置的底板,高 5 mm:每 42 mm 网格单元对应一个插槽。", + "prop.gridfinityUnitsX": "横向单元数", + "prop.gridfinityUnitsZ": "纵向单元数", + "prop.gridfinityUnitsY": "高度单元数", + "prop.gridfinityLip": "堆叠卡边", + "prop.gridfinityMagnets": "磁铁孔", + "prop.gridfinityHalfGrid": "半尺寸网格(21 mm)", + "gridfinity.halfGridHint": "横向和纵向单元按 21 mm 的格子计数,每个格子都有自己的底脚;四个格子正好放进底板的一个插槽。", + "prop.gridfinityFloorHeight": "底部高度", + "gridfinity.floorHeightHint": "收纳盒从底面向上到这个高度为实心,可作为挖出形状的坯料。", + "prop.gridfinityLabelBack": "后侧标签台", + "prop.gridfinityLabelFront": "前侧标签台", + "prop.gridfinityLabelLeft": "左侧标签台", + "prop.gridfinityLabelRight": "右侧标签台", + "prop.gridfinityLabelWidth": "标签台宽度", + "prop.gridfinityLabelLength": "标签台长度", + "gridfinity.labelLengthHint": "0 表示标签台从一侧壁延伸到另一侧壁。", + "prop.gridfinityLabelOffset": "标签台位置", + "prop.gridfinityLabelCorner": "标签台拐角", + "gridfinity.labelRound": "圆角", + "gridfinity.labelChamfer": "倒角", + "prop.gridfinityLabelCornerSize": "拐角尺寸", + "prop.gridfinityScoopBack": "后侧取物口", + "prop.gridfinityScoopFront": "前侧取物口", + "prop.gridfinityScoopLeft": "左侧取物口", + "prop.gridfinityScoopRight": "右侧取物口", + "prop.gridfinityScoopRadius": "取物口半径", + "prop.gridfinityCompartmentsX": "列数", + "prop.gridfinityCompartmentsZ": "行数", + "gridfinity.compartmentsHint": "隔板在标签台处停止,避开叠放在上面的收纳盒;每个隔间至少保持 6 mm 宽。", + "prop.gridfinityDividerThickness": "隔板厚度", + "gridfinity.scoopsLeftOutHint": "太窄放不下取物口的隔间将不设取物口。", + "inspector.gridfinityCompartments": "隔间", + "prop.gridfinityDividerAcross": "列之间", + "prop.gridfinityDividerDeep": "行之间", + "prop.gridfinityDividerPosition": "位置", + "gridfinity.dividerPositionHint": "从左侧或后侧壁的内表面量到隔板中线。", + "prop.gridfinityCompartmentRow": "行", + "prop.gridfinityCompartmentColumn": "列", + "gridfinity.fromLeft": "左起第 {number} 个", + "gridfinity.fromBack": "后起第 {number} 个", + "prop.gridfinityCompartmentLabel": "标签台", + "gridfinity.labelNone": "无", + "gridfinity.labelSideBack": "后侧", + "gridfinity.labelSideFront": "前侧", + "gridfinity.labelSideLeft": "左侧", + "gridfinity.labelSideRight": "右侧", + "prop.gridfinityCompartmentLabelLength": "标签台长度(%)", + "gridfinity.compartmentLabelLengthHint": "100 表示标签台占满所在边的全长。", + "gridfinity.compartmentLabelTooShortHint": "此标签台短于 4 mm,将被略过。", + "gridfinity.alignLeft": "左", + "gridfinity.alignMiddle": "居中", + "gridfinity.alignRight": "右", + "gridfinity.alignBack": "后", + "gridfinity.alignFront": "前", + "prop.knurlPattern": "图案", + "prop.knurlCount": "槽数", + "prop.knurlDepth": "槽深", + "prop.knurlAngle": "槽角度", + "prop.knurlChamfer": "两端倒角", + "knurl.straight": "直纹", + "knurl.diamond": "交叉", + "knurl.round": "圆形", + "knurl.roundHint": "圆形沟槽与凸纹如波浪起伏,握持旋钮很舒适。深度始终小于半个节距。", + "knurl.straightHint": "沿轴线的沟槽,如调节旋钮上的滚花。", + "knurl.diamondHint": "两排倾斜的沟槽交叉成小菱形,如工具手柄上的滚花。仍为网格;边工具仅适用于直纹滚花。", + "prop.screwHoleHead": "头部直径", + "prop.screwHoleShaft": "杆部直径", + "prop.screwHoleHeadDepth": "头部深度", + "prop.screwHoleAngle": "锥角", + "prop.screwHoleBothSides": "两侧", + "prop.screwHoleLength": "总长度", + "prop.teardropDiameter": "直径(圆部)", + "prop.teardropLength": "孔长度", + "prop.teardropTipAngle": "尖端角度", + "prop.cornerFillet": "拐角圆角", + "prop.topBottomFillet": "上/下圆角", + "prop.bentTubeProfile": "截面", + "prop.bentTubeInnerProfile": "内截面", + "prop.bentTubeSize": "外形尺寸", + "prop.bentTubeWall": "壁厚", + "prop.bentTubeSegment": "分段", + "prop.bentTubeSegmentLength": "直段长度", + "prop.bentTubeBendAngle": "弯曲角度", + "prop.bentTubeBendRadius": "弯曲半径", + "prop.bentTubeRoll": "滚转角", + "bentTube.profileRound": "圆形", + "bentTube.profileSquare": "方形", + "bentTube.profileHexagon": "六边形", + "bentTube.profileOctagon": "八边形", + "bentTube.innerNone": "无(实心)", + "bentTube.segmentNumber": "分段 {number}", + "bentTube.addSegment": "添加分段", + "bentTube.removeSegment": "移除分段", + "bentTube.selfIntersects": "管子与自身相交。更改某个长度、角度或滚转角。", + "inspector.bentTubeSegments": "分段", + "panel.export": "导出", + "panel.import": "导入", + "panel.close": "关闭{title}", + "export.formatLabel": "导出格式", + "export.format": "格式", + "export.fileName": "文件名", + "export.fullProject": "完整设计", + "export.scopeSelected": "已选中 {count} 个", + "export.selectionOnlyOne": "仅导出选中的对象,而不是包含 {total} 个对象的整个设计。", + "export.selectionOnlyMany": "仅导出选中的 {count} 个对象,而不是包含 {total} 个对象的整个设计。", + "export.selectAll": "全选", + "export.scopeTotal": "共 {count} 个", + "export.holesOnlyWarning": "孔无法单独导出,需将其与实体分组。", + "export.hiddenOne": "已略过 1 个隐藏部件。若要一并导出,请将其显示。", + "export.hiddenMany": "已略过 {count} 个隐藏部件。若要一并导出,请将其显示。", + "export.estimateTitle": "材料", + "export.estimateHint": "粗略估算,按 1.75 mm 耗材计算。", + "export.estimateInfillLabel": "填充率", + "export.estimateWallsLabel": "壁数", + "export.estimateInfill": "重量和耗材用量按 {walls} 层壁、{infill} % 填充率计算,仅为粗略估计——最终取决于切片软件的设置。若为实心(100 % 填充),则为 {grams} g。", + "export.estimateSolidNote": "按实心实体计算,相当于以 100 % 填充打印,为上限值。", + "export.estimateMaterial": "用于重量估算的耗材", + "export.estimateVolume": "体积", + "export.estimateWeight": "重量", + "export.estimateFilament": "耗材", + "export.estimateBusy": "正在计算 …", + "export.estimateOverlap": "部分重叠的实体无法合并,重叠部分会被重复计算。", + "export.material.pla": "PLA", + "export.material.petg": "PETG", + "export.material.abs": "ABS", + "export.material.asa": "ASA", + "export.material.tpu": "TPU", + "export.material.pa": "PA(尼龙)", + "export.historyTitle": "保存的操作历史", + "export.historyHint": "选择随设计一起保存的近期撤销操作数量", + "export.historyLabel": "保存的 LYL 操作历史", + "export.unlimited": "不限", + "export.historyNone": "无", + "export.actionCount": "{count} 个操作", + "export.saveToShared": "保存到服务器", + "export.savingProject": "正在保存设计…", + "export.saveProject": "保存 layerling 设计", + "export.buildingStep": "正在生成 STEP…", + "export.run": "导出 {format}", + "export.stl.description": "3D 打印网格", + "export.stl.note": "最适合切片软件和 3D 打印。几何体以三角网格导出。在 Chrome 和 Edge 中只需选择一次文件夹和名称;此后导出该设计的 STL 会写入该文件,除非你输入其他名称:那样会再次询问。", + "export.stlLinkedFile": "保存到 {name}", + "export.stlNewFile": "询问 {name} 的保存位置", + "export.stlSaveAs": "另存为…", + "export.3mf.description": "带颜色的切片工程", + "export.3mf.note": "适用于 PrusaSlicer、Bambu Studio、OrcaSlicer 和 Cura。每个实体都保留为独立部件,并保留名称和颜色。", + "export.obj.description": "通用 3D 网格", + "export.obj.note": "兼容性广的网格格式,用于建模、渲染和数据交换。颜色存储在顶点上,Bambu Studio 和 OrcaSlicer 可读取。", + "export.step.description": "CAD / B-Rep", + "export.step.note": "将长方体、圆柱体、球体和圆锥体保留为精确的 CAD 几何体,边缘做过圆角或倒角的物体以及以 STEP 导入的实体也一样。螺纹、弹簧和齿轮也按精确实体导出。锥形、倾斜和扭曲的形状同样精确导出。而导入的网格等则超出 STEP 的能力——这类会以 STL 导出。", + "export.svg.description": "俯视矢量图", + "export.svg.note": "导出干净的俯视剪影,单位为毫米,包含孔和曲线轮廓。", + "export.svg.noteFootprint": "仅导出物体在工作平面上的着地轮廓,以毫米为单位的线条,用于激光切割和模板。", + "export.svg.view": "视图", + "export.svg.viewSilhouette": "俯视剪影", + "export.svg.viewFootprint": "工作平面上的着地轮廓", + "export.lyl.description": "layerling 自有的设计格式", + "export.lyl.note": "保留可编辑的设计、撤销/重做历史、草图、分组、CAD 数据和导入的源文件。较早的 .skf 文件也能打开,并会保存为 .lyl。在 Chrome 和 Edge 中由你自行选择文件夹和名称,之后按 Ctrl+S 会再次保存到该文件;从文件打开的设计会保存回原文件。", + "import.openProject": "打开 layerling 设计", + "import.openProjectHint": "将 layerling 设计(.lyl,或较早的 .skf)恢复为新的本地设计", + "import.insertProject": "插入此设计", + "import.insertProjectHint": "将 layerling 设计(.lyl)中的实体添加到当前设计,例如反复使用的常用零件", + "import.divider": "或添加几何体", + "import.dropZone": "拖入 STL、OBJ(连同其 .mtl 或打包为 ZIP)、3MF、STEP、SVG、PNG 或 JPG 文件", + "import.dropZoneHint": "或点击从电脑中选择", + "import.keepSvgPage": "SVG:保留在图纸页面上的位置", + "import.keepSvgPageHint": "在同一页面上绘制的图形(例如将同一文档的多个图层分别导出为文件)逐个导入后会重新对齐。不勾选时,每张图都以自身为中心。", + "import.svgWidth": "SVG 和图片:宽度(mm)", + "import.svgWidthHint": "输入图形或图片导入时应有的宽度;留空则保持原有尺寸。仅对下一次导入生效。", + "import.svgWidthPlaceholder": "原尺寸", + "status.importSvgNoPage": "{name} 未声明页面尺寸,因此按通常方式居中。", + "view.cube": "视图方向立方体", + "view.top": "俯视图", + "view.bottom": "仰视图", + "view.front": "前视图", + "view.back": "后视图", + "view.right": "右视图", + "view.left": "左视图", + "view.topShort": "上", + "view.bottomShort": "下", + "view.frontShort": "前", + "view.backShort": "后", + "view.rightShort": "右", + "view.leftShort": "左", + "camera.controls": "相机控制", + "camera.show": "显示相机控制", + "camera.hide": "隐藏相机控制", + "camera.showShort": "显示控制", + "camera.hideShort": "隐藏控制", + "camera.home": "复位", + "camera.focusSelection": "将视图居中到选中项", + "camera.zoomIn": "放大", + "camera.zoomOut": "缩小", + "camera.touchRotate": "用单指旋转视图", + "camera.touchRotateHint": "双指始终用于缩放和移动工作平面。开启后,单指转动视图而不再用于选择。", + "camera.orthographic": "正交视图", + "camera.perspective": "返回透视视图", + "camera.placeWorkplane": "放置工作平面", + "camera.resetWorkplane": "工作平面回到底板", + "camera.hideFaceWorkplane": "隐藏面上的工作平面", + "camera.showFaceWorkplane": "显示面上的工作平面", + "camera.hideWorkplane": "隐藏工作平面", + "camera.showWorkplane": "显示工作平面", + "camera.tapeTools": "卷尺", + "camera.cornerRulerTool": "放置直角尺", + "camera.duplicateAlongRuler": "沿尺复制", + "camera.tapeActions": "卷尺操作", + "camera.addMeasurement": "添加测量", + "camera.moveMeasurement": "移动测量点", + "camera.tapeWholeEdges": "测量整条边", + "camera.tapeWholeEdgesHint": "测量整条边:点击一条边即测量其全长,例如圆的周长。关闭时,点击会在边上放置一个点,用于测量直径或其他任意距离。按住 Alt 可临时反转一次。在圆上,对侧的点会自动吸附,因此直径结果精确。", + "camera.deleteMeasurement": "删除测量段", + "camera.deleteAllMeasurements": "删除所有测量", + "camera.tapeMarkMiddle": "将中点标记为参考点", + "camera.sectionView": "剖视图", + "camera.sectionActive": "剖切已启用", + "camera.sectionInactive": "剖切未启用", + "camera.sectionAxis": "轴", + "camera.sectionAxisX": "X(宽度)", + "camera.sectionAxisY": "Y(深度)", + "camera.sectionAxisZ": "Z(高度)", + "camera.sectionFlip": "翻转剖切方向", + "camera.sectionOrientation": "坐标基准", + "camera.sectionOrientationWorld": "设计", + "camera.sectionOrientationWorldHint": "设计的 X、Y、Z 轴,与位置字段一致", + "camera.sectionOrientationWorkplane": "工作平面", + "camera.sectionOrientationWorkplaneHint": "工作平面的 X、Y、Z 轴:Z 轴剖切平行于工作平面,X 和 Y 轴则垂直于它。剖切随工作平面移动。", + "camera.sectionOrientationView": "视图", + "camera.sectionOrientationViewHint": "面向屏幕:Z 轴指向屏幕内侧,因此会切去前方的部分。转动视图后需再次点击。", + "camera.sectionWorkplane": "在此处放置工作平面", + "camera.sectionWorkplaneHint": "将工作平面放到剖切位置,草图即可正好从那里开始,并显示剖切轮廓", + "camera.sectionReset": "居中", + "camera.sectionResetHint": "将剖切位置居中到模型", + "camera.sectionOffset": "位置", + "camera.sectionCoarse": "粗调", + "camera.sectionFine": "微调", + "camera.sectionFineHint": "微调滑块:在粗调位置 ±{span} 范围内", + "camera.sectionMeasure": "测量", + "camera.sectionMeasureHint": "直接在剖切面上测量壁厚、间距和间隙", + "camera.sectionMeasureHelp": "在轮廓上点击两个点。第二个点会垂直吸附到其所在的壁;在圆上还会吸附到圆心和与第一个点相对的点。", + "camera.sectionBack": "返回", + "camera.sectionBackHint": "先关闭测量,再关闭面板(Esc)", + "camera.sectionConfirm": "关闭", + "camera.sectionConfirmHint": "关闭面板并保留剖切", + "camera.sectionShowPlane": "显示剖切平面", + "panel.moveHint": "拖动可移动;双击或拖回原处即可还原", + "camera.sectionMoveHint": "拖动可移动;拖到剖视图按钮上或双击即可还原", + "camera.sectionExportSvg": "剖切导出为 SVG", + "camera.sectionExportSvgHint": "将剖切平面上的轮廓以 1:1 保存为 SVG,用于激光切割机、绘图仪或模板", + "camera.sectionFileSuffix": "剖切", + "camera.sectionSeenFromRight": "从右侧看", + "camera.sectionSeenFromTop": "从上方看", + "camera.sectionSeenFromFront": "从前方看", + "status.buildingSectionSvg": "正在生成剖切 …", + "status.sectionSvgExported": "剖切已保存为 SVG:{count} 个轮廓,{face},比例 1:1。", + "status.sectionSvgOpen": "其中 {count} 个轮廓未闭合,因为该处实体没有封闭。", + "status.sectionSvgOverlap": "重叠的实体无法合并,因此它们的轮廓相互重叠。", + "status.sectionSvgNothing": "没有可剖切的可见实体。", + "status.sectionSvgMissed": "剖切平面没有切到任何可见实体。将其移入设计范围内。", + "status.sectionSvgFailed": "无法将剖切保存为 SVG。", + "sketch.boxWidth": "选中项的宽度", + "sketch.boxDepth": "选中项的高度", + "sketch.stroke": "描边", + "sketch.strokeHint": "将草图构建为有宽度的线,而不是面", + "sketch.strokeTitle": "描边", + "sketch.strokeClose": "关闭描边设置", + "sketch.strokeOn": "按描边构建", + "sketch.strokeWidth": "宽度", + "sketch.strokeAlign": "位置", + "sketch.strokeAlign.center": "居中", + "sketch.strokeAlign.inside": "内侧", + "sketch.strokeAlign.outside": "外侧", + "sketch.strokeAlign.grow": "加宽", + "sketch.strokeAlign.shrink": "收窄", + "sketch.strokeAlignHint": "仅适用于闭合轮廓;开放线始终居中。", + "sketch.strokeJoin": "拐角", + "sketch.strokeJoin.miter": "尖角", + "sketch.strokeJoin.round": "圆角", + "sketch.strokeJoin.bevel": "斜角", + "sketch.strokeCap": "端点", + "sketch.strokeCap.flat": "平头", + "sketch.strokeCap.square": "方头", + "sketch.strokeCap.round": "圆头", + "sketch.strokeCapHint": "仅适用于开放线。", + "sketch.silhouetteHint": "略去所有位于另一轮廓内部的轮廓:孔以及孔中的内容。", + "status.sketchSilhouetteOn": "草图构建时不带孔", + "status.sketchSilhouetteOff": "草图重新带孔构建", + "sketch.strokeEmpty": "描边未留下任何面。画一条线或选择更大的宽度。", + "sketch.clickToEditDimension": "点击以输入长度", + "sketch.dimensionUpdated": "线长已更改", + "sketch.clickToEditAngle": "点击以输入角度", + "sketch.typedLength": "长度", + "sketch.typedAngle": "角度", + "sketch.typedLineHint": "按数值画下一条线:长度以毫米计,按“<”或 Tab 转到角度(0° 向右,90° 向上;留空则跟随指针),Enter 确定点,Esc 关闭。", + "sketch.typedLineOffPlate": "平台没有延伸到那里。缩短长度或换个方向。", + "sketch.angleEditHint": "角度以度为单位。Enter 应用,Tab 切换要旋转的线(虚线),Esc 取消。", + "sketch.angleUpdated": "角度已更改", + "camera.shortcut": "{label}({keys})", + "camera.viewSaved": "视图已保存到 {key},按 {key} 返回", + "camera.savedViewEmpty": "{key} 下尚未保存视图,按 Shift+{key} 保存当前视图", + "workspace.title": "工作区设置", + "workspace.close": "关闭设置", + "workspace.sections": "工作区设置分区", + "workspace.appearance": "外观", + "workspace.appearanceHint": "调整画布和导航行为。", + "workspace.measurement": "测量", + "workspace.measurementHint": "选择单位、精度、比例和吸附。", + "workspace.workplane": "工作平面", + "workspace.workplaneHint": "设置平台尺寸和可见网格间距。", + "workspace.shapeDefaults": "形状默认值", + "workspace.shapeDefaultsHint": "自定义每个工具栏形状的初始设置。在你输入自定义限制之前,现有形状的限制保持不变。", + "workspace.history": "历史记录", + "workspace.theme": "主题", + "workspace.themeSystem": "跟随系统", + "workspace.themeLight": "浅色", + "workspace.themeDark": "深色", + "workspace.themeGraphite": "石墨", + "workspace.toolbarSize": "工具栏大小", + "workspace.toolbarSizeSmall": "小", + "workspace.toolbarSizeMedium": "中", + "workspace.toolbarSizeLarge": "大", + "workspace.simpleMode": "简易模式", + "workspace.simpleModeHint": "面向儿童和初学者:更少的工具、简短的形状列表、更大的按钮,以及不链接到 layerling 之外的起始页。", + "workspace.simpleModeOff": "按住以关闭简易模式", + "workspace.viewCubePosition": "视图立方体位置", + "workspace.viewCubePositionTopLeft": "左上", + "workspace.viewCubePositionTopRight": "右上", + "workspace.viewCubePositionBottomLeft": "左下", + "workspace.viewCubePositionBottomRight": "右下", + "workspace.showMoveDimensions": "显示移动尺寸", + "workspace.showOriginDimensions": "显示到原点的距离", + "workspace.dimensionsAlwaysVisible": "尺寸始终可见", + "workspace.showRotationAngles": "显示旋转后实体的角度", + "workspace.startInPerspective": "编辑器以透视视图启动", + "workspace.doubleClickOpensSketch": "双击打开草图", + "workspace.doubleClickOpensGroup": "双击打开分组或捆绑", + "workspace.selectBeforeMoving": "先选中再移动", + "workspace.frameByDirection": "由框选方向决定", + "workspace.frameByDirectionHint": "向右拖出的选框只选中完全位于其中的对象,向左拖出的选框选中所有触及的对象(以虚线绘制),与 SketchUp 相同", + "workspace.objectSnap": "移动时吸附到其他形状", + "workspace.overhangAngle": "标记 {angle}° 起的悬垂", + "workspace.overhangStrict": "30°(谨慎)", + "workspace.overhangLoose": "70°(散热良好)", + "workspace.showShadows": "显示阴影", + "workspace.cameraInertia": "相机继续转动", + "workspace.cameraInertiaHint": "松开后,视图会继续转一会儿并缓缓减速。关闭:立即停止,与 Tinkercad 和 Fusion 360 相同。", + "workspace.fastMode": "快速模式", + "workspace.fastModeHint": "适用于较慢的电脑:关闭阴影、所有实体的边线和相机惯性,并仅以屏幕分辨率绘制视图。你自己的设置会保留以备后用。", + "workspace.offInFastMode": "在快速模式下关闭", + "workspace.showGrid": "显示网格", + "workspace.resetGrid": "重置网格", + "workspace.resetGridHint": "网格的可见性、颜色、间距和线宽将恢复为标准值,此处以及“设为默认”保存的默认值都会恢复。", + "workspace.cruise": "添加新形状时启用巡航", + "workspace.zoomSpeed": "缩放速度", + "workspace.slow": "慢", + "workspace.fast": "快", + "workspace.units": "单位", + "workspace.inchFormat": "英寸显示方式", + "workspace.inchFormatFraction": "分数(1 5/8)", + "workspace.inchFormatDecimal": "小数(1.625)", + "workspace.scale": "比例", + "workspace.accuracy": "精度", + "workspace.snapGrid": "吸附网格", + "workspace.customSnapGrids": "自定义吸附网格", + "workspace.customSnapGridsHint": "自定义的量度,例如芯片、排针和洞洞板上 2.54 mm 的引脚间距。吸附菜单提供整格、半格和四分之一格;关闭“同时提供半格和四分之一格”则仅提供该尺寸本身。", + "workspace.customSnapGridName": "名称", + "workspace.customSnapGridSize": "尺寸(毫米)", + "workspace.customSnapGridAdd": "添加吸附网格", + "workspace.customSnapGridRemove": "移除此吸附网格", + "workspace.customSnapGridParts": "同时提供半格和四分之一格", + "workspace.printer": "打印机", + "workspace.printerNone": "无打印机,自由尺寸", + "workspace.printerHint": "选择你的打印机,使工作平面与其打印平台尺寸匹配。超出打印平台的实体会被标记。", + "workspace.printerInfo": "打印平台 {width} × {depth} mm,最大打印高度 {height} mm(来自 OrcaSlicer 配置)。", + "status.bedOverhangOne": "“{name}”不适合 {printer} 的构建体积({sides})", + "status.bedOverhangMany": "{count} 个实体不适合 {printer} 的构建体积", + "status.bedOverhangDismiss": "对这些实体隐藏警告(之后离开构建体积的实体会再次警告)", + "bed.side.left": "向左 {mm} mm", + "bed.side.right": "向右 {mm} mm", + "bed.side.back": "向后 {mm} mm", + "bed.side.front": "向前 {mm} mm", + "bed.side.top": "高出 {mm} mm", + "workspace.size": "工作平面尺寸", + "workspace.width": "宽度", + "workspace.length": "长度", + "workspace.gridBlockSize": "网格块大小", + "workspace.blockSize": "块大小", + "workspace.booleanTriangleLimit": "剪切导入网格上限为", + "workspace.booleanTriangleLimitOlder": "旧电脑({count} 个三角形)", + "workspace.booleanTriangleLimitNormal": "普通({count} 个三角形,默认)", + "workspace.booleanTriangleLimitFast": "较快的电脑({count} 个三角形)", + "workspace.booleanTriangleLimitCustom": "三角形数量", + "workspace.booleanTriangleLimitNote": "对导入网格进行剪切、合并和相交运算在浏览器中计算。三角形数量超过此上限的网格不会被处理;先简化网格或提高上限。上限更高可能使编辑器停顿几秒。", + "workspace.custom": "自定义", + "workspace.shape": "形状", + "workspace.useAppDefaults": "使用应用默认值", + "workspace.shapeDetails": "形状详情", + "workspace.shapeDetailsHint": "添加此形状时使用的额外默认值。", + "workspace.customLimit": "自定义尺寸限制", + "workspace.customLimitHint": "留空则保留此形状当前所有的属性面板和拖动限制。", + "workspace.appLimits": "应用限制", + "workspace.savedHistory": "已保存的历史记录", + "workspace.savedHistoryHint": "选择保存或重新打开此设计后仍可用的已完成操作数量。", + "workspace.historyActions": "已保存历史操作数", + "workspace.actionsToRetain": "保留的操作数", + "workspace.footerHint": "为此设计保存当前设置。", + "workspace.makeDefault": "设为默认", + "workspace.defaultSaved": "默认值已保存", + "sketch.toolbar": "草图工具栏", + "sketch.group.draw": "绘制", + "sketch.group.shapes": "形状", + "sketch.group.select": "选择", + "sketch.group.finish": "完成", + "sketch.group.create": "创建", + "sketch.line": "直线", + "sketch.arc": "圆弧", + "sketch.bezier": "贝塞尔曲线", + "sketch.smooth": "平滑曲线", + "sketch.construction": "构造线", + "sketch.constructionHint": "将新线绘制为构造线:虚线、不属于实体,点可吸附到其交点", + "sketch.makeConstruction": "构造线", + "sketch.makeConstructionHint": "将此线设为构造线:虚线,不属于实体", + "sketch.makeSolid": "设为普通线", + "sketch.makeSolidHint": "将此构造线恢复为普通线,属于轮廓的一部分", + "sketch.fromMiddle": "从中间画线", + "sketch.fromMiddleHint": "从中间画线:先点击中点,再向外拖出;线向两侧延伸相同长度", + "status.sketchFromMiddleOn": "从中间画线:先点击中点,再点击端点;线向另一侧延伸相同长度", + "status.sketchFromMiddleOff": "已关闭从中间画线:线条重新从第一点延伸到下一点", + "status.sketchConstructionOn": "构造线:新线均为构造线", + "status.sketchConstructionOff": "已关闭构造线:新线重新属于轮廓", + "status.sketchMadeConstruction": "线条已设为构造线", + "status.sketchMadeSolid": "构造线已设为普通线", + "sketch.addShape": "添加草图形状", + "sketch.shapesMenu": "草图形状", + "sketch.shapesTitle": "草图形状", + "sketch.rectangle": "矩形", + "sketch.circle": "圆形", + "sketch.ellipse": "椭圆", + "sketch.halfCircle": "半圆", + "sketch.pieSlice": "扇形", + "sketch.boltCircle": "螺栓圆", + "sketch.triangle": "三角形", + "sketch.hexagon": "六边形", + "sketch.polygon": "多边形", + "sketch.star": "星形", + "sketch.polygonSides": "边数 / 角数", + "sketch.starInner": "星形内径", + "sketch.addPrimitiveHint": "在草图原点添加{shape},或将其拖到草图上", + "sketch.select": "选择", + "sketch.addImage": "添加图片", + "sketch.addImageReady": "添加图片", + "sketch.addImageBlocked": "选择“选择”工具以添加图片", + "sketch.refine": "添加或移除点", + "sketch.erase": "擦除", + "sketch.undo": "草图撤销", + "sketch.redo": "草图重做", + "sketch.finishRevolve": "完成旋转", + "sketch.sweep": "扫掠草图", + "sketch.sweepHint": "将轮廓沿路径扫掠", + "sketch.finishSweep": "完成扫掠", + "sketch.modeBadgeSweep": "扫掠草图", + "sketch.modeBadgeExtrude": "拉伸草图", + "sketch.operationHint": "此草图将生成什么:拉伸、旋转或扫掠", + "status.sketchOperationChanged": "当前:{operation}。完成草图以构建实体", + "status.sweepStarted": "已开始扫掠草图:将横截面绘制为闭合轮廓,再将路径绘制为构造线", + "status.editingSweepProfile": "正在编辑扫掠草图", + "status.sweepCreated": "已创建扫掠草图", + "status.sweepUpdated": "扫掠已更新", + "status.sketchCannotSweep": "此草图无法沿其路径扫掠", + "sketch.sweepNoProfile": "请将横截面绘制为至少一个闭合轮廓。", + "sketch.sweepNoPath": "请用构造线绘制路径:打开构造线,在轮廓旁边画一条直线或曲线。", + "sketch.sweepManyPaths": "存在多条路径。请只保留一条构造线链。", + "sketch.sweepFailed": "无法沿此路径扫掠该轮廓。请尝试更平滑的路径或更小的横截面。", + "sketch.finishSketch": "完成草图", + "sketch.cancel": "取消", + "sketch.to3d": "草图转 3D", + "sketch.extrude": "拉伸草图", + "sketch.extrudeHint": "将轮廓拉伸成 3D 形状", + "sketch.revolve": "旋转草图", + "sketch.revolveHint": "让轮廓绕轴旋转", + "sketch.editTo3d": "编辑草图转 3D", + "sketch.edit": "编辑", + "visibility.nothingHidden": "没有隐藏的对象", + "visibility.showAllHidden": "显示所有隐藏项({count})", + "visibility.showOutliner": "显示对象列表", + "visibility.hideOutliner": "隐藏对象列表", + "outliner.collapsePanel": "收起对象列表", + "outliner.expandPanel": "展开对象列表", + "outliner.moveHint": "拖动可移动;把它放在视图立方体旁边,或双击重新停靠", + "outliner.title": "对象", + "outliner.search": "搜索对象 …", + "outliner.empty": "设计中无对象", + "outliner.noMatches": "没有匹配的对象", + "outliner.clearSearch": "清除搜索", + "outliner.collapse": "收起分组", + "outliner.expand": "展开分组", + "outliner.rename": "重命名", + "outliner.children": "{count} 个部件", + "outliner.lock": "锁定对象", + "outliner.unlock": "解锁对象", + "outliner.hide": "隐藏对象", + "outliner.show": "显示对象", + "outliner.solid": "实体", + "outliner.hole": "孔", + "group.edit": "编辑分组", + "group.editBundle": "编辑捆绑", + "group.done": "完成", + "group.noneOpen": "当前没有正在编辑的分组", + "group.busy": "分组正在重建", + "group.editing": "正在编辑 {path}:修改其部件,然后点“完成”。", + "group.editingEdgeWarning": " 重建后,整个组上的圆角和倒角都会丢失。", + "group.finishOpenFirst": "现在只能编辑“{name}”内的分组,请先点“完成”结束它", + "status.groupOpened": "正在编辑“{name}”", + "status.groupClosed": "已重建“{name}”", + "status.groupOpenCancelled": "“{name}”已原样恢复", + "status.groupOnePartLeft": "只剩一个部件,它将独立保留", + "status.groupNoPartsLeft": "没有剩余部件", + "note.placeholder": "写一条便签 ...", + "note.move": "拖动可移动,单击可打开", + "note.detach": "从对象上解除", + "note.free": "位于工作平面", + "point.title": "参考点", + "point.deleteAll": "全部删除({count})", + "point.move": "拖动可移动,单击可显示坐标", + "point.hint": "形状会吸附到它", + "visibility.overhangs": "显示悬垂(自 {angle}° 起)", + "visibility.notes": "显示便签和参考点", + "visibility.eyeAgain": "再次点击眼睛:已选中", + "visibility.allShortcut": ":全部", + "units.metric": "公制(默认)", + "units.imperial": "英制", + "units.bricks": "积木", + "scale.millimeters": "1:1(毫米)", + "scale.centimeters": "1:10(厘米)", + "scale.meters": "1:1000(米)", + "scale.inches": "1:1(英寸)", + "scale.feet": "1:1(英尺)", + "scale.studs": "1:1(凸点)", + "grid.off": "关闭", + "grid.brick": "积木", + "workspace.customActive": "已启用自定义设置", + "workspace.usingDefaults": "正在使用 layerling 默认设置", + "workspace.customizedSuffix": " — 已自定义", + "workspace.appDefault": "应用:{value}", + "workspace.shapeNote": "自定义数值会应用到新形状。自定义尺寸上限还会替换此形状现有的缩放上限,最高 {max} mm。", + "prop.helixQuality": "螺旋质量", + "workspace.unlimited": "无限制", + "workspace.historyNote": "{count} 步是默认值。降低上限会从此设计中永久丢弃较早的撤销状态。", + "edge.chamferTitle": "倒角边", + "edge.chamfilletTitle": "圆滑倒角边", + "edge.chamfillet": "圆滑倒角", + "edge.chamfilletHint": "以在打印平台上可打印的倒角起始,并平滑过渡到壁面", + "edge.filletTitle": "圆角边", + "edge.cancelChamfer": "取消倒角", + "edge.cancelFillet": "取消圆角", + "edge.preparing": "正在准备边…", + "edge.selectionStatus": "已选中 {selected}/{available} 条锐边", + "edge.singleObject": "单个对象", + "edge.groupedObjects": "{count} 个分组对象", + "edge.existingFeatureOne": " · 1 个已有的边特征", + "edge.existingFeatureMany": " · {count} 个已有的边特征", + "edge.selectionHelp": "单击模型中高亮的边即可切换选中状态。按住 Shift 可添加或移除单条边。", + "edge.loading": "正在从本地浏览器工作线程加载 CAD 边数据。", + "edge.previewBusy": "正在计算预览。可继续调整,只会计算你停下的那个值。", + "edge.allSharpEdges": "所有锐边", + "edge.clear": "清除", + "edge.featureHistory": "撤销边特征", + "edge.revertHint": "单击一次即可撤销该特征。", + "edge.editAction": "编辑", + "edge.editHint": "撤回该处理,并以相同的边和待修改的数值重新打开工具。", + "edge.revertAction": "撤销", + "edge.revertFilletOne": "圆角({size} mm,1 条边)", + "edge.revertFilletMany": "圆角({size} mm,{count} 条边)", + "edge.revertChamferOne": "倒角({size} mm,1 条边)", + "edge.revertChamferMany": "倒角({size} mm,{count} 条边)", + "edge.revertChamfilletOne": "圆滑倒角({size} mm,1 条边)", + "edge.revertChamfilletMany": "圆滑倒角({size} mm,{count} 条边)", + "edge.noStoredHistory": "较早的边特征没有保存撤销历史。", + "edge.alsoRemovesNewer": "注意:还会移除 {count} 个更晚的特征", + "edge.noManifoldEdges": "此处没有可处理的连续边。", + "edge.noEdgeAtThreshold": "没有边的锐度达到当前阈值。", + "edge.selectAtLeastOne": "至少选择一条高亮的边。", + "edge.emptyResult": "CAD 内核返回了空的边处理结果。", + "edge.radius": "半径", + "edge.variableRadius": "可变半径", + "edge.variableRadiusHint": "半径沿边从起点到终点均匀变化。每次只对一条边生效。", + "edge.radiusStart": "起点半径", + "edge.radiusEnd": "终点半径", + "edge.swapEnds": "交换两端", + "edge.swapEndsHint": "把较大的半径放到边的另一端。", + "edge.variableOneEdge": "可变半径每次只对一条边生效。请只选择一条边。", + "edge.distance": "距离", + "edge.angle": "角度", + "edge.sharpThreshold": "锐边阈值", + "edge.topEdges": "顶部边", + "edge.topEdgesHint": "仅选取实体最顶部的边,例如饼干模具的边缘", + "edge.noTopEdges": "在此阈值下,顶部没有可处理的边。", + "edge.bottomEdges": "底部边", + "edge.bottomEdgesHint": "仅选取实体最底部的边,例如零件的底脚", + "edge.noBottomEdges": "在此阈值下,底部没有可处理的边。", + "edge.verticalEdges": "竖直边", + "edge.verticalEdgesHint": "选取竖直立起的边,例如长方体的角", + "edge.noVerticalEdges": "在此阈值下,此实体没有竖直立起的边。", + "edge.horizontalEdges": "水平边", + "edge.horizontalEdgesHint": "选取平躺的边,例如长方体顶部和底部的边缘", + "edge.noHorizontalEdges": "在此阈值下,此实体没有平躺的边。", + "edge.quickAddHint": "按住 Shift 或 Ctrl 单击,可将边添加到已选边中", + "edge.done": "完成", + "edge.tangentChains": "单击还会选中平滑延续的边", + "edge.tangentChainsHint": "只决定单击会选中什么。对于从已选边平滑(相切)延续的边,CAD 内核始终会一并施加倒角或圆角。", + "edge.tangentImpliedOne": "CAD 内核会将此处理延伸到另外 1 条平滑延续的边。", + "edge.tangentImpliedMany": "CAD 内核会将此处理延伸到另外 {count} 条平滑延续的边。", + "edge.keepSize": "缩放时保持边尺寸", + "edge.onlyVisibleEdges": "仅可见边", + "edge.onlyVisibleEdgesHint": "从此视图中隐藏实体背面的边,只显示并可选朝向你的边。", + "edge.previewQuality": "预览质量", + "edge.draft": "草稿", + "edge.standard": "标准", + "edge.fine": "精细", + "edge.apply": "应用", + "edge.errorOverlappingGeometry": "所选尺寸对此边过大,与相邻面相交。请选择更小的值。", + "edge.errorNoSolidBody": "所选分组中没有可修改的实体。", + "edge.errorPrepareTimeout": "边准备超时。此网格细节过多,无法进行交互处理。", + "edge.errorPreviewTimeout": "边预览超时。请取消工具后重试。", + "edge.errorWorkerFailed": "CAD 引擎无法启动。通常是因为 layerling 刚更新过:重新加载页面即可继续。如果仍不行,请更新浏览器。", + "edge.errorFilletTogether": "所选边在此尺寸下无法一起倒圆角。请减小尺寸,或少选几条相连的边。", + "edge.errorChamferTogether": "所选边在此尺寸下无法一起倒角。请减小尺寸,或少选几条相连的边。", + "edge.errorKernelFailed": "CAD 内核无法完成此边处理。", + "error.unknown": "出了点问题:{detail}", + "error.storedBodyRestore": "无法恢复已保存的精确实体。请撤销上一次边处理,或选择更小的值。", + "error.exactBodyInvalid": "放置后精确实体无效。请稍微改动数值后重试。", + "error.solidNotValid": "无法用这些数值构建有效实体。请稍微改动后重试。", + "error.measuresOutOfRange": "数值超出范围。", + "error.threadChamferAxis": "螺纹的倒角触及轴线。请选择更小的倒角。", + "error.gearHoleTeeth": "齿轮的中心孔触及轮齿。请选择更小的孔。", + "error.crescentRounding": "尖角的圆化程度不适合此月牙。请选择更小的值。", + "error.glyphCurve": "某个字母使用了无法转换为精确轮廓的曲线。", + "error.primitiveDimensions": "此形状的数值无效。", + "error.primitiveNotSolid": "无法将此形状准备为有效的 CAD 实体。", + "error.noMeshData": "此对象没有网格数据。", + "error.noClosedFaces": "此对象没有闭合面。", + "error.meshOpen": "网格是开放的或非流形的。处理边之前请先修复。", + "error.groupRepair": "无法将分组实体修复为有效几何体。", + "error.noSolidComponents": "所选内容中没有闭合实体。", + "error.edgeNotMapped": "有条边无法匹配到其所属实体。请重新启动边工具。", + "error.prepareFirst": "打开预览前请先准备对象。", + "edge.errorNoSolidResult": "此值无法留下闭合实体。请选择更小的值。", + "error.storedStepNoSolid": "已保存的 STEP 主体中没有实体。", + "error.fontsNotLoaded": "字体尚未加载。请稍后重试。", + "error.revolveNoProfile": "请在旋转轴左侧绘制至少一个闭合轮廓。", + "error.revolveNoArea": "旋转轮廓没有填充面积。", + "error.revolveNotValid": "无法将此轮廓旋转成有效实体。", + "error.sketchOpenPaths": "所有轮廓路径都是开放的。完成草图前请至少闭合一个回路。也可以打开“按描边构建”,用一定宽度构建这条开放线本身。", + "error.svgEmpty": "SVG 文件为空。", + "error.svgTooLarge": "SVG 文件过大。上限为 {size} MB。", + "error.svgEntities": "此 SVG 文件使用了实体或自定义文档类型。仅支持普通 SVG 文档。", + "error.svgNaN": "SVG 文件包含无效数字。在 Tinkercad 中,导出横截面之前请确保工作平面与模型相交。", + "error.svgTooComplex": "SVG 文件过于复杂。请简化图形后重试。", + "error.svgExternal": "此 SVG 只指向了一个外部文件,layerling 无法打开。请直接打开那张图片(PNG 或 JPG),或保存包含绘图内容的 SVG。", + "error.svgPicture": "此 SVG 在绘图之外还附带一张图片,而图片不是绘图。只有当 SVG 中仅含图片时才会描摹图片:请把图片移出 SVG,或直接打开这张图片(PNG 或 JPG)。", + "error.pictureUnreadable": "无法读取图片。请另存为 PNG 或 JPG 后重试。", + "error.pictureEmpty": "图片的这一部分没有可描摹的内容。请试试另一部分。", + "error.svgOpenStrokes": "SVG 文件只包含开放描边。导入前请闭合路径,或将描边转换为填充轮廓。", + "error.svgNoPaths": "SVG 文件中未找到可读的填充或闭合路径。", + "error.svgInvalidXml": "该文件不是有效的 SVG(XML 错误)。", + "error.meshBroken": "网格已损坏:存在不完整的三角形或无效坐标。", + "error.meshTooComplex": "网格过于复杂。请简化后重试。", + "error.meshDegenerate": "网格包含零面积三角形。请修复后重试。", + "error.meshNotWatertight": "网格不是封闭的(存在开放或非流形边)。请修复后重试。", + "error.meshNoVolume": "网格未包围任何体积。", + "error.svgProjectionEmpty": "投影中没有可读的轮廓,也没有可见面积。", + "error.objEmpty": "OBJ 文件不包含可读取的几何体。", + "error.objBroken": "OBJ 文件包含有问题的几何体(顶点、面或索引无效)。", + "error.stlEmpty": "STL 文件不包含可读取的几何体。", + "error.threemfUnzip": "无法解压 3MF 文件。文件是否已损坏?", + "error.threemfEmpty": "3MF 文件不包含可读取的 3D 模型。", + "error.threemfBroken": "3MF 文件包含有问题的数据。", + "error.stepRead": "无法读取 STEP 文件。", + "error.stepNoSolid": "STEP 文件中没有可导入的实体几何。", + "error.stepExport": "STEP 导出失败。", + "error.stlExportLimit": "设计的三角面过多,无法写入二进制 STL 文件。", + "error.threemfExportEmpty": "导出 3MF 至少需要一个带三角面的实体。", + "error.projectAssetType": "设计不支持这种文件。", + "error.noLocalDatabase": "此浏览器没有本地数据库。", + "error.libraryOpen": "无法打开形状库。", + "error.libraryBusy": "形状库正在另一个标签页中使用。", + "error.libraryWrite": "无法写入形状库。", + "error.libraryMissing": "此形状已不在形状库中。", + "error.serverShapeSave": "无法将形状保存到服务器。", + "error.projectStorage": "设计形状的存储不可用或无法打开。", + "error.storeFolderCreate": "无法创建共享文件夹 {folder}(来自 {setting})({reason})。请在 {folder} 挂载一个可写文件夹,或将 {setting} 设为已挂载的文件夹。在 Docker 中,修改设置后需执行 “docker compose up -d” 应用;“restart” 仍会沿用旧设置。", + "error.folderNameNotAllowed": "不允许使用该文件夹名称。", + "error.folderNotAllowed": "不允许使用该文件夹。", + "error.folderNotOnServer": "服务器上没有该文件夹。", + "error.folderExists": "已有同名文件夹。", + "error.folderSameName": "该文件夹已经叫这个名字。", + "error.folderNotEmpty": "该文件夹不为空。", + "error.storeFolderRename": "存储文件夹本身无法重命名。", + "error.storeFolderRemove": "存储文件夹本身无法移除。", + "error.sharedBusy": "此共享项目正被其他人修改。请稍后重试。", + "error.sharedNotFound": "未找到共享项目。", + "error.sharedNameInvalid": "共享项目的名称无效。", + "error.sharedNameRequired": "共享项目需要一个名称。", + "error.sharedNameTaken": "该文件夹中已有同名项目。", + "error.sharedAlreadyHere": "该项目已在此文件夹中。", + "error.sharedCopyName": "副本需要有自己的名称。", + "error.sharedReloadFirst": "请先重新加载共享项目以检查当前修订版本,然后重试。", + "error.sharedChanged": "共享项目在你加载后发生了变化。请刷新共享项目列表后重试。", + "error.sharedChangedSave": "共享项目在你打开后发生了变化。请重新加载,或用其他名称保存。", + "error.sharedGone": "共享项目已不存在。请用其他名称保存。", + "error.sharedDisabled": "共享项目存储已禁用。", + "error.sharedSameOrigin": "共享项目仅接受来自本站点的请求。", + "error.sharedTooLarge": ".lyl 文件超出了共享存储的大小上限。", + "error.sharedUpload": "上传不完整,或缩略图无效。请重新保存。", + "error.sharedFailRead": "无法读取共享项目。", + "error.sharedFailDelete": "无法删除共享项目。", + "error.sharedFailSave": "无法保存共享项目。", + "error.sharedFailDownload": "无法下载共享项目。", + "error.thumbnailInvalid": "缩略图或其请求无效。", + "error.thumbnailTooLarge": "缩略图图像过大。", + "error.thumbnailSameOrigin": "仅接受来自本站点的缩略图。", + "error.thumbnailSave": "无法保存缩略图。", + "error.historyViewOpen": "历史记录视图已打开。更改设计前请先关闭它(layerling_set_history_view,open: false)。", + "error.noEarlierState": "目前还没有更早的状态可供回看。", + "error.finishBeforeHistory": "请先完成当前操作,再打开历史记录视图。", + "crash.title": "layerling 遇到错误", + "crash.description": "无法显示此视图。浏览器中保存的设计不会因此被删除。", + "crash.details": "错误信息", + "crash.backupMissing": "浏览器中尚无可保存的设计状态。", + "crash.projectHint": "受影响的设计:{name}", + "crash.goToDashboard": "返回起始页", + "crash.downloadBackup": "将最后保存的状态存为 .lyl", + "crash.newEmptyProject": "新建设计", + "edge.errorMeshNotSolid": "无法将所选网格转换为封闭的 CAD 实体。请尝试先分离部件、取消分组或简化对象,再添加边特征。", + "edge.errorKernelMemoryFault": "CAD 内核发生内存错误并已重置。请重新启动边工具;无需刷新页面。", + "edge.errorKernelRestart": "CAD 内核空间不足并已重启。请稍等片刻,然后重新启动边工具;无需刷新页面。", + "error.kernelNeedsSimd": "CAD 内核需要 WebAssembly SIMD,而此浏览器或计算机不支持。请使用最新版 Chrome、Edge、Firefox 或 Safari。", + "error.outOfMemory": "浏览器在此步骤中内存不足。设计体积非常大。请用“简化网格”减少导入网格的三角面,关闭其他标签页后重试。", + "split.title": "分割", + "split.subtitle": "摆放平面,然后生成两个实体", + "split.cancelAria": "取消分割", + "split.targetOne": "已选中 1 个对象", + "split.targetMany": "已选中 {count} 个对象", + "split.targetHint": "每个相交的对象都将变成两个封闭网格。", + "split.orientation": "平面方向", + "split.workplane": "对齐到工作平面", + "split.workplaneParallel": "平行", + "split.workplaneParallelHint": "让平面落在工作平面上——若它穿过部件,则经过其原点,否则经过其中部", + "split.workplaneAcrossX": "沿 X 方向", + "split.workplaneAcrossXHint": "垂直于工作平面,沿其 X 方向", + "split.workplaneAcrossY": "沿 Y 方向", + "split.workplaneAcrossYHint": "垂直于工作平面,沿其 Y 方向", + "split.rotation": "绕 {axis} 旋转", + "split.rotationAria": "分割平面绕 {axis} 轴的旋转", + "split.rotationSliderAria": "分割平面绕 {axis} 轴旋转滑块", + "split.rotationValue": "{value} 度(绕 {axis} 轴)", + "split.degrees": "度", + "split.position": "平面位置", + "split.positionAria": "分割平面位置", + "split.positionSliderAria": "分割平面位置滑块", + "split.positionValue": "{value} {unit}", + "split.pickFace": "拾取面", + "split.pickFaceHint": "拾取面:点击一个面,将平面放在该面上", + "split.help": "半透明平面会预览精确的切割位置。拖动其箭头可移动,或用“拾取面”把它放到某个面上。绕一个或两个轴转动即可斜切。", + "split.apply": "分割模型", + "split.applying": "正在分割", + "split.error.notClosed": "源网格无法形成封闭实体({status})。", + "split.error.overlapping": "重叠或断开的部件无法合并为有效的分割实体。", + "split.error.emptyHalf": "分割平面切出了空白或无效的一半。请将平面向模型内部移得更深。", + "split.error.store": "分割已完成,但有一个输出网格无法保存。", + "split.error.kernel": "分割内核错误:{message}", + "split.error.kernelUnknown": "分割内核无法处理此模型。", + "split.error.failed": "无法分割 {name}。{detail}", + "split.error.failedDefault": "无法在此平面处分割模型。", + "split.error.movePlane": "请将平面移到至少一个选中对象之内。", + "status.splitReady": "分割:摆放平面,然后应用", + "status.splitPick": "点击一个面,将分割平面放在其上;按 Esc 停止", + "status.splitCancelled": "已取消分割", + "status.splitCancelledChanged": "因选择或模型发生变化,分割已取消", + "status.splitCancelledProcessing": "因处理过程中项目、选择或模型发生变化,分割已取消", + "status.splitSelectSolids": "请选择一个或多个可见且未锁定的实体或孔进行分割", + "status.splitNoGeometry": "所选内容没有可分割的可打印几何体", + "status.splitFailed": "无法分割 {name}", + "status.splitMissed": "分割平面未穿过所选内容", + "status.splitOne": "已将 1 个对象分割为 {count} 个实体", + "status.splitMany": "已将 {count} 个对象分割为 {bodies} 个实体", + "align.left": "左", + "align.right": "右", + "align.center": "居中", + "align.front": "前", + "align.back": "后", + "align.middle": "中", + "align.bottom": "底", + "align.top": "顶", + "align.do": "对齐:{label}", + "align.already": "已对齐:{label}", + "mirror.leftRight": "左右", + "mirror.frontBack": "前后", + "mirror.topBottom": "上下", + "notice.sharedLoadFailed": "无法加载服务器上的设计", + "notice.projectListSaveFailed": "无法保存设计列表", + "notice.projectShapesLoadFailed": "无法加载设计形状", + "notice.projectShapesSaveFailed": "无法保存设计形状", + "error.projectTooLarge": "此设计太大,无法保存:其历史记录和网格占用空间过多。请在历史记录视图中删除历史,或简化最重的实体。", + "error.storageFull": "浏览器已没有空间保存此设计。请在历史记录视图中删除历史、移除不需要的设计,或先备份它们。", + "notice.projectShapesSaveFailedWhy": "无法保存设计形状:{reason}", + "notice.projectHistoryTrimmed": "此设计较大:浏览器中保存的副本仅保留 {kept} 步历史(共 {total} 步)。删除历史可使其更轻。", + "notice.projectShapesMigrateFailed": "无法将设计形状迁移到更大的存储空间", + "notice.projectShapesPrepareFailed": "无法准备设计形状存储", + "notice.projectShapesDeleteFailed": "无法从本地存储中删除设计形状", + "notice.validatingFile": "正在校验 {name},以便将其作为新设计打开", + "notice.opened": "已打开 {name}", + "notice.openingShared": "正在打开服务器设计 {name}", + "notice.openedServerProject": "已打开服务器设计 {name}——更改会自动保存在那里。", + "error.newerDesign": "此设计由 layerling {saved} 保存,而你使用的是 {current}。其中包含此版本尚不认识的内容。请重新加载页面以获取最新版本;已安装的应用或你自己的服务器可能需要更新。", + "notice.newerDesignOpened": "此设计由 layerling {saved} 保存,而你使用的是 {current}:较新的内容(例如你自己的字体)在这里可能显示不同。请重新加载页面以获取最新版本。", + "notice.openedLocalProject": "已将 {name} 作为新的本地设计打开", + "notice.savedToServer": "已将 {name} 保存到服务器", + "notice.sendingAllToServer": "正在将 {done}/{count} 放到服务器上……", + "notice.sentAllOne": "1 个设计已在服务器上。", + "notice.sentAllMany": "{count} 个设计已在服务器上。", + "notice.sentAllPartial": "{done} 个已在服务器上,{failed} 个无法放上去,仍留在此浏览器中。", + "notice.openSharedFailed": "无法打开服务器设计", + "notice.saveSharedFailed": "无法将设计保存到服务器", + "notice.folderCreateFailed": "无法创建文件夹", + "notice.renamingFolder": "正在重命名文件夹 {name}……", + "notice.renamedFolder": "文件夹现已更名为 {name}", + "notice.folderRenameFailed": "无法重命名文件夹", + "notice.deletingFolder": "正在删除文件夹 {name}……", + "notice.deletedFolder": "已删除文件夹 {name}", + "notice.folderDeleteFailed": "无法删除文件夹", + "notice.deletingShared": "正在删除服务器设计 {name}", + "notice.deletedShared": "已删除服务器设计 {name}", + "notice.deleteSharedFailed": "无法删除服务器设计", + "notice.renameSharedFailed": "服务器设计的文件无法重命名,仍保留旧名称", + "notice.movingShared": "正在移动服务器设计 {name}……", + "notice.movedShared": "服务器设计 {name} 现已位于 {folder}", + "notice.movedSharedRoot": "服务器设计 {name} 现已位于服务器文件夹的顶层", + "notice.moveSharedFailed": "无法移动服务器设计", + "notice.moveNameTaken": "该文件夹中已有名为 {name} 的设计", + "notice.duplicating": "正在复制 {name}……", + "notice.duplicated": "已创建 {name}", + "notice.duplicateFailed": "无法复制设计", + "notice.sendingToServer": "正在将 {name} 保存到服务器……", + "notice.serverNameTaken": "服务器上已有名为 {name} 的设计", + "notice.backupEmpty": "尚无可备份的设计", + "notice.backingUp": "正在备份设计……{index}/{total}", + "notice.backupDone": "已备份 {count} 个设计到 {name}", + "notice.backupDoneWithShapes": "已备份 {count} 个设计和 {shapes} 个自定义形状到 {name}", + "notice.backupShapesRestored": "自定义形状:已添加 {count} 个,{skipped} 个已存在。", + "notice.backupFailed": "备份失败:{reason}", + "notice.backupNotReadable": "{name} 不是可读取的 ZIP 文件", + "notice.backupNoDesigns": "{name} 中不含 layerling 设计", + "notice.restoringBackup": "正在恢复设计……{index}/{total}", + "notice.backupRestored": "已恢复 {count} 个设计,来自 {name}", + "notice.backupRestoredPartly": "已恢复 {count} 个设计(来自 {name});{failed} 个无法读取", + "notice.backupAlreadyThere": "{count} 个已存在,未再次添加。", + "notice.backupAllThere": "{count} 个设计(来自 {name})都已在此,未添加任何内容。", + "notice.oneBackupAtATime": "请单独打开一个备份,不要与其他文件一起", + "notice.oneLylAtATime": "请一次打开一个设计文件;STL、OBJ、STEP 和 SVG 几何需分别导入", + "notice.importedDesignName": "已导入的设计({count} 个文件)", + "notice.folderDeleted": "文件夹 {name} 已删除;其中的内容已上移一级。", + "notice.movedToFolder": "{name} 已移到文件夹 {folder}。", + "notice.movedToRoot": "{name} 已移到顶层。", + "notice.importing": "正在导入第 {index}/{total} 个:{name}", + "notice.importProjectFailed": "无法为导入的文件创建设计", +}; diff --git a/apps/web/src/lib/messages.zh-tw.ts b/apps/web/src/lib/messages.zh-tw.ts new file mode 100644 index 00000000..b68273e5 --- /dev/null +++ b/apps/web/src/lib/messages.zh-tw.ts @@ -0,0 +1,2874 @@ +import type { MessageKey } from "@/lib/messages.en"; + +/** + * 繁體中文(台灣)介面文案,對照英文目錄逐條校訂。 + * + * 鍵與英文目錄完全一致,因此新增或刪除句子時,型別檢查會指出這裡需要同步; + * 佔位符(`{name}` 等)與英文保持相同拼寫,由程式在執行時填入。 + * + * 台灣軟體用語:儲存、設定、預設、列印、匯出、匯入、檔案、資料夾、群組、鏡像、 + * 復原;產品名、檔案格式、鍵盤按鍵與程式碼保持英文。 + */ +export const MESSAGES_ZH_TW: Record = { + "common.cancel": "取消", + "common.save": "儲存", + "common.delete": "刪除", + "common.rename": "重新命名", + "common.duplicate": "複製", + "dashboard.sendToServer": "放到伺服器上", + "common.language": "語言", + "common.theme": "主題", + "theme.short.system": "系統", + "theme.short.light": "淺色", + "theme.short.dark": "深色", + "theme.short.graphite": "石墨黑", + "aria.originDimensions": "到原點的距離", + "aria.moveDimensions": "移動尺寸", + "aria.axisMovement": "{axis} 方向移動", + "aria.tapeMeasurements": "捲尺量測", + "aria.rulerDimensions": "標尺尺寸", + "aria.cornerRulerTool": "角尺", + "aria.deleteCornerRuler": "移除角尺", + "aria.toggleCornerRulerMode": "切換參考點(端點 / 中點)", + "aria.rulerCoordinateX": "到標尺的 X 距離", + "aria.rulerCoordinateZ": "到標尺的 Y 距離", + "aria.rulerCoordinateElevation": "到標尺的高度", + "ruler.mode.endpoint": "端點(點擊切換為中點)", + "ruler.mode.midpoint": "中點(點擊切換為端點)", + "aria.toggleCornerRulerOcclude": "切換實體是否遮擋標尺", + "ruler.occlude.on": "實體遮擋標尺(點擊使其保持可見)", + "ruler.occlude.off": "標尺一律可見(點擊讓實體可遮擋)", + "ruler.coordinate.x": "到標尺的 X 位置", + "ruler.coordinate.z": "到標尺的 Y 位置", + "ruler.coordinate.elevation": "到標尺的高度", + "aria.workplane": "工作平面", + "aria.alignmentHandles": "對齊手柄", + "aria.mirrorHandles": "鏡像手柄", + "aria.colorPresets": "{name}:預設顏色", + "aria.useColor": "{name}:使用 {color}", + "aria.colorHex": "{name}:十六進位值", + "aria.resetColor": "{name}:重設", + "aria.colorValue": "{name} {color}", + "aria.setColor": "設定顏色 {color}", + "brand.home": "layerling 首頁", + "brand.tagline": "適合 3D 列印的簡易 3D CAD", + "editor.loading": "正在載入編輯器", + "dashboard.searchPlaceholder": "搜尋設計", + "dashboard.searchLabel": "搜尋設計", + "dashboard.createDesign": "建立新的 3D 設計", + "dashboard.untitledDesign": "未命名設計 {number}", + "dashboard.copyOf": "{name}(副本)", + "dashboard.copyOfNumbered": "{name}(副本 {number})", + "notice.createdFromHistory": "已從該狀態建立「{name}」。它正在起始頁等待。", + "dashboard.projectOnGitHub": "在 GitHub 上進一步了解這個專案", + "dashboard.releaseNotes": "版本說明 v{version}", + "dashboard.footerHelp": "頁尾", + "dashboard.forum": "討論區", + "dashboard.userGuide": "使用者指南", + "dashboard.sponsor": "支援專案", + "footer.trademark": "Tinkercad 是 Autodesk, Inc. 的商標。layerling 是獨立專案,與 Autodesk 無關聯,也未獲其認可或贊助。", + "dashboard.updateAvailable": "有可用更新:{version}", + "newVersion.title": "layerling 新版本已就緒", + "newVersion.body": "此頁面啟動時版本為 {current};伺服器現在已是 {latest}。重新載入即可切換——你的設計保留在此瀏覽器中,目前開啟的設計會先儲存,再原樣還原。", + "newVersion.titleMismatch": "此頁面有一部分來自其他版本", + "newVersion.bodyMismatch": "此頁面稍後載入的某個檔案與其餘部分不符,通常發生在更新後,或使用了舊版本的儲存副本。重新載入即可修復——你的設計保留在此瀏覽器中,目前開啟的設計會先儲存,再原樣還原。", + "newVersion.reload": "儲存並重新載入", + "newVersion.later": "稍後", + "dashboard.updateLocalHint": "你是在這台電腦上執行 layerling:下次啟動時,「啟動 layerling」捷徑會取得更新。點擊即可查看步驟。", + "dashboard.updateBannerText": "layerling 有新版本可用:{latest}(已安裝:{current})", + "dashboard.updateBannerLink": "版本說明與下載", + "tabs.newerVersion": "另一個分頁已在執行 layerling {version},這個分頁仍是 {current}。請重新載入,否則它會繼續以舊版本儲存。", + "tabs.alreadyOpen": "layerling 已在另一個分頁開啟。最好在那裡繼續工作,並關閉這個分頁。", + "tabs.closeRefused": "瀏覽器不允許這個分頁自行關閉。請用 Ctrl+W 或分頁上的叉號關閉。", + "tabs.closeThis": "關閉這個分頁", + "tabs.keepHere": "在此繼續工作", + "tabs.sameProject": "這個設計也在另一個分頁開啟。兩者都會自動儲存並互相覆蓋——請只在其中一個分頁繼續工作。", + "tabs.reload": "重新載入", + "dashboard.updateDismiss": "關閉更新通知", + "dashboard.importGeometry": "開啟設計或匯入幾何", + "dashboard.continueWorkplane": "繼續工作平面", + "dashboard.sharedProjects": "伺服器上", + "dashboard.projects": "設計", + "dashboard.newFolderTitle": "為這個瀏覽器的設計建立資料夾", + "dashboard.folderTrailLabel": "此資料夾的路徑", + "dashboard.parentFolderRoot": "返回所有設計", + "dashboard.folderEmpty": "空資料夾", + "dashboard.folderDesignsOne": "資料夾 · 1 個設計", + "dashboard.folderDesignsMany": "資料夾 · {count} 個設計", + "dashboard.folderDragHint": "拖到另一個資料夾上,即可將這個資料夾放入其中", + "dashboard.dragHintServer": "拖到資料夾或伺服器資料夾上,即可將這個設計移到那裡", + "dashboard.folderEmptyTitle": "這個資料夾還沒有內容", + "dashboard.folderEmptyHint": "將設計拖到資料夾上,或在設計選單中選擇「移動到 …」。在此新建的設計會放入這個資料夾。", + "dashboard.moveToRoot": "設計(無資料夾)", + "dashboard.moveNoFolders": "還沒有資料夾。用「新增資料夾」建立一個。", + "dashboard.deleteFolderBodyRoot": "要刪除資料夾 {name} 嗎?其中的內容會移到設計的最上層。不會刪除任何設計。", + "dashboard.deleteFolderBodyIn": "要刪除資料夾 {name} 嗎?其中的內容會移到資料夾 {parent}。不會刪除任何設計。", + "dashboard.projectsVisibleOne": "此瀏覽器中有 1 個", + "dashboard.projectsVisibleMany": "此瀏覽器中有 {count} 個", + "dashboard.serverFolderCountOne": "1 個設計", + "dashboard.serverFolderCountMany": "{count} 個設計", + "dashboard.sortLabel": "排序設計", + "dashboard.backupAll": "全部備份", + "dashboard.newOnServer": "伺服器上的新設計", + "dashboard.newOnServerTitle": "新設計會從伺服器資料夾開始,因此從第一次修改起就儲存在那裡。此瀏覽器中的設計維持不變。", + "dashboard.newOnServerLockedTitle": "由伺服器設定:每個新設計都從伺服器資料夾開始。", + "dashboard.sendAllToServer": "全部放到伺服器上", + "dashboard.sendAllToServerTitle": "將此瀏覽器中的每個設計都放入伺服器資料夾。此後每個設計都會自行儲存在那裡。", + "dashboard.backupAllTitle": "將所有設計和自訂形狀儲存到一個檔案——「開啟設計或匯入幾何」可將它們全部還原,在另一台電腦上也可以", + "dashboard.restoreBackup": "還原備份", + "dashboard.restoreBackupTitle": "選擇由「全部備份」建立的備份檔案:其中所有設計和自訂形狀都會還原,已經在這裡的設計則會略過", + "dashboard.backupFallbackName": "設計", + "dashboard.sortRecent": "最近", + "dashboard.sortName": "名稱", + "dashboard.viewLabel": "設計檢視", + "dashboard.viewGrid": "格狀檢視", + "dashboard.viewList": "清單檢視", + "dashboard.emptyTitle": "還沒有設計", + "dashboard.emptyHint": "建立一個 3D 設計,它就會顯示在這裡。", + "welcome.teaserTitle": "歡迎使用 layerling", + "welcome.teaserHint": "一份簡短指南,特別適合從 Tinkercad 轉換過來的人", + "welcome.lead": "layerling 是直接在瀏覽器中進行 3D 列印的 CAD——和 Tinkercad 一樣易用,同時邁向 Fusion 360。免費、不需帳號、不需安裝——你建立的內容都留在這台電腦上。", + "welcome.switchTitle": "熟悉 Tinkercad 嗎?", + "welcome.switchBody": "那你馬上就能上手:把形狀拖到工作平面、用群組挖孔、對齊、鏡像、綁定、按住 Alt 拖曳複製——操作方式刻意保持一致。只是不再受那邊讓你困擾的限制。在「設定 → 外觀」中一鍵就能讓工作區看起來一樣。", + "welcome.gapTitle": "layerling 多了什麼", + "welcome.gap1": "邊的倒角與圓角,圓角半徑還能沿邊變化,隨時復原或修改,全程採用精確的 CAD 幾何,一路帶進 STEP 檔案。", + "welcome.gap2": "將實體抽殼(壁厚均勻),並用平面分割,也可以斜切。", + "welcome.gap3": "具備精確尺寸與圓角的草圖,可擠出成實體、繞軸旋轉或沿路徑掃掠。", + "welcome.gap4": "螺紋:螺絲、螺帽、螺柱與攻牙孔,涵蓋公制、UNC/UNF 與惠氏螺紋。", + "welcome.gap5": "可排成直線、圓形或螺旋的陣列,以及將形狀包覆到圓柱。", + "welcome.gap6": "可與 CAD 程式交換 STEP,另支援 STL、3MF、OBJ 與 SVG——還有量測、剖視圖,以及可回看先前狀態的歷史記錄。", + "welcome.gap7": "約 220 款印表機的印表機設定,附懸垂警告、標示懸垂與線材估算。", + "welcome.gap8": "AI 可以透過 MCP 介面依需求一起建模——需使用你自己執行的 layerling 副本。", + "welcome.localTitle": "安裝成應用程式或自行架設", + "welcome.localBody": "安裝成應用程式後,layerling 就像一般程式一樣啟動,擁有自己的圖示與視窗,甚至不需連網——在 Chrome 或 Edge 中點一下即可。若你更想自行架設、讓資料不離開家裡:在 Windows 上只要在 PowerShell 輸入一行指令,還會在桌面建立捷徑。若使用 NAS 或家用伺服器,有現成的 amd64 與 arm64 Docker 映像;在那裡設計也可以存放在伺服器上,讓家中每台裝置看到相同的設計。步驟請見指南中「安裝與自行架設」一章。", + "welcome.step1Title": "開始一個設計", + "welcome.step1Body": "「建立新的 3D 設計」會開啟空白的工作平面。既有檔案則透過旁邊的圖磚開啟。", + "welcome.step2Title": "放置形狀", + "welcome.step2Body": "從形狀庫(功能區左上角的「形狀」)把長方體、圓柱、文字或任何其他形狀拖到工作平面,再設定尺寸與位置。尺寸也可以輸入百分比:50% 就是減半。「透明」可讓你透視實體。", + "welcome.step3Title": "用挖空體挖出孔洞", + "welcome.step3Body": "每個形狀不是實體就是挖空體。群組後,挖空體會去除材料——孔、槽與凹槽就是這樣做出來的。物件清單(Ctrl+Shift+O)會列出每個部件,包括已群組的部件,以及它是實體還是挖空體;其搜尋也能找到群組內的部件。「編輯群組」(E,或雙擊)可修改群組中的單一部件;「完成」則會重新建立群組。", + "welcome.step4Title": "修整邊緣並匯出", + "welcome.step4Body": "倒角與圓角作用於你點擊的邊。完成後,以 STL 或 3MF 送到切片軟體,或以 STEP 送到 CAD。", + "welcome.moreTitle": "layerling 還能做什麼", + "welcome.moreHollowTitle": "抽殼", + "welcome.moreHollowBody": "以均勻壁厚抽殼,可任選開口的側面(上、下、前、後、左、右,也可組合)或完全封閉——內側邊緣可圓角或保持尖角。", + "welcome.moreDeleteFaceTitle": "刪除面", + "welcome.moreDeleteFaceBody": "點擊圓角、孔或凸塊的面並將它們刪除——周圍的面會延伸補上缺口,實體仍保持精確,方便繼續倒圓角與匯出 STEP。", + "welcome.moreSplitTitle": "分割", + "welcome.moreSplitBody": "用可移動與傾斜的平面將實體或孔一分為二,做出斜切——適合列印平台放不下的大型零件。", + "welcome.moreSketchTitle": "草圖", + "welcome.moreSketchBody": "繪製輪廓、通過三點畫出真正的圓弧、彎曲任何直邊(雙擊實體可再次開啟其草圖)、繪製時輸入線段長度與角度(「50<30」)或以 15° 為單位吸附、輸入精確長度的線段與精確角度的轉角、對轉角倒圓角或倒角、沿軸或沿直線鏡像選取範圍、繪製可供端點吸附的建構線、將一個開口端拖到另一端以閉合缺口,然後擠出或繞軸旋轉——也可以只建立有寬度的線條,作為邊框或條紋。", + "welcome.moreLibraryTitle": "形狀庫", + "welcome.moreLibraryBody": "螺紋(公制、UNC/UNF 與 G 管螺紋)、螺栓與螺帽、齒輪、內齒輪與齒條(漸開線齒或圓弧齒,可互相齧合)、彈簧、彎管、由一個輪廓放樣到另一個輪廓(也可扭曲或傾斜)、一端較小的膠囊、文字(可設定字距,包括沿圓弧彎曲,使用自訂字型,也支援阿拉伯文與希伯來文的由右至左,可作為輪廓、剪影或分層的名牌用於多色列印,附鑰匙圈孔——可在側面或你放置的任何位置——還可將字母邊緣圓角;SVG 圖示也可做成分層圖示牌)、由文字或網址產生的 QR Code(單獨、凸起於底板或雕刻)、免組裝鉸鏈、Gridfinity 收納盒(可選隔層)與底板、滾花握把(直紋、交叉紋或圓形)、燕尾接頭、用於水平孔洞的淚滴孔、用於螺絲頭的沉頭孔、錐形沉頭孔與雙錐形沉頭孔等等——之後都還能調整。需要一再使用的實體可存成自訂形狀——存放在瀏覽器或你自己的伺服器上——一鍵就能放進任何設計。", + "welcome.morePatternTitle": "陣列", + "welcome.morePatternBody": "將形狀排成一列或繞圓重複 n 次,用於孔陣列或有齒的環——還能一次按百分比縮放多個部件。", + "welcome.moreBundleTitle": "綁定", + "welcome.moreBundleBody": "像 Tinkercad 一樣用 Ctrl+B 把部件綁在一起,而不合併它們——顏色會保留,匯出時每個部件都是獨立實體,適合多色列印。群組也能透過「多色」開關以各自的顏色顯示每個部件,即使它已經與孔合併。", + "welcome.moreWorkplaneTitle": "在任何面上設定工作平面", + "welcome.moreWorkplaneBody": "直接把形狀放到斜面或側面,並可隱藏平面以獲得清晰檢視,而不會取消它。", + "welcome.morePlaceTitle": "點擊放置", + "welcome.morePlaceBody": "新形狀會跟著指標移動,並落在你點擊的位置——可在設定中關閉。", + "welcome.moreSnapTitle": "吸附到其他形狀", + "welcome.moreWindowsTitle": "清晰的檢視", + "welcome.moreWindowsBody": "物件清單、設定與工具面板可以拖到工作平面上的任何位置,拖曳視圖立方體可轉動檢視,點擊其角與邊可從斜角顯示模型,平台也可隱藏,方便從下方觀察。在實體上按右鍵會顯示最常用的指令,檢視還能存成圖片。", + "welcome.moreSnapBody": "移動時,邊與中心會鎖定到鄰近形狀,並以參考線顯示位置——拖曳時按住 Alt 可暫停吸附。按住 Shift 可讓移動限制在單一軸向,一開始就按住 Alt 則會拖出副本,與 Tinkercad 相同。新形狀會貼放在指標下方的面上,斜面也一樣;按 C 可將選取範圍以同樣方式放到另一個面上,就像 Tinkercad 的巡航(Cruise)。", + "welcome.moreGridTitle": "自訂吸附格線", + "welcome.moreGridBody": "在設定中新增量測單位,例如晶片與洞洞板的 2.54 mm 腳距;吸附選單會提供整格、半格與四分之一格。", + "welcome.moreLayFlatTitle": "平放在面上", + "welcome.moreLayFlatBody": "點擊一個面,部件就會以該面朝下放在平台上——一鍵得到最佳列印方向。「對齊面」可在兩個部件之間做同樣的事:先點一個部件的面,再點另一個部件的面,它們就會接觸或貼平,並可設定間隙。", + "welcome.morePivotTitle": "旋轉軸心", + "welcome.morePivotBody": "繞管端的軸線或面的中心旋轉,而不是繞實體中心。單一實體上,軸心會跟著它保留。", + "welcome.moreMeasureTitle": "量測", + "welcome.moreMeasureBody": "捲尺、標尺與角尺、到原點的距離——也可用於多個選取的實體——工作平面上的備註,以及剖視圖:切開模型查看內部、在剖面上量測壁厚與間隙,並存成 SVG 供雷射切割或製作模板。", + "welcome.moreSaveTitle": "存到你的資料夾", + "welcome.moreSaveBody": "在 Chrome 與 Edge 中,你可以自行選擇資料夾與名稱,Ctrl+S 會再次把設計存進那個檔案——開啟過的檔案會就地取代。其他瀏覽器則會下載檔案。", + "welcome.moreBackupTitle": "備份所有設計", + "welcome.moreBackupBody": "一鍵將所有設計打包成一個檔案;開啟它就能全部還原,在這個或其他瀏覽器中都一樣。", + "welcome.morePrintersTitle": "可直接列印", + "welcome.morePrintersBody": "約 220 款印表機及其列印平台;當物件超出平台或過高時,layerling 會提出警告,標示需要支撐的懸垂,並在匯出時估算重量與線材用量。", + "welcome.moreImportTitle": "匯入", + "welcome.moreImportBody": "支援 STL、OBJ 與 3MF(含顏色)、STEP 與 SVG,以及作為參考的圖片——還能把其他 layerling 設計中的部件直接匯入目前開啟的設計。SVG 會以草圖匯入:一個區域、外側或內側的描邊,或不含孔的剪影,例如用於餅乾模具;切換成旋轉草圖後,它會變成花瓶之類的圓形實體。SVG 圖案或文字可以包覆到圓柱上、凸起或雕刻。", + "installHint.title": "將 layerling 安裝為應用程式", + "installHint.body": "安裝成應用程式後,layerling 啟動更快、不需連網,有自己的圖示與視窗,也不必每次重新載入。你不會有任何損失:設計維持原樣,layerling 仍會在有新版本時通知你。", + "installHint.install": "立即安裝", + "installHint.dismiss": "隱藏這個提示", + "installHint.later": "暫時不要", + "tabletHint.title": "使用平板電腦?", + "tabletHint.body": "指南中有一章專門說明手指與觸控筆操作:選取多個實體、轉動檢視、長按選單,以及在 iPad 上要注意的事項。", + "tabletHint.open": "開啟該章節", + "tabletHint.dismiss": "隱藏這個提示", + "storageNotice.title": "你的設計存在這個瀏覽器中——請備份", + "storageNotice.body": "layerling 對存放在瀏覽器中的設計不負任何責任。瀏覽器可能故障,瀏覽器更新也可能造成問題。因此請不時儲存設計:「全部備份」會把所有設計放進一個檔案,開啟中的設計也可以用「匯出(LYL)」存成檔案。", + "supportNudge.title": "喜歡 layerling 嗎?", + "supportNudge.body": "layerling 免費且沒有廣告。如果它對你有用,你可以幫忙分攤伺服器與後續開發的費用。", + "supportNudge.more": "支援專案", + "supportNudge.dismiss": "關閉這個提示", + "update.previewShow": "預覽:這次更新帶來什麼?", + "update.previewHide": "隱藏預覽", + "update.previewLoading": "正在載入預覽 …", + "update.previewNone": "這個版本沒有預覽。版本說明在連結裡。", + "whatsNew.title": "自你上次造訪以來的新增內容({from} → {to})", + "whatsNew.titleRecent": "最近新增的內容", + "whatsNew.version": "版本 {version}", + "whatsNew.earlier": "顯示更早的版本({count})", + "whatsNew.beforeLastVisit": "上次造訪之前", + "whatsNew.earlierHeading": "更早的版本", + "whatsNew.dismiss": "知道了", + "whatsNew.close": "關閉這個提示", + "whatsNew.footerLink": "有哪些新功能?", + "whatsNew.excerpt": "這只是節選。一個版本還可能包含更多較小的變更與錯誤修正。", + "whatsNew.releaseNotes": "所有變更都記錄在 GitHub 的版本說明中。", + "palette.open": "搜尋命令(Ctrl+K)", + "palette.title": "命令搜尋", + "palette.placeholder": "搜尋工具、形狀或命令 …", + "palette.close": "關閉命令搜尋", + "palette.empty": "找不到任何結果。換個詞試試,例如「圓角」、「鏡像」或「圓柱體」。", + "palette.disabled": "目前無法使用 – 通常是因為沒有選取任何內容。", + "palette.hint": "↑ ↓ 選擇 · Enter 執行 · Esc 關閉", + "palette.addShape": "新增形狀:{shape}", + "palette.group.mode": "模式", + "palette.group.objects": "物件", + "palette.selectObject": "選取實體:{name}", + "palette.recent": "最近使用", + "palette.all": "所有命令", + "palette.switchGeometry": "切換至 3D 編輯器", + "palette.switchSketch": "切換至草圖模式", + "shortcuts.group.help": "說明", + "shortcuts.commandSearch": "開啟命令搜尋", + "interactiveHelp.title": "互動式說明", + "interactiveHelp.subtitle": "點擊任何項目即可查看說明", + "interactiveHelp.named": "「{name}」", + "interactiveHelp.close": "關閉說明視窗", + "interactiveHelp.nothing": "這裡沒有可說明的內容。請指向按鈕、欄位、控制柄或視窗。", + "interactiveHelp.loading": "正在指南中查詢 …", + "interactiveHelp.noIndex": "這裡還無法使用指南。請從起始頁開啟。", + "interactiveHelp.panelOnly": "這個部分沒有自己的名稱。點擊其視窗上的問號,即可開啟指南中對應的內容。", + "interactiveHelp.sectionOnly": "指南中有關於這個部分的章節。", + "interactiveHelp.noMatch": "指南中還沒有關於「{name}」的內容。試試指南的搜尋功能。", + "interactiveHelp.also": "指南中也有", + "interactiveHelp.search": "搜尋指南", + "interactiveHelp.open": "在指南中開啟", + "interactiveHelp.started": "互動式說明已開啟:點擊按鈕、欄位或視窗即可查看說明。按 Esc 結束。", + "interactiveHelp.ended": "互動式說明已關閉", + "shortcuts.interactiveHelp": "開啟或關閉互動式說明", + "installHint.chromium": "點擊網址列右側的圖示安裝,或從瀏覽器選單的「安裝為應用程式」安裝。", + "installHint.safariMac": "在 Safari 中:檔案選單 →「加入 Dock」。", + "installHint.ios": "在 Safari 中:分享圖示 →「加入主畫面」。", + "installHint.firefox": "Firefox 無法安裝應用程式 – layerling 仍可在此分頁中離線啟動。", + "welcome.moreOfflineTitle": "可離線使用", + "welcome.moreOfflineBody": "首次造訪之後,layerling 沒有網路也能啟動 - 像一般程式一樣安裝,設計就留在你自己的電腦上。", + "welcome.moreAiTitle": "用 AI 建模", + "welcome.moreAiBody": "透過 MCP 介面,AI 助理可以建立和編輯形狀,並在它自己開啟的編輯器中操作。這需要你自行執行的副本(npm run dev 或 Docker 映像);在 layerling.com 上,AI 連線是關閉的。", + "welcome.morePointsTitle": "參考點", + "welcome.moreSearchTitle": "命令搜尋", + "welcome.moreSimplifyTitle": "簡化網格", + "welcome.moreSimplifyBody": "三角形數量極多的匯入網格可以縮減到一小部分,並提供前後對照檢視與滑桿 - 讓切割、群組和拖曳保持流暢。", + "welcome.moreHistoryTitle": "歷史記錄", + "welcome.moreLookTitle": "外觀隨你調整", + "welcome.moreLookBody": "背景與工作平面、X、Y、Z 軸箭頭、每個實體的邊線、草圖色彩,以及對比度、陰影與光線方向,都可以在設定中自行調整 - 例如避免深色實體彼此混在一起。在較慢的電腦上,快速模式會一次關閉所有耗效能的選項。", + "welcome.moreHistoryBody": "用滑桿回看專案任何較早的狀態,不會更動任何內容 - 可以匯出該狀態、從中建立新專案,或把單一物件帶回目前設計。", + "welcome.moreDrawingTitle": "給加工現場的工程圖", + "welcome.moreDrawingBody": "匯出 → 工程圖:在一張 ISO 圖紙上以 1:1 呈現前視圖、俯視圖與側視圖,標出整體尺寸、隱藏邊與圓孔表 – 可輸出為 PDF 或 SVG,用來列印或帶到車床與銑床。", + "welcome.moreSearchBody": "按 Ctrl+K,輸入工具、形狀或命令的名稱,即可直接跳至該項目 - 支援英文或德文,每一項旁都會顯示鍵盤快速鍵。設計中的實體也能用名稱找到。", + "welcome.morePointsBody": "在實體上按右鍵,用點標出它的中心、角點或邊的中點 - 這些點不會被列印,形狀會吸附到它們 - 之後就能把孔精確放在另一個零件的中心。", + "welcome.videosTitle": "layerling 相關影片", + "welcome.videosHint": "由他人製作,並非本專案出品。連結會在新分頁中開啟 YouTube;在你點擊之前,不會從那裡載入任何內容。", + "welcome.help": "編輯器中的「說明」群組收錄了簡明指南與所有鍵盤快速鍵的清單。頁尾的「錯誤回報」會儲存你的設計,以及論壇或 GitHub 回報所需的全部內容。", + "welcome.guideLink": "閱讀附圖的完整使用指南", + "welcome.guideUrl": "/guide/index.html", + "guide.helpLink": "在使用指南中閱讀相關說明", + "guide.fullGuide": "開啟附圖的完整使用指南", + "guide.videos": "他人製作的影片:", + "dashboard.projectOptions": "設計選項", + "dashboard.projectOptionsFor": "{name} 的設計選項", + "dashboard.optionsFor": "{name} 的選項", + "shared.optionsFor": "{name} 的伺服器設計選項", + "shared.menuFor": "伺服器設計 {name} 的選項", + "dashboard.noSnapshot": "尚無快照", + "dashboard.shapeCount": "{count} 個形狀", + "dashboard.today": "今天", + "dashboard.justNow": "剛剛", + "dashboard.minutesAgo": "{count} 分鐘前", + "shared.title": "伺服器上的設計", + "shared.refresh": "重新整理", + "shared.backToLocal": "返回此瀏覽器中的設計", + "shared.trailLabel": "伺服器資料夾中的路徑", + "shared.trailRoot": "伺服器", + "shared.newFolder": "新增資料夾", + "shared.newDesign": "新增設計", + "shared.newFolderTitle": "新增資料夾", + "shared.newFolderCancel": "放棄新增資料夾", + "shared.newFolderSuggestion": "新增資料夾", + "shared.folderName": "資料夾名稱", + "shared.createFolder": "建立", + "shared.renameFolderTitle": "重新命名資料夾", + "shared.renameFolderCancel": "取消重新命名", + "shared.deleteFolderTitle": "刪除資料夾", + "shared.deleteFolderCancel": "取消刪除", + "shared.folderOptions": "資料夾選項", + "shared.folderOptionsFor": "資料夾 {name} 的選項", + "shared.folderMenuFor": "資料夾 {name} 的選項", + "shared.moveTo": "移至 …", + "shared.searchCountOne": "1 筆符合「{query}」的結果", + "shared.searchCountMany": "{count} 筆符合「{query}」的結果", + "shared.searchHitsOne": "伺服器上有 1 筆符合結果", + "shared.searchHitsMany": "伺服器上有 {count} 筆符合結果", + "shared.searchTruncated": "僅顯示前幾筆。", + "shared.searchClear": "返回資料夾", + "shared.searchEmptyTitle": "找不到結果", + "shared.searchEmptyHint": "伺服器上沒有任何設計或資料夾的名稱包含這個詞。", + "shared.searchFolderIn": "{name} 中的資料夾", + "shared.searchFolderRoot": "伺服器資料夾頂層的資料夾", + "shared.openFolderOf": "開啟資料夾 {name}", + "shared.moveToTitle": "移動 {name}", + "shared.moveToCancel": "取消移動", + "shared.moveNoTargets": "這裡沒有可移入的資料夾。請先建立一個。", + "shared.folderNameBadStart": "以點開頭的名稱在伺服器上會保持隱藏。", + "shared.folderNameBadChars": "不允許使用斜線、引號以及 < > : | ? *。", + "shared.folderNameTaken": "這裡已經有同名資料夾。", + "shared.folderMeta": "資料夾", + "shared.parentFolderRoot": "返回伺服器", + "shared.parentFolderIn": "返回 {name}", + "shared.dragHint": "拖曳到資料夾上,即可將此設計移到該處", + "shared.options": "伺服器設計選項", + "shared.emptyHint": "在匯出視窗中將 layerling 設計(.lyl)儲存到伺服器。", + "shared.emptyTitle": "這裡還沒有任何內容", + "shared.loadingTitle": "正在載入伺服器設計", + "confirm.deleteProjectTitle": "刪除設計?", + "confirm.deleteProjectCancel": "取消刪除設計", + "confirm.deleteSharedTitle": "要從伺服器刪除設計?", + "confirm.deleteSharedCancel": "取消刪除伺服器設計", + "confirm.renameTitle": "重新命名設計", + "confirm.renameCancel": "取消重新命名設計", + "confirm.projectName": "設計名稱", + "confirm.deleteProjectBody": "確定要刪除設計 {name} 嗎?", + "confirm.deleteSharedBody": "要從伺服器刪除 {name}?使用此伺服器的所有人都會看不到它,此瀏覽器中的工作副本也會一併刪除。", + "confirm.deleteFolderBody": "資料夾 {name} 將從伺服器刪除。", + "confirm.deleteFolderProjectOne": "其中的設計也會一併刪除。", + "confirm.deleteFolderProjectMany": "其中的 {count} 個設計也會一併刪除。", + "confirm.deleteFolderSubfolders": "子資料夾及其中的所有內容也會一併刪除。", + "confirm.clearTapeTitle": "要刪除所有量測?", + "confirm.clearTapeCancel": "取消刪除量測", + "confirm.clearTapeBody": "此設計中的所有捲尺量測都會被刪除。此操作無法復原。", + "confirm.emptyProjectTitle": "要保留空設計?", + "confirm.emptyProjectBody": "{name} 是空的。要保留嗎?", + "confirm.yes": "是", + "confirm.no": "否", + "confirm.cancel": "取消", + "confirm.delete": "刪除", + "sketch.revolvePreview": "旋轉 3D 預覽", + "sketch.revolvePreviewTitle": "3D 預覽", + "sketch.revolvePreviewEmpty": "在軸的左側繪製封閉輪廓", + "sketch.revolveAxis": "旋轉軸", + "sketch.shapeMoved": "草圖形狀已移動", + "sketch.shapeResized": "草圖形狀已調整大小", + "sketch.shapeRotated": "選取項目已旋轉", + "sketch.rotateSelection": "旋轉選取項目(Shift:以 15° 為單位)", + "sketch.imageMoved": "草圖影像已移動", + "sketch.imageResized": "草圖影像已調整大小", + "sketch.viewControls": "草圖視圖控制項", + "sketch.resetView": "重設草圖視圖", + "sketch.zoomIn": "放大", + "sketch.showMeasurements": "顯示量測", + "sketch.showPartEdges": "以透視方式顯示零件:它們在草圖平面上的所有邊", + "sketch.zoomOut": "縮小", + "sketch.removeMeasurement": "移除量測", + "sketch.pointActions": "點操作", + "sketch.makeCorner": "設為角點", + "sketch.corner": "角點", + "sketch.segmentActions": "線段操作", + "sketch.curveLine": "曲線化", + "sketch.curveLineHint": "將這條直邊彎成曲線;拖曳兩個控制柄調整形狀", + "sketch.straightenLine": "直線化", + "sketch.straightenLineHint": "將這條曲邊重新拉直", + "sketch.mirror": "鏡像", + "sketch.mirrorHint": "將選取項目複製到軸的另一側", + "sketch.mirrorLeftRight": "左右", + "sketch.mirrorLeftRightHint": "沿穿過平台中央的垂直軸鏡像:副本會落在另一側,左邊或右邊", + "sketch.mirrorTopBottom": "上下", + "sketch.mirrorTopBottomHint": "沿穿過平台中央的水平軸鏡像:副本會落在上方或下方", + "sketch.mirrorAcrossLine": "沿直線", + "sketch.mirrorAcrossLineHint": "沿草圖中的一條直線鏡像:接著點擊該直線", + "sketch.mirrorPickLine": "點擊要沿其鏡像的直線", + "status.sketchMirrored": "已新增鏡像副本", + "status.sketchMirrorNoAxis": "請選取直線作為軸,而不是曲線", + "status.sketchMirrorNothing": "請先選取要鏡像的點或直線", + "sketch.makeSmooth": "設為平滑", + "sketch.splitHandles": "分離控制柄", + "sketch.split": "分割", + "sketch.fillet": "圓角", + "sketch.filletCorner": "圓角化角點", + "sketch.filletCornerDisabled": "選取要圓角的角點", + "sketch.filletRadius": "半徑", + "sketch.filletAppliedMany": "已將 {count} 個角圓角", + "sketch.chamferAppliedMany": "已將 {count} 個角倒角", + "sketch.cornersSkipped": "({count} 個不是兩條直線之間的角)", + "sketch.filletCorners": "將選取的 {count} 個角圓角", + "sketch.chamferCorners": "將選取的 {count} 個角倒角", + "sketch.filletApplied": "角已圓角", + "sketch.chamfer": "倒角", + "sketch.chamferCorner": "倒角化角點", + "sketch.chamferCornerDisabled": "選取要倒角的角點", + "sketch.chamferDistance": "距離", + "sketch.chamferApplied": "角已倒角", + "sketch.apply": "套用", + "sketch.imageWidthUpdated": "草圖影像寬度已更新", + "sketch.imageHeightUpdated": "草圖影像高度已更新", + "sketch.imageOpacityUpdated": "草圖影像不透明度已更新", + "sketch.imageAspectUpdated": "影像寬高比設定已更新", + "sketch.closeImageSettings": "關閉影像設定", + "sketch.lockImage": "鎖定草圖影像", + "sketch.keepProportions": "保持比例", + "sketch.keepProportionsHint": "外框的控制柄與輸入的尺寸會同時等比例伸縮", + "sketch.lockOutline": "鎖定", + "sketch.unlockOutline": "解鎖", + "sketch.lockOutlineHint": "鎖定輪廓(L):之後將無法移動、縮放或變更", + "sketch.unlockOutlineHint": "解鎖輪廓(L)", + "status.sketchOutlineLocked": "輪廓已鎖定:請先解鎖(L)", + "status.selectSketchOutlineLock": "選取要鎖定的輪廓", + "status.sketchOutlineLockedOn": "輪廓已鎖定", + "status.sketchOutlineUnlocked": "輪廓已解鎖", + "sketch.unlockImage": "解鎖草圖圖片", + "sketch.lockImageHint": "鎖定圖片(L)", + "sketch.unlockImageHint": "解鎖圖片(L)。鎖定的圖片會讓點擊穿透;按住 Alt 點擊即可再次選取。", + "sketch.imageLocked": "草圖圖片已鎖定", + "sketch.imageUnlocked": "草圖圖片已解鎖", + "sketch.deleteImage": "刪除草圖圖片", + "sketch.deleteImageHint": "刪除圖片", + "sketch.unlockBeforeDelete": "刪除前請先解鎖圖片", + "sketch.aspectLocked": "已鎖定長寬比", + "sketch.aspectUnlocked": "已解鎖長寬比", + "sketch.imageSettings": "{name} 圖片設定", + "sketch.imageProperties": "屬性", + "sketch.imageWidth": "寬度", + "sketch.imageHeight": "高度", + "sketch.imageOpacity": "不透明度", + "sketch.imagePositionX": "位置 X", + "sketch.imagePositionY": "位置 Y", + "sketch.imageAlign": "對齊", + "sketch.imageRotation": "旋轉", + "sketch.imageRotated": "參考圖已旋轉", + "sketch.centreImageX": "至 X = 0", + "sketch.centreImageY": "至 Y = 0", + "sketch.centreImageAxisHint": "旋轉時,X = 0 即為旋轉軸。", + "sketch.imageCentred": "參考圖已置中", + "sketch.calibrateImage": "校正", + "sketch.calibrateCancel": "取消校正", + "sketch.calibrateFirst": "在圖片上點擊一段已知距離的第一個點。", + "sketch.calibrateSecond": "點擊第二個點。", + "sketch.calibrateLength": "實際距離", + "sketch.calibrateApply": "套用", + "sketch.imageCalibrated": "參考圖已校正", + "sketch.cropImage": "裁切", + "sketch.cropImageDone": "完成裁切", + "sketch.cropImageHint": "向內拖曳控制點:圖片不會被擠壓,只會裁掉邊緣;向外拖曳可復原。", + "sketch.uncropImage": "顯示完整圖片", + "sketch.imageCropped": "參考圖已裁切", + "sketch.imageUncropped": "已取消裁切", + "workspace.gridColor": "網格顏色", + "workspace.backgroundColor": "視窗背景(淺色主題)", + "workspace.surfaceColor": "網格下方的工作平面(淺色主題)", + "workspace.showAxes": "座標軸箭頭", + "workspace.showPlateLabels": "平台標籤", + "workspace.gridLinesGrow": "縮放時網格線變粗", + "workspace.gridLinesGrowHint": "網格線也會鋪在平台上,並隨著放大而變粗,與 Tinkercad 相同。關閉後,無論縮放程度如何,都維持一個像素寬,與草圖一致。", + "workspace.showPlateLabelsHint": "在平台上顯示設計名稱;選擇印表機後,也會顯示印表機名稱與建構體積。", + "workspace.showAxesHint": "在平台前左角顯示 X(紅色,向右)、Y(綠色,向後)與 Z(藍色,向上)箭頭,與座標數值的方向一致。", + "workspace.edgeLines": "所有實體顯示邊線", + "workspace.edgeLinesHint": "為每個實體繪製輪廓,避免深色彼此混在一起。極大的匯入網格不繪製。", + "workspace.strongHoles": "更清楚地顯示孔", + "workspace.strongHolesHint": "孔繪製得更深、更不透明,並加上深色邊線,使其在半透明實體中更醒目。", + "workspace.edgeColor": "邊線顏色", + "workspace.sketchBackground": "草圖:視窗背景(淺色主題)", + "workspace.sketchPlateColor": "草圖:網格下方區域(淺色主題)", + "workspace.sketchGridColor": "草圖:網格顏色(淺色主題)", + "workspace.sketchMatch": "草圖與工作區一致", + "workspace.sketchMatchHint": "草圖沿用工作區的視窗背景、網格下方區域與網格顏色。", + "workspace.shadowStrength": "陰影強度", + "workspace.shadowSoftness": "陰影柔和度", + "workspace.shadowCrisp": "銳利", + "workspace.shadowSoft": "柔和", + "workspace.lightAzimuth": "光照方向", + "workspace.lightFromLeft": "從左方", + "workspace.lightFromFront": "從前方", + "workspace.lightFromRight": "從右方", + "workspace.lightElevation": "光照高度", + "workspace.lightLow": "低", + "workspace.lightAbove": "從上方", + "workspace.classicLook": "經典外觀", + "workspace.classicLookHint": "白色地面、淡藍色網格(每隔 1 公分加深一條線)、黑色邊線、上方光源與柔和陰影。之後所有設定仍可調整。", + "workspace.gridMajorEvery": "加深網格線間隔", + "workspace.gridMajorSteps": "{count} 個網格間距", + "workspace.gridMajorColor": "加深線顏色", + "workspace.lightReset": "重設光照與陰影", + "workspace.shadeContrast": "著色對比度", + "workspace.shadeSoft": "柔和", + "workspace.shadePunchy": "強烈", + "editor.group.home": "首頁", + "editor.group.clipboard": "剪貼簿", + "editor.group.history": "歷史記錄", + "editor.group.shapes": "形狀", + "editor.group.visibility": "可見性", + "editor.group.combine": "合併", + "editor.group.modify": "修改", + "editor.group.arrange": "排列", + "editor.group.manage": "管理", + "editor.tool.note": "備註", + "editor.tool.copy": "複製", + "editor.tool.paste": "貼上", + "editor.tool.duplicate": "建立副本", + "editor.tool.delete": "刪除", + "editor.tool.undo": "復原", + "editor.tool.redo": "重做", + "editor.tool.history": "歷史記錄", + "editor.tool.hideSelected": "隱藏選取項目", + "editor.tool.showSelected": "顯示選取項目", + "editor.tool.showOutliner": "顯示物件清單", + "editor.tool.hideOutliner": "隱藏物件清單", + "editor.tool.group": "群組", + "editor.tool.ungroup": "取消群組", + "editor.tool.bundle": "綁定", + "editor.tool.intersect": "布林交集", + "editor.tool.intersectPreview": "顯示共同部分", + "status.intersectPreviewOn": "正在顯示所選形狀的共同部分。移動形狀即可看到變化;{tool} 會套用,Esc 關閉預覽。", + "status.intersectPreviewOff": "預覽已關閉:剩餘形狀不足兩個,無法求共同部分", + "status.intersectPreviewEmpty": "這些形狀目前沒有共同部分", + "status.intersectPreviewTooBig": "三角形過多,無法預覽共同部分", + "status.intersectionEmptyKept": "這些形狀沒有共同部分,因此沒有交集。未做任何變更。", + "editor.tool.align": "對齊", + "editor.tool.mirror": "鏡像", + "editor.tool.rotationPivot": "設定旋轉中心", + "editor.tool.array": "陣列", + "editor.tool.split": "分割", + "editor.tool.snapToGrid": "吸附至網格", + "editor.tool.chamfer": "倒角", + "editor.tool.fillet": "圓角", + "editor.tool.hollow": "抽殼", + "editor.tool.deleteFace": "刪除面", + "editor.tool.simplify": "簡化網格", + "mate.title": "對齊面", + "mate.subtitle": "將一個面貼合到另一個面", + "mate.cancel": "取消對齊面", + "mate.step.source": "1. 點擊此實體上要移動的面。", + "mate.step.target": "2. 點擊它要貼合的另一個實體的面。", + "mate.step.ready": "兩個面均已選取。選擇方式與間隙,然後套用。", + "mate.mode": "方式", + "mate.mode.against": "面對面", + "mate.mode.flush": "齊平", + "mate.gap": "間隙", + "mate.apply": "對齊", + "shell.title": "抽殼實體", + "shell.subtitle": "等厚壁", + "shell.help": "壁會向內生長,外側維持不變。", + "shell.wall": "壁厚", + "shell.openings": "開口側", + "shell.side.top": "頂部", + "shell.side.bottom": "底部", + "shell.side.front": "前", + "shell.side.back": "後", + "shell.side.left": "左", + "shell.side.right": "右", + "shell.side.closed": "封閉(內部空腔)", + "shell.sidesNone": "無開口:四周密封。", + "shell.sidesHint": "可合併多個側面。", + "shell.edges": "內部邊", + "shell.edges.round": "圓角", + "shell.edges.sharp": "尖角", + "shell.edgesHint": "作用於內壁分開處,例如階差或開口。一般長方體的內角會保持尖角——先將外側邊做圓角,內部才會是圓角。", + "shell.apply": "抽殼", + "shell.working": "正在抽殼…", + "shell.cancel": "取消抽殼", + "shell.errorTooThick": "此實體的壁無法這麼厚。請選擇較薄的壁。", + "shell.errorRoundedEdges": "此長方體的上下邊帶有圓角,壁厚必須明顯小於該圓角。請選擇較薄的壁,或先將上下邊的圓角設為 0 再抽殼。若仍失敗,可用頁尾的「錯誤回報」儲存設計以便回報。", + "shell.errorCannotHollow": "此實體無法抽殼,即使壁很薄也不行。它的輪廓對 CAD 核心而言可能不夠乾淨;與外緣相接的挖空也可能造成此問題,例如切到匯入形狀底邊的開口。", + "shell.errorNoFlatTop": "此實體沒有可保持開放的平頂面。球體與自由形狀無法用這種方式抽殼。", + "shell.errorNoFlatBottom": "此實體沒有可保持開放的平底面。", + "edge.errorOldRevolve": "此旋轉實體是由舊版 layerling 以網格方式建立。開啟「編輯草圖」並重新完成,即可將其轉為精確實體;之後便能抽殼、圓角與倒角。", + "shell.errorNoFlatSide": "此實體在所選側沒有可保持開放的平面。", + "shell.errorProjectChanged": "抽殼過程中物件或專案已變更;請重試。", + "shell.errorFailed": "無法對此實體抽殼。請選擇其他壁厚或開口。", + "status.shelled": "已抽殼,壁厚 {size} mm", + "status.shelledClosed": "已抽殼,壁厚 {size} mm,四周封閉:空腔在內部,僅能在剖視圖中看到", + "status.shelledMcp": "MCP 已對物件抽殼,壁厚 {size} mm", + "status.shellRebuilt": "已重新計算壁厚,回復為 {size} mm", + "status.shellRebuildFailed": "無法以此尺寸重新計算抽殼。壁已隨實體一同縮放。", + "status.sketchRebuildFailed": "無法以此尺寸重建草圖實體。編輯草圖後,倒角與圓角才能再次作用於它。", + "edge.revertShell": "抽殼(壁厚 {size} mm)", + "deleteFace.title": "刪除面", + "deleteFace.subtitle": "相鄰面會閉合缺口", + "deleteFace.help": "點擊要刪除的面;再次點擊可取消該面。周圍的面會延伸直到缺口閉合:圓角、孔或凸塊隨之消失,實體仍保持精確。", + "deleteFace.preparing": "正在讀取面…", + "deleteFace.countNone": "尚未選取面", + "deleteFace.countOne": "已選取 1 個面", + "deleteFace.countMany": "已選取 {count} 個面", + "deleteFace.apply": "刪除", + "deleteFace.working": "正在刪除面…", + "deleteFace.cancel": "取消刪除面", + "deleteFace.errorUnchanged": "這些面無法刪除:周圍的面無法閉合缺口。請選取要移除部分的每個面,例如圓角的全部面或孔的整個壁,且不要選到實體本身的面。", + "deleteFace.errorMesh": "此實體沒有可刪除的精確面:layerling 會將其保留為網格,如同匯入的 STL、OBJ 或 3MF,以及分割、包覆或簡化後的實體,或長文字等非常精細的形狀。以 STEP 匯入的零件具有精確面。", + "deleteFace.errorResized": "此實體在開啟「縮放時保持邊尺寸」的情況下被縮放,因此其精確面已不再符合尺寸。請復原縮放、刪除面,然後再次縮放。", + "deleteFace.errorProjectChanged": "刪除面的過程中物件或專案已變更;請重試。", + "deleteFace.errorFailed": "無法刪除這些面。請選取其他面。", + "deleteFace.errorNoFaces": "無法讀取此實體的面。請關閉工具後再重新開啟。", + "deleteFace.errorTooSlow": "刪除這些面耗時過久,已在 45 秒後停止;未做任何變更。CAD 核心無法在此零件上處理這些面:請選取其他面,或減少數量。", + "status.facesDeletedOne": "已刪除 1 個面", + "status.facesDeletedMany": "已刪除 {count} 個面", + "status.facesDeletedMcpOne": "MCP 已刪除 1 個面", + "status.facesDeletedMcpMany": "MCP 已刪除 {count} 個面", + "status.deleteFaceCancelled": "已取消刪除面", + "status.deleteFaceCancelledChanged": "因物件已變更,刪除面已取消", + "edge.revertDeleteFaceOne": "已刪除面(1 個面)", + "edge.revertDeleteFaceMany": "已刪除面({count} 個面)", + "editor.tool.dropToWorkplane": "放到工作平面", + "editor.tool.layFlat": "平放於面", + "editor.tool.mateFaces": "對齊面", + "editor.tool.centerOnWorkplane": "置中於工作平面", + "editor.homeDashboard": "首頁儀表板", + "editor.addShape": "新增形狀", + "editor.visibilityOptions": "可見性選項", + "editor.import": "匯入", + "editor.export": "匯出", + "editor.workspaceSettings": "工作區設定", + "editor.keyboardShortcuts": "鍵盤快速鍵", + "editor.bugReport": "錯誤回報", + "editor.bugReportHint": "將錯誤回報儲存為 ZIP:內含設計及其版本、瀏覽器與最近的訊息,可附加於論壇或 GitHub", + "bugReport.fileSuffix": "bug-report", + "status.bugReportBuilding": "正在建立錯誤回報…", + "status.bugReportSaved": "錯誤回報已儲存為 ZIP。將該檔案附加到你在論壇或 GitHub 的貼文。", + "editor.group.help": "說明", + "editor.guide": "快速指南", + "guide.title": "快速指南", + "guide.close": "關閉快速指南", + "guide.footer": "以上功能的按鍵:本按鈕旁邊的鍵盤按鈕。", + "guide.group.view": "移動視角", + "guide.view.orbit": "按滑鼠右鍵轉動視角,按中鍵平移,滾輪縮放。Ctrl 加左鍵也可平移。在實體上短按右鍵會開啟常用指令選單。未選取任何物件時,方向鍵同樣可以轉動視角。", + "guide.view.touch": "在觸控螢幕上,兩根手指也能做到:張開手指縮放,一起移動手指平移視角。相機列的開關可讓單指轉動視角。", + "guide.view.cube": "角落的視圖立方體可跳到正視圖,拖曳它則轉動視角,房子按鈕會把整個場景重新縮放回畫面。按 1 到 6 鍵也能跳轉,搭配 Shift 還會縮放到選取項目。", + "guide.view.panels": "物件清單、設定視窗、指南與工具面板擋住內容時,可拖曳標題列將它們移開;連按兩下可重新停靠。", + "guide.view.projection": "縮放控制項旁的立方體按鈕可在一般視圖與平面正交視圖之間切換。其下方網格上的眼睛圖示可隱藏平台,方便從下方查看底面。平台前左角的紅、綠、藍箭頭顯示 X、Y、Z 的方向,與數值計算方式一致(可在設定中關閉)。", + "guide.view.section": "左側列底部的剖視按鈕(切割工具)會沿一個平面切開視圖,以便查看壁面與空腔。這只是視圖:設計與其匯出內容仍保持完整。「剖視圖匯出 SVG」會以 1:1 儲存該平面上的輪廓,例如供雷射切割使用。「量測」則直接在剖切處量測:在藍色輪廓上點擊兩下,再於對側壁面任意點擊一下,即可得到與之垂直的壁厚。面板可拖曳標題列移動。", + "guide.group.workplane": "工作平面", + "guide.workplane.place": "按 W 鍵或點擊工作平面圖示,可把臨時工作平面放到任意點擊的面上:靠近角時正好落在角上,靠近邊時落在邊上,在空白平台上則落在點擊處。新形狀會與之對齊。", + "guide.workplane.reset": "點擊空白處(或按 Esc)會讓工作平面回到地面,眼睛圖示下方的向下箭頭也可做到。Shift+W 會直接把它放到選取項目上。", + "guide.workplane.hide": "工作平面按鈕旁的眼睛圖示可隱藏設在某個面上的工作平面,但不會將其取消:新形狀仍會落在上面。", + "guide.workplane.grid": "在工作區設定(齒輪圖示)中,如有需要可完全隱藏網格。", + "guide.group.shapes": "用形狀建立模型", + "guide.shapes.add": "在功能區開啟「形狀」,把方塊、圓柱、球體、齒輪、文字或屋頂拖到平台上。", + "guide.shapes.text": "文字本身就是一種形狀:可選擇字型(也能使用自己的字型)、沿圓弧彎曲,並在「填充」下產生輪廓、剪影或更寬的一層。「製作分層」會把它變成多色列印用的名牌,形狀庫中的「圖示牌」則對 SVG 圖示做同樣的事。", + "guide.shapes.inspector": "右側面板提供實際數值:寬度、深度、高度、位置、旋轉、顏色。直接輸入比拖曳更準確。點擊形狀的角可同時編輯寬度與深度。旋轉過的實體也會在選取項目下方顯示繞 X、Y、Z 的角度,「旋轉」卡片可輸入這些數值。", + "guide.shapes.wrap": "平面 SVG 或文字可在其設定中的「包覆到圓柱」貼到圓柱壁上,做成凸起或雕刻;接著再將其置中於圓柱。", + "guide.shapes.myShapes": "常用的實體可變成形狀庫頂端的自訂形狀:選取它們、按「儲存選取項目」,之後點一下即可插入任何設計。它們會儲存在此瀏覽器中;若在伺服器上啟用共用儲存,則每台裝置都能使用;起始頁的「全部備份」會將它們一併帶走。", + "guide.shapes.handles": "選取項目周圍的控制點可移動、縮放與旋轉它。在角上按住 Shift 拖曳可在三個方向維持比例(也可在屬性中開啟「維持比例」),按住 Alt 則從中心縮放。右下角的網格決定吸附的物件。移動時,形狀也會吸附到其他形狀的邊與中心(粉紅色參考線);拖曳時按住 Alt 可暫停吸附。拖曳時按住 Shift 可讓移動只沿 X 或 Y 方向,一開始就按住 Alt 則拖曳的是副本。可以把形狀停在平台旁邊,留待之後使用。", + "guide.group.select": "選取與排序", + "guide.select.click": "點擊選取,按住 Shift 可加選,點擊空白處則取消選取。", + "guide.select.position": "在屬性面板的「位置」下輸入實體的位置:X 與 Y 是平台上的座標,Z 是其底面的高度。", + "guide.select.group": "把該放在一起的群組起來,把該固定的鎖定,把擋路的隱藏——都在功能區裡。「綁定」(Ctrl+B)只是把零件連在一起而不合併:顏色得以保留,例如用於多色列印。在群組設定中開啟「多色」後,群組也會以各自的顏色顯示每個零件。", + "guide.select.align": "「對齊」讓多個實體沿同一條邊或中心排開;「鏡像」讓選取項目沿某個平面翻轉(左右、前後或上下)。若要取得鏡像副本,請先建立副本。", + "guide.select.pivot": "先設定旋轉軸心,再點擊一個面:平面會給出它的中心,例如管件端部的軸線。此後選取項目會繞該點旋轉,而不是繞自身中心——傾斜的管口仍會留在其軸線上。只選取一個實體時,軸心會跟著該實體;選取多個時,僅對當次選取有效。紅色標記可用滑鼠拖曳,並會吸附到角與邊中點。再次點擊該工具即可移除。", + "guide.select.mateFaces": "「對齊面」(位於「排列」下):選取要移動的零件,點擊它的一個面,再點擊另一個零件的面。「面對面」讓兩者的面貼合;「齊平」讓兩者並排落在同一平面。可選的間隙會留出餘量。零件只會轉到兩個面平行,接著沿另一個面的法線滑動,因此側向位置保持不變。一步復原即可還原。", + "guide.select.carry": "按 C 可拾起選取項目:它會貼到游標下方的面上,斜面也可以,點擊即可放下(Esc 取消)。把新形狀移到實體上方時,它們會自動這麼做。", + "guide.select.layFlat": "「平放於面」(位於「排列」下),再點擊選取項目的一個面:游標下方的面會在點擊前亮起,實體隨即轉動,讓該面貼在工作平面上——方便把零件以最適合列印的一面朝下。", + "guide.select.pattern": "「陣列」會把選取項目沿直線重複 n 次,或繞圓周重複——用於孔陣列、螺栓圓與齒環。副本會先以預覽顯示,只有按「建立」才會加入。選取多個零件時,右側屬性面板可將它們一起改色,或把它們變成孔。「依百分比縮放」(右鍵或 Ctrl+K)會依百分比放大或縮小選取項目,可整體縮放,也可讓每個零件就地縮放。", + "guide.select.overhangs": "「顯示懸垂」(眼睛圖示旁選單中)會把所有懸垂角度超過 45°、列印時需要支撐的面以紅白斜線標出。角度可在設定的「外觀」中調整。", + "guide.select.notes": "備註用來記錄幾何形狀無法表達的資訊。把它放在實體上,它會跟著實體移動;放在實體旁邊,它會留在工作平面上。備註會隨設計儲存,且絕不會出現在匯出內容中。在實體上按右鍵,可用參考點標出其中心、角或邊中點,形狀會吸附到這些點。", + "guide.select.history": "「歷史記錄」(位於復原與重做旁)只供回看,不會改動任何內容:滑到專案較早的狀態,用方向鍵逐步移動,按 Esc 返回。在那裡可以匯出該狀態、以它為起點建立新專案,或永久刪除整份歷史記錄(左下角的按鈕,會先詢問一次)。視圖開啟期間,會改動設計的工具都會停用。", + "guide.group.measure": "量測", + "guide.measure.tape": "捲尺可量測角、邊與面之間的距離——先設定一個點,拖曳到下一個點,量測即完成。", + "guide.measure.cornerRuler": "角尺點一下就會落在工作平面上,顯示兩條成直角、帶刻度的臂,本身不形成實體。拖曳控制點可移動它,點擊控制點可將它旋轉 90°,旁邊的 × 則將它移除。控制點左側的小按鈕可改為量測到實體的中段,而不是邊緣。工作平面在側壁上時,角尺會躺在該壁上,並吸附到實體附近的角。", + "guide.measure.ruler": "形狀清單中的標尺(純量測工具:絕不會出現在匯出內容中,也不能群組或切割)會直接在視圖中以浮動數字顯示任何接觸或重疊實體的範圍,且可就地編輯。浮動的加號會建立所量測形狀的副本。", + "guide.group.solid": "實體與孔", + "guide.solid.modes": "每個形狀不是實體就是孔。孔是切割工具:它會移除材料。", + "guide.solid.group": "群組會把孔套用到其下方的實體上——內孔、槽或凹槽就是這樣做出來的。", + "guide.solid.intersect": "「交集」只保留兩個實體共有的部分。", + "guide.solid.edit": "「編輯群組」(E)會把群組的零件逐一攤開,「完成」再將它們重新組合——群組裡再嵌套群組也一樣。", + "guide.solid.split": "「分割」會用平面把實體或孔切成兩半。轉動平面即可斜切。", + "guide.group.edges": "倒角與圓角", + "guide.edges.pick": "選取一個實體,選擇「倒角」或「圓角」(B 與 Shift+B 鍵作用相同),然後點擊要套用的邊。", + "guide.edges.apply": "輸入尺寸並按 Enter。這一步正是多數 Tinkercad 設計所缺的。", + "guide.edges.undo": "處理過的實體可以再次處理。在邊工具中,「復原邊特徵」會退回上一次處理,「編輯」則會帶著其邊與數值重新開啟;「復原」會全部退回。", + "guide.edges.hollow": "「抽殼」會把實體變成壁厚均勻的殼體:選擇壁厚、哪些面保持開口(可任選,或全不開),以及內側邊緣是圓角還是尖角。抽殼後的實體可像圓角一樣再次修改。", + "guide.edges.deleteFace": "「刪除面」可移除既有的圓角、孔或凸台:點擊它的所有面,然後按 Delete。周圍的面會合攏補上缺口,實體仍保持精確。", + "guide.group.sketch": "繪製草圖", + "guide.sketch.start": "「草圖」分頁可繪製平面輪廓,並把它變成實體——向上拉出(擠出)或繞軸旋轉(旋轉成形)。", + "guide.sketch.draw": "直線、曲線與現成形狀。閉合的輪廓會變成實體;使用「描邊」時,則改為以寬度建立線條本身,開放的線也行。", + "guide.sketch.construction": "建構線是虛線,永遠不屬於輪廓:在「繪製」下開啟它,或把一條線變成建構線。新點會吸附到它與另一條線的交點——以便把角放在中點或固定距離處。", + "guide.sketch.image": "參考圖片可放在下層並描摹;位置合適後將它鎖定。", + "guide.sketchGroup.draw": "繪製", + "guide.sketchDraw.close": "再次點擊第一個點即可閉合輪廓。按 Esc 結束連續繪製。", + "guide.sketchGroup.edit": "選取與編輯", + "guide.sketchEdit.select": "「選取」可移動點與線(拖曳,或用方向鍵微調;拖曳時按住 Shift 可讓移動只沿單一軸向);Shift+點擊可加入或移除點、線,在閉合輪廓內點擊則會全選;其外框的角與邊上有控制點,在角上按住 Shift 可維持比例。「新增或移除點」可在線段上點擊以新增點,或在點上點擊以移除;「擦除」則會刪除。", + "guide.sketchEdit.corner": "點擊角點會提供「圓角」與「倒角」選項,點擊直線會提供「曲線化直線」(拖曳兩個控制點調整形狀),兩條直線相接處則會顯示夾角:點擊數值即可輸入新值(Tab 切換要轉動的線)。按 R 可將閉合輪廓旋轉 45 度。", + "guide.sketchGroup.clipboard": "剪貼簿", + "guide.sketchClipboard.use": "複製、剪下(Ctrl+X)、貼上與建立副本(Ctrl+D)都作用於選取項目。副本會落在原物件旁邊的空位,因此不會與原物件相連。", + "guide.sketchGroup.view": "移動視角與量測", + "guide.sketchView.zoom": "滾輪縮放。Home 會讓整份草圖填滿視圖,F 則縮放到選取項目。", + "guide.sketchView.measure": "側邊列中的捲尺可量測兩點之間的距離。點擊直線或點會顯示其長度;在直線上,可直接在尺寸標籤中輸入長度。", + "guide.sketchGroup.finish": "建立實體", + "guide.sketchFinish.body": "「完成草圖」會把閉合輪廓變成實體。旋轉成形時,在軸的左側畫出半個斷面,然後使用「完成旋轉」。", + "guide.sketchFinish.edit": "在實體上按「編輯草圖」,或連按兩下,即可回到這裡。先前對它做的邊處理會遺失,因為邊會重新產生。", + "guide.group.files": "儲存與共用", + "guide.files.autosave": "設計與匯出內容 100% 在瀏覽器本機運算與儲存。不需要帳號,也不會上傳任何內容。", + "guide.files.project": "LYL 是 layerling 本身的設計格式:整份設計(含歷史記錄)都在同一個檔案裡。在「匯出」下可選擇檔名,以及要一併帶走幾步復原——最少可選「無」,以便共用不含歷史記錄的設計。在 Chrome 與 Edge 中可自行選擇資料夾,Ctrl+S 會再次儲存到該檔案;其他瀏覽器則會下載。較舊的 .skf 檔案仍可開啟。安裝應用程式後(Chrome 或 Edge),在檔案管理員中連按兩下 .lyl 檔案,即可在 layerling 中開啟它。", + "guide.files.export": "STL、3MF 與 OBJ 供切片軟體使用(3MF 與 OBJ 含顏色),STEP 供完整的 CAD 程式使用,SVG 用於平面輪廓。隱藏的零件不會包含在內。「材料」方塊會顯示以實體計算的體積、重量與線材長度(公尺)。PNG 會儲存視圖的圖片,可選擇使用透明背景。", + "guide.files.import": "可匯入 STL、OBJ、3MF、STEP 與 SVG 並在其周圍建模,PNG 或 JPG 圖片會被描摹成寬 50 mm 的輪廓。有顏色的 OBJ 或 3MF 會依顏色各自成為一個實體,含多個物件的 3MF 則依物件各自成為一個實體;匯入 OBJ 時,可同時選取其 .mtl 或 Tinkercad 的 ZIP。「修改」區域的「簡化網格」可讓三角形數量極多的網格更精簡,並提供前後對照視圖;切割與群組仍能處理多少三角形,可在工作區設定中調整。", + "guide.files.bugReport": "底部頁尾的「錯誤回報」會儲存一個 ZIP,內含存成 .lyl 的設計,以及記錄版本、瀏覽器與最近訊息的文字檔,可附加於論壇或 GitHub。", + "guide.files.storeOff": "在自己的伺服器上,於 index.html 旁建立名為 store 的資料夾,即可將設計除了瀏覽器之外也儲存在伺服器上。這需要 PHP。", + "guide.files.storeOn": "此安裝也會將設計儲存在伺服器上。起始頁會在你的瀏覽器設計旁顯示該資料夾:把設計拖進去、建立子資料夾,或直接在該處建立新設計——它會自動儲存。自訂形狀也可以放進去,放在「Custom shapes」資料夾中。", + "guide.group.search": "尋找指令", + "guide.search.palette": "找不到工具嗎?按 Ctrl+K(或「說明」區域的放大鏡)開啟指令搜尋:輸入「圓角」、「鏡像」或「圓柱」,用方向鍵選擇後按 Enter。它也看得懂德文,會在每筆結果旁顯示快速鍵與所屬工具列區域,也會列出反灰的項目,讓你看到它們的位置。", + "guide.group.settings": "設定", + "guide.settings.workspace": "齒輪圖示可開啟單位、網格、平台尺寸、顏色、光照與陰影、工具列按鈕大小、縮放時網格線是否加密、供較慢電腦使用的快速模式,以及保留多少歷史記錄。自訂吸附步距(例如 2.54 mm 的排針間距)也在這裡新增。", + "guide.settings.language": "語言可在最右上角的語言清單中選擇,也可在起始頁的「設定」中選擇。", + "shortcuts.title": "鍵盤快速鍵", + "shortcuts.close": "關閉鍵盤快速鍵", + "shortcuts.print": "列印或儲存為 PDF", + "shortcuts.intro": "快速鍵在畫布取得焦點時生效。在欄位中輸入時不會觸發。", + "shortcuts.or": "或", + "shortcuts.click": "點擊", + "shortcuts.rightClick": "右鍵", + "shortcuts.drag": "拖曳", + "shortcuts.group.selection": "選取", + "shortcuts.group.clipboard": "剪貼簿", + "shortcuts.group.history": "歷史記錄", + "shortcuts.group.file": "檔案", + "shortcuts.group.organise": "群組與可見性", + "shortcuts.group.shape": "調整選取項目形狀", + "shortcuts.group.transform": "移動與旋轉", + "shortcuts.group.view": "視圖與工作平面", + "shortcuts.group.sketch": "草圖模式", + "shortcuts.group.edgeModifier": "倒角與圓角", + "shortcuts.clearSelection": "取消選取", + "shortcuts.delete": "刪除選取項目", + "shortcuts.selectAll": "選取所有可見形狀", + "shortcuts.addToSelection": "加入選取範圍或從中移除", + "shortcuts.contextMenu": "選取項目的常用指令選單", + "shortcuts.axisLockDrag": "拖曳時按住:僅沿 X 或 Y 移動", + "shortcuts.duplicateDrag": "拖曳副本,原物件留在原處", + "shortcuts.pauseObjectSnap": "拖曳時按下:暫停吸附到其他形狀", + "shortcuts.sizeAroundCenter": "在形狀旁輸入尺寸時:以中心為基準放大,而非從對邊擴展", + "shortcuts.copy": "複製", + "shortcuts.cut": "剪下", + "shortcuts.paste": "貼上", + "shortcuts.duplicate": "建立副本", + "shortcuts.undo": "復原", + "shortcuts.redo": "重做", + "shortcuts.historyView": "在歷史記錄視圖中:上一個或下一個狀態", + "shortcuts.historyViewClose": "在歷史記錄視圖中:回到目前狀態", + "shortcuts.historyViewPage": "在歷史記錄視圖中:往前或往後十個狀態", + "shortcuts.historyViewEnds": "在歷史記錄視圖中:最舊的狀態或目前狀態", + "shortcuts.wheel": "滑鼠滾輪", + "shortcuts.group": "群組", + "shortcuts.ungroup": "取消群組或取消綁定", + "shortcuts.bundle": "綁定(連在一起但不合併)", + "shortcuts.editGroup": "編輯選取的群組", + "shortcuts.lock": "鎖定或解鎖選取項目", + "shortcuts.hide": "隱藏選取項目", + "shortcuts.showHidden": "顯示所有隱藏項目", + "shortcuts.import": "開啟或關閉匯入對話方塊", + "shortcuts.export": "開啟或關閉匯出對話方塊", + "shortcuts.save": "將設計儲存到其檔案", + "shortcuts.outliner": "顯示或隱藏物件清單", + "shortcuts.hole": "將選取項目變成孔", + "shortcuts.solid": "將選取項目變回實體", + "shortcuts.transparent": "讓選取項目透明,或變回不透明", + "shortcuts.multicolor": "為選取的群組啟用多色:每個零件使用自己的顏色,或全部使用同一顏色", + "shortcuts.mirror": "鏡像模式", + "shortcuts.fillet": "用於選取實體的圓角工具(再按一次:關閉)", + "shortcuts.chamfer": "用於選取實體的倒角工具(再按一次:關閉)", + "shortcuts.align": "對齊模式", + "shortcuts.note": "放置備註", + "shortcuts.carryOntoFace": "拾起選取項目並放到某個面上(類似 Tinkercad 的 Cruise)", + "shortcuts.dropToWorkplane": "把選取項目放到工作平面上", + "shortcuts.nudge": "依目前視圖方向移動一個網格步距", + "shortcuts.nudgeCoarse": "移動五個網格步距", + "shortcuts.raise": "升高或降低選取項目", + "shortcuts.rotate": "旋轉 45°", + "transform.rotateHandle": "拖曳以旋轉", + "transform.cornerWidth": "寬度", + "transform.cornerDepth": "深度", + "transform.resize": "調整大小", + "transform.height": "高度", + "transform.lift": "抬升", + "sketch.modeBadge": "草圖視圖", + "sketch.modeBadgeRevolve": "旋轉草圖", + "status.sketchUpdated": "草圖已更新", + "status.revolveCreated": "已建立旋轉草圖", + "shortcuts.rotateFine": "旋轉 22.5°", + "shortcuts.views": "六個標準視圖", + "shortcuts.viewsFocus": "標準視圖,並縮放到選取項目", + "shortcuts.savedViews": "前往儲存在該鍵的視圖", + "shortcuts.saveView": "為此設計儲存視圖——轉動、平移與縮放", + "shortcuts.orbit": "未選取任何物件時,轉動視圖 15°", + "shortcuts.orbitCoarse": "未選取任何物件時,轉動視圖 90°", + "shortcuts.pan": "未選取任何物件時,平移視圖", + "shortcuts.panCoarse": "未選取任何物件時,再平移視圖", + "shortcuts.resetView": "讓整個場景填滿視圖", + "shortcuts.focusSelection": "縮放到選取項目", + "shortcuts.projection": "正交或透視", + "shortcuts.zoom": "放大或縮小", + "shortcuts.placeWorkplane": "放置工作平面", + "shortcuts.placeWorkplaneOnSelection": "將其放到選取的面", + "shortcuts.reverseWorkplane": "放置時按住可反轉方向", + "shortcuts.leaveMode": "離開工作平面或捲尺模式", + "shortcuts.sketchEscape": "放下工具(回到「選取」),然後取消選取", + "shortcuts.sketchDelete": "刪除選取的項目", + "shortcuts.sketchRotate": "將閉合草圖旋轉 45°", + "shortcuts.sketchLockImage": "鎖定或解鎖選取的輪廓或參考圖片", + "shortcuts.sketchResetView": "讓整份草圖填滿視圖", + "shortcuts.sketchFocusSelection": "在草圖中縮放到選取項目", + "shortcuts.sketchZoom": "放大或縮小草圖", + "shortcuts.sketchNudge": "將選取的點、線或圖片移動一個網格步距(Shift:較大步距)", + "shortcuts.sketchTools": "選擇繪製工具:1 直線,2 貝茲曲線,3 平滑曲線,4 新增或移除點(未在繪製線條時)", + "shortcuts.sketchHandleNudge": "將點擊的曲線控制點移動一個網格步距(Shift:較大步距)", + "shortcuts.sketchAxisLock": "拖曳時:讓移動只沿一個軸向", + "shortcuts.sketchAngleSnap": "繪製時:以 15° 為間隔吸附新線條", + "shortcuts.sketchTypedLine": "繪製時:輸入長度,按「<」或 Tab 輸入角度,Enter 確定該點", + "shortcuts.sketchDimensionSymmetric": "在線條的長度欄位中:向兩側擴展", + "shortcuts.edgeApply": "套用預覽", + "shortcuts.edgeCancel": "捨棄預覽", + "editor.modeLabel": "編輯器模式", + "editor.modeGeometry": "3D 編輯器", + "editor.modeSketch": "草圖", + "editor.renameProject": "重新命名設計", + "status.ready": "就緒", + "status.alreadyAligned": "已對齊", + "status.buildingBrep": "正在建立 B-Rep…首次匯出 STEP 會載入 OpenCascade 核心(約 22 MB),每個工作階段僅一次", + "status.buildingSvg": "正在建立 SVG 俯視投影…", + "status.buildingSketch": "正在建立精確草圖幾何…", + "status.chooseSelectFirst": "新增草圖影像前,請先選擇「選取」工具", + "status.chooseImageFile": "選擇 PNG、JPG、WebP、GIF 或其他影像檔案", + "status.chooseEdgeFeature": "選擇要移除的邊特徵", + "status.chooseSecondPoint": "選擇第二個量測點", + "status.sketchStrokeSet": "草圖以描邊方式建立", + "status.sketchStrokeOff": "草圖已改回以區域方式建立", + "pivot.dragHint": "拖曳以移動軸心,它會吸附到角落和邊中點", + "status.closeProfile": "結束草圖前,先閉合至少一個輪廓", + "status.sketchChainCleared": "已清除目前的草圖鏈", + "status.edgeCancelled": "已取消邊修改器", + "status.edgeCancelledChanged": "物件已變更,邊修改器已取消", + "status.edgeNeedsAdjustment": "邊處理需要調整", + "status.edgePreviewReady": "邊處理預覽已就緒", + "status.finishBeforeRedo": "先完成目前的拖曳或變換,再重做", + "status.finishBeforeRotate": "先完成目前的拖曳或變換,再旋轉", + "status.finishBeforeSave": "先完成目前的拖曳或變換,再儲存設計檔案", + "status.finishBeforeUndo": "先完成目前的拖曳或變換,再復原", + "status.clipboardEmpty": "layerling 剪貼簿是空的", + "status.noHiddenShapes": "沒有隱藏的形狀", + "status.nothingToMirror": "沒有可鏡像的物件", + "status.nothingToRedo": "沒有可重做的操作", + "status.nothingToRedoSketch": "此草圖中沒有可重做的操作", + "status.nothingToUndoSketch": "此草圖中沒有可復原的操作", + "status.oneLylAtATime": "一次只能開啟一個設計檔案;STL、OBJ、STEP 和 SVG 幾何請分別匯入", + "status.lylUnavailable": "此處無法開啟 layerling 設計檔案(.lyl)", + "status.pasteCancelled": "設計已變更,貼上已取消", + "status.rotationClosedOnly": "只有閉合的草圖物件可以旋轉", + "status.selectClosedSketch": "選取要旋轉的閉合草圖物件", + "status.selectGroupFirst": "請先選取一個群組", + "scalePercent.title": "依百分比縮放", + "scalePercent.subtitle": "各方向等比", + "scalePercent.help": "輸入目標大小:120 % 表示放大五分之一,50 % 表示縮小一半。底部位置保持不變。", + "scalePercent.percent": "新尺寸", + "scalePercent.mode": "多個零件", + "scalePercent.mode.together": "一起", + "scalePercent.mode.togetherHint": "它們以共同中心放大,排列也隨之放大,就像同一個零件", + "scalePercent.mode.each": "各自原位", + "scalePercent.mode.eachHint": "每個零件在原地放大,零件之間的間距保持不變", + "scalePercent.apply": "縮放", + "scalePercent.errorPercent": "輸入 1 到 1000 之間的百分比。", + "holePattern.title": "孔陣列", + "holePattern.subtitle": "在平面上排孔", + "holePattern.cancel": "關閉孔陣列", + "holePattern.step.pick": "點擊實體的一個平面。", + "holePattern.count.one": "該面可容納 1 個孔。", + "holePattern.count.many": "該面可容納 {count} 個孔。", + "holePattern.none": "此處放不下孔:該面對這個尺寸和邊距來說太小。", + "holePattern.tooMany": "這樣會超過 {limit} 個孔。請把孔加大或把間距加寬。", + "holePattern.form": "孔形狀", + "holePattern.form.round": "圓形", + "holePattern.form.square": "正方形", + "holePattern.form.rectangle": "長方形", + "holePattern.form.hexagon": "六邊形", + "holePattern.form.slot": "長槽", + "holePattern.size.diameter": "直徑(Ø)", + "holePattern.size.side": "邊長", + "holePattern.size.corners": "對角直徑(Ø)", + "holePattern.size.width": "寬度", + "holePattern.size.height": "高度", + "holePattern.spacing": "中心距", + "holePattern.wall": "孔與孔之間的壁厚", + "holePattern.arrangement": "排列方式", + "holePattern.arrangement.grid": "格狀", + "holePattern.arrangement.staggered": "交錯", + "holePattern.margin": "與面邊緣的距離", + "holePattern.depth": "深度", + "holePattern.depth.through": "貫穿整個實體", + "holePattern.depth.custom": "自訂深度", + "holePattern.depthValue": "孔深", + "holePattern.repick": "換一個面", + "holePattern.apply": "建立", + "holePattern.holeName": "孔", + "status.holePatternStart": "孔陣列:點擊實體的一個平面。", + "status.holePatternCancelled": "已取消孔陣列", + "status.holePatternSelectOne": "孔陣列一次只能選取一個實體。", + "status.holePatternNeedsSolid": "孔陣列只能用在實體上,不能用在孔上。", + "status.holePatternOtherTool": "請先完成其他工具的操作。", + "status.holePatternMissed": "那不是所選實體的面。", + "status.holePatternCurved": "這個面是曲面,請選擇平面。", + "status.holePatternReady": "已選取面。設定孔形狀、尺寸和間距。", + "status.holePatternTooMany": "單一孔陣列的孔數會過多。", + "status.holePatternNone": "該面上放不下任何孔。", + "status.holePatternCreated": "已建立孔陣列:{count} 個孔,已與實體群組", + "faceTool.title": "面", + "faceTool.subtitle": "將平面推出或壓入", + "faceTool.cancel": "關閉面工具", + "faceTool.step.pick": "點擊實體的一個平面。", + "faceTool.step.ready": "設定內縮、圓角半徑和深度,然後點擊「建立」。", + "faceTool.empty": "內縮和圓角半徑會讓這個面沒有剩餘,請把它們調小。", + "faceTool.direction": "方向", + "faceTool.direction.out": "向外:新增材料", + "faceTool.direction.in": "向內:挖出凹槽", + "faceTool.inset": "距面邊緣的內縮", + "faceTool.radius": "圓角半徑", + "faceTool.depth": "深度", + "faceTool.repick": "換一個面", + "faceTool.apply": "建立", + "faceTool.bodyName": "面擠出", + "faceTool.pocketName": "面凹槽", + "status.faceToolStart": "面:點擊實體的一個平面。", + "status.faceToolCancelled": "已取消面工具", + "status.faceToolSelectOne": "面工具一次只能選取一個實體。", + "status.faceToolNeedsSolid": "面工具只能用在實體上,不能用在孔上。", + "status.faceToolOtherTool": "請先完成其他工具的操作。", + "status.faceToolMissed": "那不是所選實體的面。", + "status.faceToolCurved": "這個面是曲面,請選擇平面。", + "status.faceToolReady": "已選取面。設定內縮、圓角半徑和深度。", + "status.faceToolCreated": "面已向外推出 {depth} mm", + "status.faceToolPocketCreated": "已在面上挖出深 {depth} mm 的凹槽", + "status.faceToolFailed": "面工具無法建立這個實體:{message}", + "status.honeycombConverted": "蜂巢已轉換為孔陣列:{count}", + "welcome.moreHolePatternTitle": "孔陣列", + "welcome.moreHolePatternBody": "點擊實體的平面,在上面排滿孔:圓形、正方形、長方形、六邊形或長槽,可採格狀或交錯排列,並設定間距、與邊緣的距離和深度(貫穿整個實體或指定深度)。建立前會先預覽孔;它們仍是一般的孔,並與實體群組在一起,可用於通風口、喇叭網罩、籃子和外殼。", + "guide.select.holePattern": "孔陣列(工具列中「陣列」旁的按鈕、在實體上按右鍵,或按 Ctrl+K):點擊一個平面,然後設定孔形狀、尺寸、間距、排列方式、邊距和深度。孔會以預覽顯示;按「建立」會將它們新增為孔並與實體群組。取消群組即可將它們分開。", + "guide.select.faceTool": "面(工具列中「孔陣列」旁的按鈕、在實體上按右鍵,或按 Ctrl+K):點擊一個平面,選擇向外或向內,然後設定距邊緣的內縮、圓角半徑和深度。新增的內容是與原實體群組在一起的草圖實體。", + "scalePercent.errorTooSmall": "「{name}」會小於 0.01 mm。", + "scalePercent.errorTooLarge": "「{name}」會超出其形狀允許的大小。請在設定的「形狀預設值」下為它設定更高的「自訂尺寸上限」,或選擇較小的百分比。", + "status.scaledByPercent": "已縮放至 {percent} %", + "status.scaledByPercentSkipped": "已縮放至 {percent} %;{skipped} 個鎖定項目保持不變", + "status.selectionColored": "已為 {count} 個零件上色", + "status.selectShapeFirst": "請先選取一個形狀", + "status.selectShapeWithEdge": "請先選取帶有邊特徵的形狀", + "status.selectSketchImageLock": "選取要鎖定或解鎖的草圖影像", + "status.selectSketchPoint": "選取要移除的草圖點或線段", + "status.selectSketchGeometry": "請先選取草圖幾何", + "status.sketchCopied": "已複製草圖選取項目", + "status.sketchCut": "已剪下草圖選取項目", + "status.sketchPasted": "已貼上草圖幾何", + "status.sketchDuplicated": "已建立草圖選取項目的副本", + "status.sketchClipboardEmpty": "請先複製一些草圖幾何", + "status.selectSolidAndHole": "選取兩個實體,或一個實體和一個孔,以進行交集", + "status.selectSolidForStep": "匯出 STEP 前請至少選取一個實體形狀", + "status.selectTwoToAlign": "選取至少兩個形狀以進行對齊", + "status.selectTwoToGroup": "選取至少兩個形狀以進行群組", + "status.rulerNotSolid": "標尺不是實體,在此不計入", + "status.selectHighlightedEdges": "選取醒目提示的邊,然後調整預覽", + "status.sharpAngleLowered": "沒有邊符合門檻,門檻現在是 {angle}°", + "status.sharpAngleLoweredForEdge": "門檻已降至 {angle}°,讓點擊的邊納入處理", + "status.selectOneToSeparate": "選取一個要分離的物件", + "status.selectSketchShape": "選取一個由草圖建立的形狀以進行編輯", + "status.selectedAllVisible": "已選取所有可見形狀", + "status.selectionCleared": "已清除選取", + "status.selectionHidden": "已隱藏選取項目", + "status.selectionShown": "選取項目已顯示", + "status.selectionLockedNow": "選取項目已鎖定", + "status.selectionUnlocked": "選取項目已解鎖", + "status.objectLocked": "物件已鎖定", + "status.selectionToHole": "已將選取項目改為孔", + "status.selectionTransparent": "已將選取項目改為透視", + "status.selectionOpaque": "已將選取項目改為不透明", + "status.selectionMulticolor": "選取的群組中,每個零件顯示各自的顏色", + "status.selectionOneColor": "選取的群組顯示單一顏色", + "status.multicolorNeedsGroup": "多色僅適用於群組:請先選取一個群組", + "status.selectionToSolid": "已將選取項目改為實體", + "status.selectionRaised": "已將選取項目上移", + "status.selectionLowered": "已將選取項目下移", + "status.centeredOne": "已將選取項目置中於工作平面", + "status.centeredMany": "已將 {count} 個物件置中於工作平面", + "status.nothingMeasurable": "選取項目沒有可置中的幾何", + "status.alreadyCentered": "選取項目已置中於工作平面", + "status.sharedUnavailable": "此安裝版本不會將設計存放在伺服器上", + "status.sketchCancelled": "已取消草圖", + "status.sketchImageSelected": "已選取草圖影像", + "status.sketchMeasurementRemoved": "已移除草圖量測", + "status.sketchRedo": "草圖重做", + "status.sketchUndo": "草圖復原", + "status.edgeRemoveChanged": "移除邊特徵時物件已變更,請再試一次", + "status.groupChanged": "群組時場景已變更;請選取物件後再試一次", + "status.intersectChanged": "交集時場景已變更;請選取物件後再試一次", + "status.noPrintableSurface": "選取的物件沒有可列印的表面", + "status.onlyOnePart": "選取的物件只有一個相連的零件", + "status.meshTooDense": "此網格有 {triangles} 個三角形。邊處理可處理 {limit} 個;超過後核心耗時會久到不值得等待。若是形狀清單中的形狀,目前請改用它自己的設定。若是匯入的零件,請先以 STEP 格式匯入,或以較少的三角形儲存。", + "status.threadTooDense": "螺紋由 {triangles} 個三角形構成,對邊處理來說過多,上限為 {limit}。因此請在邊處理之後再加螺紋:先對實體倒角或倒圓角,再加螺紋。屬性面板中的頭部倒角不必這樣繞路,也能修整螺絲頭的邊緣。", + "status.unlockImageDelete": "刪除草圖影像前,先按 L 解鎖", + "status.unlockImageEdit": "編輯草圖影像前,先按 L 解鎖", + "status.updatingRevolve": "正在更新旋轉預覽…", + "status.waitForPreview": "等待有效的邊預覽後再套用", + "status.deletedOne": "已刪除 1 個形狀", + "status.deletedMany": "已刪除 {count} 個形狀", + "status.cutTooComplex": "此幾何過於複雜,無法切割:{triangles} 個三角形,上限為 {limit}。請先簡化(減面)網格,或在「工作區設定」中提高上限。", + "status.groupNotMerged": "已群組,但未合併成一個實體:各零件合計 {triangles} 個三角形,超過上限 {limit}。匯出時它們會以重疊狀態保留,切片軟體會回報為錯誤(非流形邊)。請在「工作區設定」中提高上限或簡化網格,然後重新群組。", + "status.cutNotWatertightTooComplex": "此網格不是封閉的,且有 {triangles} 個三角形,對備用切割方式來說過於複雜(上限 {limit})。請先修復或簡化(減面)網格。", + "status.cutOne": "已剪下 1 個形狀", + "status.cutMany": "已剪下 {count} 個形狀", + "status.movedOne": "已移動 1 個形狀", + "status.movedMany": "已移動 {count} 個形狀", + "status.rotatedOne": "已將 1 個形狀旋轉 {angle}°", + "status.rotatedMany": "已將 {count} 個形狀旋轉 {angle}°", + "status.snappedOne": "已將 1 個形狀吸附到 {grid} mm 網格", + "status.snappedMany": "已將 {count} 個形狀吸附到 {grid} mm 網格", + "status.shownHiddenOne": "已顯示 1 個隱藏的形狀", + "status.shownHiddenMany": "已顯示 {count} 個隱藏的形狀", + "status.hiddenOnOpenOne": "此設計中有 1 個形狀已隱藏", + "status.hiddenOnOpenMany": "此設計中有 {count} 個形狀已隱藏", + "status.hiddenOnOpenShow": "全部顯示", + "status.droppedToWorkplane": "已將選取項目放到工作平面", + "status.layFlatStart": "平放:將滑鼠移到選取項目的某個面上(該面會醒目提示),點擊即可將它放到工作平面", + "status.layFlatCancelled": "已取消平放", + "status.mateStart": "對齊面:點擊選取實體的一個面", + "status.mateTarget": "現在點擊另一個實體的面", + "status.mateReady": "已選取兩個面", + "status.mateMissedSource": "點擊所選實體的一個面", + "status.mateMissedTarget": "點擊另一個實體的面", + "status.mateCancelled": "已取消對齊面", + "status.mateSelectOne": "選取要移動的那個實體", + "status.mated": "面已對齊", + "status.layFlatMissed": "沒有點中所選物件的任何面,因此未旋轉", + "status.laidFlat": "已貼平在該面上", + "status.selectOneToWrap": "選取一個要包覆的實體", + "status.wrapTooWide": "{length} 無法繞此圓柱一圈,繞一圈只有 {circumference}。請使用至少 {diameter} 的直徑,或縮短該實體。", + "status.wrapTooThick": "實體厚度超過直徑的一半,無法放入壁內", + "status.wrapNeedsDiameter": "輸入直徑", + "status.wrapNothing": "此實體上沒有可包覆的內容", + "status.wrappedAround": "已包覆到直徑 {diameter} 的圓柱上", + "status.wrappedInward": "已包覆到直徑 {diameter} 的圓柱壁內", + "status.mcpWrapped": "MCP 已將實體包覆到圓柱上", + "status.separatedParts": "已分離 {count} 個部件", + "status.separatedOutlines": "已分離為 {count} 個實體,每個輪廓一個,各自保留自己的草圖", + "status.copiedOne": "已複製 1 個形狀", + "status.copiedMany": "已複製 {count} 個形狀", + "status.alignAnchor": "對齊錨點:{name}(已鎖定)", + "status.measured": "已量測 {value} mm", + "status.preparingEdges": "正在 CAD 工作執行緒中準備{kind}邊", + "status.removedFeature": "已移除{label}", + "status.editingFeature": "{label} 已收回:邊與數值已重新填入。修改後再套用一次。", + "status.selectOneSolid": "選取一個實體進行{kind}", + "status.validatingFile": "正在驗證 {name},之後將其作為新設計開啟", + "status.importCancelled": "由於設計已變更,已取消匯入 {count} 個檔案", + "status.svgInvalid": "{reason}。修正輪廓後重新匯入來源 SVG", + "status.mcpAligned": "MCP 對齊已{label}", + "status.exportedStepOne": "已匯出 STEP B-Rep,含 1 個實體{skipNote}", + "status.exportedStepMany": "已匯出 STEP B-Rep,含 {count} 個實體{skipNote}", + "status.importedFile": "已匯入 {name}。", + "status.importedFiles": "已匯入 {count}/{total} 個檔案。", + "status.importFailedList": "未匯入:{details}{more}。", + "status.importFailedMore": " 以及另外 {count} 項", + "status.importColoredParts": "{name} 有 {count} 種顏色,將作為 {count} 個實體匯入,各自位於原位並一起選取。", + "status.importObjectParts": "{name} 包含 {objects} 個物件,將作為 {count} 個實體匯入,各自位於原位並一起選取。", + "status.importSvgSkipped": "{count} 個形狀({name})未能產生實體,已被略過。請在繪圖軟體中合併重疊的圖形、閉合輪廓,然後重新儲存 SVG。", + "status.importObjNoMtl": "缺少 {name} 的材料顏色:請連同 .mtl 檔案一起選取,或匯入整個 ZIP。", + "status.importObjVertexColors": "{name} 幾乎每個點都有自己的顏色,這種顏色漸層常見於掃描檔和 AI 生成的模型。layerling 無法顯示,因此已將其以單一顏色匯入為一個實體。", + "status.importMtlAlone": ".mtl 檔案只儲存顏色。請連同它的 .obj 一起選取。", + "status.importZipEmpty": "此 ZIP 中沒有 layerling 可匯入的檔案", + "status.importZipUnreadable": "無法開啟此 ZIP", + "status.import3mfPainted": "{name} 中的面在切片軟體裡塗過色;layerling 不讀取這些塗色,部件會以其線材顏色匯入。", + "status.importUnsupported": "無法匯入此檔案類型", + "status.importUnreadable": "無法讀取此檔案", + "status.importingFile": "正在匯入 {index}/{total}:{name}{stepNote}", + "status.stepKernelNote": "… 首次匯入 STEP 會載入 OpenCascade 核心(約 22 MB)", + "status.edgeNoUndoHistory": "此邊特徵沒有已儲存的復原記錄", + "status.noEdgeFeature": "沒有可移除的邊特徵", + "status.editingProfile": "正在編輯草圖輪廓", + "status.editingInsetProfile": "正在編輯該面的輪廓(內縮 {distance} mm,圓角半徑 {radius} mm)", + "status.sketchProfileClosed": "輪廓已閉合:編輯路徑或完成草圖", + "status.sketchSegmentAdded": "已新增草圖線段", + "status.sketchPointSegmentAdded": "已新增草圖點和線段", + "status.sketchPointAdded": "已新增草圖點", + "status.sketchPrimitiveAdded": "已將{shape}新增至草圖", + "status.sketchPointRemoved": "已移除草圖點", + "status.sketchLineRemoved": "已移除草圖直線", + "status.sketchImageRemoved": "已移除草圖影像", + "status.sketchImageAdded": "已將 {name} 新增至草圖", + "status.sketchSelectionRemoved": "已移除所選的草圖幾何圖形", + "status.sketchPointMoved": "已移動草圖點", + "status.sketchHandleAdjusted": "已調整曲線控制把手", + "status.sketchMadeCorner": "已改為角點", + "status.sketchLineCurved": "已將直線改為曲線", + "status.sketchLineStraightened": "已將曲線改為直線", + "status.sketchLinesCurved": "已將 {count} 條直線改為曲線", + "status.sketchLinesStraightened": "已將 {count} 條曲線改為直線", + "status.sketchMadeSmooth": "已改為平滑", + "status.sketchHandlesSplit": "已拆分曲線控制把手", + "status.sketchPointInserted": "已向路徑新增點", + "status.editingRevolveProfile": "正在編輯旋轉輪廓", + "status.sketchCannotExtrude": "此草圖輪廓無法擠出為 3D", + "status.sketchCannotRevolve": "此草圖輪廓無法旋轉為 3D", + "status.revolveStarted": "已開始旋轉草圖:在軸線左側繪製", + "status.sketchStarted": "已開始草圖:放置第一個點", + "status.sketchTool.line": "直線:點擊各點以繪製直線段", + "status.sketchArcStraight": "這三個點位於同一直線上,無法畫出經過它們的圓弧", + "status.sketchArcAdded": "已新增圓弧,半徑 {radius}", + "status.sketchTool.arc": "圓弧:點擊兩端,再點擊圓弧經過的第三個點", + "status.sketchTool.bezier": "貝茲曲線:點擊並拖曳各點以拉出曲線控制把手", + "status.sketchTool.smooth": "平滑曲線:點擊各點以建立順暢的路徑", + "status.sketchTool.rectangle": "矩形:在草圖上拖曳以建立閉合矩形", + "status.sketchTool.circle": "圓:拖曳邊界框以建立閉合圓", + "status.sketchTool.ellipse": "橢圓:拖曳邊界框以建立閉合橢圓", + "status.sketchTool.halfCircle": "半圓:拖曳邊界框以建立閉合半圓", + "status.sketchTool.pieSlice": "扇形:拖曳邊界框以建立閉合扇形", + "status.sketchTool.boltCircle": "螺栓圓:拖曳邊界框以建立帶孔的圓盤", + "status.sketchTool.triangle": "三角形:拖曳邊界框以建立閉合三角形", + "status.sketchTool.hexagon": "六邊形:拖曳邊界框以建立閉合六邊形", + "status.sketchTool.select": "選取:編輯草圖幾何圖形,點擊閉合輪廓內部可將其全部選取,也可放置和縮放參考圖", + "status.sketchTool.refine": "細化:點擊線段可新增點,點擊點可將其移除", + "status.sketchTool.erase": "擦除:點擊點或線段將其移除", + "status.sketchTool.measure": "量測:選擇兩個點", + "status.imageNotAdded": "無法新增草圖影像", + "status.revolveSettingsFailed": "無法套用旋轉設定", + "status.noteAdded": "已放置備註", + "status.notePinned": "備註已固定到該物件", + "status.noteRemoved": "已刪除備註", + "status.pointsAdded": "已放置 {count} 個參考點", + "status.pointsExist": "這些點已標記", + "status.pointRemoved": "已刪除參考點", + "status.pointsRemoved": "已刪除 {count} 個參考點", + "status.alreadyWrapped": "此形狀已包覆在圓柱上。請復原包覆,或從平坦的形狀重新開始。", + "status.noteLimitReached": "一個設計最多容納 {count} 則備註", + "status.noteMode": "點擊物件或工作平面以放置備註", + "status.notesHidden": "備註已隱藏", + "status.overhangsShown": "紅色斜線標出的面:懸垂角度超過 {angle}°、需要支撐的面。可在設定中調整該角度。", + "status.overhangsHidden": "懸垂已隱藏", + "status.notesShown": "備註已顯示", + "status.nothingToUndo": "沒有可復原的操作", + "status.undo": "復原", + "status.redo": "重做", + "status.undoWorkplaneBase": "復原:工作平面已回到平台", + "status.undoWorkplaneFace": "復原:工作平面已回到某個面上", + "status.redoWorkplaneBase": "重做:工作平面已回到平台", + "status.redoWorkplaneFace": "重做:工作平面又回到某個面上", + "status.historyViewOpened": "正在回看。滑動到更早的狀態,關閉視圖前不會有任何變動。", + "status.historyViewClosed": "已回到目前狀態", + "status.historyViewBlocksEdits": "變更設計前請關閉歷史記錄視圖", + "status.historyViewEmpty": "目前尚無可回看的內容", + "status.finishBeforeHistory": "請先完成目前的動作再回看", + "status.historyProjectCreating": "正在從此狀態建立專案…", + "status.historyProjectCreateFailed": "無法從此狀態建立專案", + "status.historyProjectUnavailable": "無法從此處建立新專案", + "historyView.title": "歷史記錄", + "historyView.subtitle": "回看,不變更任何內容", + "historyView.close": "關閉歷史記錄視圖", + "historyView.slider": "復原步數", + "historyView.earlier": "更早的狀態", + "historyView.later": "更晚的狀態", + "historyView.position": "狀態 {index}/{count}", + "historyView.objectsOne": "1 個物件", + "historyView.objectsMany": "{count} 個物件", + "historyView.atCurrent": "目前狀態", + "historyView.stepsBackOne": "目前狀態之前 1 步", + "historyView.stepsBackMany": "目前狀態之前 {count} 步", + "historyView.stepsAheadOne": "目前狀態之後 1 步(重做)", + "historyView.stepsAheadMany": "目前狀態之後 {count} 步(重做)", + "historyView.export": "匯出此狀態", + "historyView.bringBack": "帶入設計", + "historyView.bringBackMany": "將 {count} 個物件帶入設計", + "historyView.bringBackHint": "將所選物件的副本以此狀態下的樣子新增至設計", + "historyView.bringBackNothing": "點擊此狀態中的某個物件,將其帶回設計(按住 Shift 點擊可選取多個)", + "status.broughtBackOne": "已帶回 {name}(來自 {time})", + "status.broughtBackOneNoTime": "已帶回 {name}(來自狀態 {index})", + "status.broughtBackMany": "已帶回 {count} 個物件(來自 {time})", + "status.broughtBackManyNoTime": "已帶回 {count} 個物件(來自狀態 {index})", + "historyView.inside": "位於 {path} 內:僅供查看與挑選,不會有任何變動", + "historyView.backOut": "退出", + "historyView.backOutHint": "再次關閉此群組,並選取群組本身", + "historyView.openGroup": "開啟群組", + "historyView.openGroupHint": "查看所選群組的內部以挑選其部件;不會有任何變動", + "historyView.openGroupNothing": "選取一個群組以查看其內部", + "historyView.delete": "刪除歷史記錄", + "historyView.deleteHint": "永久移除所有更早的步驟;設計保留目前狀態", + "historyView.deleteNothing": "沒有可刪除的更早步驟", + "historyView.deleteTitle": "刪除全部歷史記錄?", + "historyView.deleteBody": "設計將完全保持目前的樣子。所有更早的步驟會被永久移除:復原和此視圖都無法再回退,此後儲存的檔案也不再包含歷史記錄。", + "historyView.deleteConfirm": "刪除歷史記錄", + "status.historyCleared": "已刪除歷史記錄:設計保留目前狀態", + "historyView.createProject": "從此狀態建立新專案", + "historyView.copyName": "{name}({time})", + "historyView.lastStep": "上一步", + "historyView.nextStep": "下一步", + "historyView.lastStepNone": "無:已是最早的狀態", + "historyView.nextStepNone": "無:已是最新的狀態", + "historyStep.start": "歷史記錄的起點", + "historyStep.addedOne": "已新增 {name}", + "historyStep.addedMany": "已新增 {count} 個物件", + "historyStep.deletedOne": "已刪除 {name}", + "historyStep.deletedMany": "已刪除 {count} 個物件", + "historyStep.grouped": "已將 {count} 個物件群組為 {name}", + "historyStep.ungrouped": "已取消 {name} 的群組", + "historyStep.splitOne": "已將 {name} 分割為 {count} 個物件", + "historyStep.replaced": "已將 {removed} 個物件替換為 {added}", + "historyStep.movedOne": "已移動 {name}", + "historyStep.movedMany": "已移動 {count} 個物件", + "historyStep.rotatedOne": "已旋轉 {name}", + "historyStep.rotatedMany": "已旋轉 {count} 個物件", + "historyStep.resizedOne": "已調整 {name} 的尺寸", + "historyStep.resizedMany": "已調整 {count} 個物件的尺寸", + "historyStep.colorOne": "已變更 {name} 的顏色", + "historyStep.colorMany": "已變更 {count} 個物件的顏色", + "historyStep.holeOne": "已將 {name} 設為孔", + "historyStep.holeMany": "已將 {count} 個物件設為孔", + "historyStep.solidOne": "已將 {name} 設為實體", + "historyStep.solidMany": "已將 {count} 個物件設為實體", + "historyStep.renamedOne": "已將 {name} 重新命名為 {newName}", + "historyStep.mirroredOne": "已鏡像 {name}", + "historyStep.mirroredMany": "已鏡像 {count} 個物件", + "historyStep.edgesOne": "已變更 {name} 的邊", + "historyStep.edgesMany": "已變更 {count} 個物件的邊", + "historyStep.roundedOne": "已為 {name} 的邊加上圓角", + "historyStep.roundedMany": "已為 {count} 個物件的邊加上圓角", + "historyStep.chamferedOne": "已為 {name} 的邊加上倒角", + "historyStep.chamferedMany": "已為 {count} 個物件的邊加上倒角", + "historyStep.hollowedOne": "已將 {name} 抽殼", + "historyStep.hollowedMany": "已將 {count} 個物件抽殼", + "historyStep.facesDeletedOne": "已刪除 {name} 的面", + "historyStep.facesDeletedMany": "已刪除 {count} 個物件的面", + "historyStep.groupOpened": "已開啟 {name} 以編輯其部件", + "historyStep.groupClosed": "已關閉 {name}", + "historyStep.duplicatedOne": "已複製 {name}", + "historyStep.duplicatedMany": "已複製 {count} 個物件", + "historyStep.copiesOf": "已製作 {count} 份 {name} 的副本", + "historyStep.hiddenOne": "已隱藏 {name}", + "historyStep.hiddenMany": "已隱藏 {count} 個物件", + "historyStep.shownOne": "已顯示 {name}", + "historyStep.shownMany": "已顯示 {count} 個物件", + "historyStep.lockedOne": "已鎖定 {name}", + "historyStep.lockedMany": "已鎖定 {count} 個物件", + "historyStep.unlockedOne": "已解鎖 {name}", + "historyStep.unlockedMany": "已解鎖 {count} 個物件", + "historyStep.editedOne": "已變更 {name}", + "historyStep.editedMany": "已變更 {count} 個物件", + "historyStep.reordered": "已變更物件順序", + "historyStep.noteAdded": "已新增備註", + "historyStep.noteRemoved": "已移除備註", + "historyStep.noteChanged": "已變更備註", + "historyStep.pointAdded": "已新增參考點", + "historyStep.pointRemoved": "已移除參考點", + "historyStep.pointChanged": "已移動參考點", + "historyStep.workplane": "已變更工作平面", + "historyStep.changed": "已變更設計", + "status.edgeCancelledUndo": "邊修改已取消 · 復原", + "status.edgeCancelledRedo": "邊修改已取消 · 重做", + "status.alignStart": "對齊:選擇一個圓點,或點擊已選取的形狀將其固定為基準", + "status.alignCancelled": "已取消對齊", + "status.alignAnchorSet": "已設定對齊基準", + "status.alignAnchorNamed": "對齊基準:{name}", + "status.mirrorStart": "鏡像:選擇一個軸向箭頭", + "status.mirrorCancelled": "已取消鏡像", + "status.pivotPickStart": "旋轉中心:點擊一個面,平面會以該面中心為準,例如管端的軸心", + "status.pivotPickCancelled": "已取消設定旋轉中心", + "status.pivotSet": "旋轉中心已設定,選取項現在會繞此點旋轉", + "status.pivotMissed": "未命中任何實體,旋轉中心未設定", + "status.pivotCleared": "已移除旋轉中心,改為繞中心旋轉", + "array.title": "陣列", + "array.subtitle": "排成一行或一圈的副本", + "array.targetMany": "{count} 個形狀", + "array.cancel": "取消陣列", + "array.helpRow": "選取項會以等距重複,也可以同時沿 X、Y、Z 排列(斜向一列、階梯狀)。間距為負值時會朝反方向排列。", + "array.helpCircle": "選取項會圍繞中心分佈。每份副本升高可形成螺絲,半徑變化則形成螺旋。提示:用「設定旋轉中心」點擊某個面,中心就會落在那裡。", + "array.helpCirclePivot": "選取項會圍繞中心分佈,中心來自你設定的旋轉中心。", + "array.mode": "佈局", + "array.mode.row": "列", + "array.mode.circle": "環形", + "array.count": "數量(含原件)", + "array.spacingX": "間距 X", + "array.spacingY": "間距 Y", + "array.spacingZ": "間距 Z(高度)", + "array.rise": "每份副本升高", + "array.radiusChange": "每份副本半徑變化", + "array.angle": "總角度", + "array.centerX": "中心 X", + "array.centerY": "中心 Y", + "array.rotateCopies": "副本", + "array.rotateCopies.yes": "隨圓周轉向", + "array.rotateCopies.no": "保持方向", + "array.apply": "建立", + "status.arrayStart": "陣列:設定數量與間距,預覽會顯示副本", + "status.arrayCancelled": "已取消陣列", + "status.arrayCreated": "已建立陣列:{count} 份副本", + "status.workplaneToolStart": "新增工作平面", + "status.workplaneToolCancelled": "已取消工作平面工具", + "status.workplaneFromFace": "工作平面已設為選取的面", + "status.workplaneReset": "工作平面已重設為基準", + "status.workplaneHidden": "工作平面已隱藏。新形狀仍會落在其上。", + "status.workplaneShown": "已顯示工作平面", + "status.workplaneUpdated": "工作平面已更新", + "status.mcpSelectedOne": "MCP 已選取 1 個物件", + "status.mcpSelectedMany": "MCP 已選取 {count} 個物件", + "status.mcpCleared": "MCP 已清除選取", + "status.selectSolidBeforeExport": "匯出前請至少選取一個實體形狀", + "status.addSolidBeforeExport": "匯出前請先新增一個實體形狀", + "status.exportedSelectedOne": "已匯出 1 個選取的形狀", + "status.exportedSelectedMany": "已匯出 {count} 個選取的形狀", + "status.exportedSelectedAs": "{selected} 匯出為 {label}", + "status.exportedAs": "已匯出 {label}", + "status.exportHiddenSkippedOne": " (已略過 1 個隱藏部件)", + "status.exportHiddenSkippedMany": " (已略過 {count} 個隱藏部件)", + "status.exportOnlyHidden": "要匯出的所有部件都已隱藏。請先顯示它們再匯出。", + "status.exportFailed": "無法匯出 {label}", + "status.exportFileFailed": "無法寫入 {name}。該檔案可能已在其他程式開啟;下次匯出 STL 時會再次詢問檔案。", + "status.stlSavedToFile": "已將 STL 儲存到 {name}。除非在匯出視窗中使用「另存新檔」,否則之後匯出此設計的 STL 會覆蓋此檔案。", + "status.exportUnioned": "已儲存為 {label},{count} 個重疊實體已合併", + "status.exportUnionFailed": "無法合併重疊的實體,它們在檔案中分別存在。", + "status.exportSplinters": "未寫入檔案:切割留下的 {count} 個細小碎片。", + "status.dismiss": "關閉訊息", + "export.drawing.label": "工程圖", + "export.drawing.description": "前視圖、俯視圖與右側視圖,標註整體尺寸與圓孔位置,比例 1:1。", + "export.drawing.note": "下載 SVG 或向量 PDF。圖紙會自動擴充以容納設計;請以 100% / 實際大小列印。孔表僅涵蓋與座標軸對齊的圓孔;斜孔、螺紋、深度與公差不會自動標註。", + "export.drawing.fileFormat": "工程圖檔案格式", + "status.buildingDrawing": "正在產生工程圖…", + "status.exportedDrawing": "已將 1:1 工程圖匯出為 {format}", + "status.drawingHoleCutFailed": "無法為工程圖切出所有孔。匯出前請檢查孔的幾何形狀。", + "status.drawingFailed": "無法匯出工程圖", + "export.drawing.short": "2D", + "drawing.front": "前視圖", + "drawing.top": "俯視圖", + "drawing.right": "右側視圖", + "drawing.bores": "圓孔 — 位置以各視圖左下角為基準(mm)", + "drawing.id": "編號", + "drawing.view": "視圖", + "drawing.diameter": "直徑", + "drawing.firstAngle": "第一角投影", + "drawing.customSheet": "自訂圖幅", + "drawing.revision": "圖號 / 版本", + "drawing.drawnBy": "製圖 / 日期", + "drawing.scale": "比例", + "drawing.units": "尺寸單位", + "drawing.sheet": "圖幅", + "drawing.notes": "備註", + "drawing.note1": "以 100% / 實際大小列印。", + "drawing.note2": "由網格推導的標稱幾何。", + "drawing.note3": "僅含與視圖軸線平行的孔。", + "drawing.note4": "螺紋、深度與公差", + "drawing.note5": "不會自動標註。", + "error.drawingTooManyHoles": "此工程圖會有超過 200 個圓孔。請選擇較小的零件。", + "error.drawingTooLarge": "1:1 的工程圖會大於 5,080 mm。請選擇較小的零件。", + "error.drawingTooManyTriangles": "工程圖的各視圖最多可容納 {limit} 個三角面,目前為 {count} 個。請選擇更少或更簡單的物件。", + "error.drawingTooManyEdges": "某個視圖的邊數過多,無法繪製工程圖。請選擇更少或更簡單的物件。", + "error.drawingNoGeometry": "此視圖沒有實體幾何。", + "status.exportStepFailed": "無法匯出 STEP", + "status.exportStepNothing": "這裡沒有可寫成 STEP 的內容 — 請改用 STL", + "status.exportStepSkippedList": " · 未包含在 STEP 中:{list}", + "status.exportStepSkippedItem": "「{name}」({reason})", + "status.exportStepSkippedMore": " 以及另外 {count} 個", + "status.exportStepSkip.twist": "此扭曲形狀尚無精確形式", + "status.exportStepSkip.deform": "此變形尚無精確形式", + "status.exportStepSkip.mesh": "沒有 CAD 來源的網格;以 STEP 匯入的零件則會一併包含", + "status.exportStepSkip.oval": "橢圓形底面沒有精確形式", + "status.exportStepSkip.hole": "孔沒有精確形式,未切除", + "status.exportStepSkip.holeCut": "無法切除孔,實體將不帶孔匯出", + "status.exportStepSkip.failed": "CAD 核心無法建構", + "status.exportStepSkip.noExact": "沒有精確形式", + "status.packagingShared": "正在為伺服器打包設計…", + "status.serverSaved": "已儲存到伺服器", + "status.serverSaveRetry": "目前無法儲存到伺服器,系統會自動重試。", + "status.sharedNoProject": "儲存到伺服器前,請先開啟設計。", + "status.serverSaveStopped": "已停止自動儲存:設計已在伺服器上變更。請重新載入,或以其他名稱儲存。", + "status.packagingProject": "正在打包可編輯設計、歷史記錄與去除重複後的資源…", + "status.savedProject": "已儲存可編輯的 layerling 設計(.lyl)", + "status.savedToFile": "已儲存到 {name}", + "status.saveFileFailed": "無法寫入 {name}。請使用「匯出 → 另存新檔」重新選擇檔案。", + "status.fileNotWritable": "沒有變更 {name} 的權限。請使用「匯出 → 另存新檔」重新選擇檔案。", + "status.saveProjectFailed": "無法儲存 layerling 設計", + "status.importNoneFailed": "無法匯入所選 {total} 個檔案中的任何一個。{summary}", + "status.sketchSelectedOne": "已選取 1 個草圖項目", + "status.sketchSelectedMany": "已選取 {count} 個草圖項目", + "status.sketchSelectionCleared": "已清除草圖選取", + "status.cruisePlace": "點擊以放置 {name}。按 Esc 取消。", + "status.carryPlace": "選取項會跟著指標移動:移到實體上方時會貼合下方的面。點擊放下,按 Esc 取消。", + "status.carryCancelled": "已取消放置", + "status.dragCancelled": "已取消,一切已回到原狀", + "status.carryPlaced": "已將 {count} 個部件放到面上", + "status.cruiseCancelled": "已取消放置", + "status.shapeAdded": "已新增 {name}", + "status.shapeAddedMcp": "MCP 已新增 {name}", + "status.shapeImportedMcp": "MCP 已匯入 {name}", + "status.shapeUpdatedMcp": "MCP 已更新 {name}", + "status.shapeLocked": "「{name}」已鎖定", + "status.shapeUnlocked": "「{name}」已解鎖", + "status.shapeHidden": "「{name}」已隱藏", + "status.shapeShown": "「{name}」已顯示", + "status.alignedOne": "已對齊 1 個形狀 {alignment}", + "status.alignedMany": "已對齊 {count} 個形狀 {alignment}", + "status.duplicatedOne": "已複製 1 個形狀", + "status.duplicatedMany": "已複製 {count} 個形狀", + "status.groupedMany": "已群組 {count} 個形狀", + "status.cutLeftOpen": "已切割,但切面是開放的:此零件的表面有缺口({count} 條開放邊),因此 layerling 無法將其閉合。將零件以 STL 或 3MF 重新匯入,或許可得到閉合網格。", + "status.bundledMany": "已綁定 {count} 個形狀:它們會一起移動,並保留各自的顏色與類型", + "status.selectTwoToBundle": "綁定前請至少選取兩個形狀", + "status.bundleNotOneBody": "綁定體不是單一實體。請將其群組(Ctrl+G),或逐一處理其中的部件(按 E 開啟)。", + "status.intersectedMany": "已對 {count} 個形狀求交集", + "status.mcpAlignedOne": "MCP 已對齊 1 個物件 {alignment}", + "status.mcpAlignedMany": "MCP 已對齊 {count} 個物件 {alignment}", + "status.mcpDeletedOne": "MCP 已刪除 1 個物件", + "status.mcpDeletedMany": "MCP 已刪除 {count} 個物件", + "status.mcpGrouped": "MCP 已群組 {count} 個物件", + "status.mcpBundled": "MCP 已綁定 {count} 個物件", + "status.mcpSeparated": "MCP 已分離 {count} 個部件", + "status.mcpUngroupedOne": "MCP 已取消群組(1 個)", + "status.mcpUngroupedMany": "MCP 已取消群組({count} 個)", + "status.mirroredOne": "已鏡像 1 個形狀 {axis}", + "status.mirroredMany": "已鏡像 {count} 個形狀 {axis}", + "status.pastedOne": "已貼上 1 個形狀", + "status.pastedMany": "已貼上 {count} 個形狀", + "status.ungroupedOne": "已取消群組(1 個)", + "status.ungroupedEdgesTakenBack": "已取消群組,邊特徵已收回(Ctrl+Z 可復原)", + "status.ungroupedMany": "已取消群組({count} 個)", + "status.exactSketchCreated": "已在 10 mm 高度建立精確草圖", + "status.groupedHoleConsumed": "已群組:孔已從實體中挖去材料", + "status.intersectionEmpty": "交集為空", + "status.mcpBooleanCut": "MCP 布林切割完成", + "status.mcpCutConsumed": "MCP 切割已從實體中挖去材料", + "status.mcpGroupConsumed": "MCP 群組已從實體中挖去材料", + "status.insertedDesign": "已插入 {count} 個實體,來自 {name}", + "status.insertDesignEmpty": "{name} 沒有可插入的實體", + "status.insertDesignFailed": "無法插入 {name}", + "status.revolveUpdated": "旋轉已更新", + "status.filletedOne": "已為 1 條邊加上圓角", + "status.filletedMany": "已為 {count} 條邊加上圓角", + "status.chamferedOne": "已為 1 條邊加上倒角", + "status.chamferedMany": "已為 {count} 條邊加上倒角", + "status.chamfilletedOne": "已為 1 條邊加上倒角與圓角", + "status.chamfilletedMany": "已為 {count} 條邊加上倒角與圓角", + "status.filletedMcpOne": "MCP 已為 1 條邊加上圓角", + "status.filletedMcpMany": "MCP 已為 {count} 條邊加上圓角", + "status.chamferedMcpOne": "MCP 已為 1 條邊加上倒角", + "status.chamferedMcpMany": "MCP 已為 {count} 條邊加上倒角", + "inspector.selectionTitle": "已選取 {count} 個部件", + "inspector.selectionMixed": "混合選取:點擊一次即可全部設為實體或全部設為孔。", + "inspector.selectionMixedColors": "多種", + "inspector.gearPair": "齒輪對:嚙合所需的中心距為 {distance} mm。目前中心距為 {current} mm。", + "inspector.gearPairMismatch": "這兩個齒輪無法嚙合:模數 {a} 與模數 {b}。請將兩者設為相同模數。", + "inspector.gearPairInternal": "內齒圈與小齒輪:嚙合所需的中心距為 {distance} mm。目前中心距為 {current} mm。", + "inspector.gearPairFit": "模數改為 {module} 就能讓它們在目前位置嚙合。", + "inspector.gearPairFitApply": "調整兩者模數以嚙合", + "inspector.gearPairFitHint": "將兩個齒輪調整為此模數,讓它們在目前位置嚙合。齒數、高度與中心孔維持不變。", + "status.gearPairFitted": "兩個齒輪的模數已設為 {module}。", + "inspector.selectionHint": "顏色、實體或孔及鎖定會套用到每個選取的部件。尺寸只能在單一部件上調整,可用控制柄或「按百分比縮放」(按右鍵)。", + "inspector.shapeMode": "形狀模式", + "inspector.solid": "實體", + "inspector.hole": "孔", + "inspector.transparent": "透明", + "inspector.multicolor": "多色", + "inspector.settingsFor": "{name} 設定", + "inspector.expand": "展開設定", + "inspector.minimize": "收合設定", + "inspector.moveHint": "拖曳可移動;拖到右側邊緣放開,或按兩下,即可重新停靠", + "inspector.editSketch": "編輯草圖", + "inspector.shapeColor": "形狀顏色", + "inspector.color": "顏色", + "inspector.customColor": "自訂顏色", + "export.png.description": "視圖圖片", + "export.png.note": "將目前的視圖以兩倍解析度儲存成圖片,不含控制柄、選取框與尺寸。適合用於論壇貼文、列印網站或發問。先旋轉、縮放到畫面正確為止。", + "export.png.scope": "視圖", + "export.png.plate": "顯示列印平台", + "export.png.transparent": "透明背景", + "status.imageSaved": "視圖已儲存為圖片", + "status.imageFailed": "無法產生視圖圖片", + "inspector.recentColors": "最近使用", + "inspector.keptColors": "已保留", + "inspector.keepColor": "保留此顏色", + "inspector.unkeepColor": "將此顏色從保留清單中移除", + "inspector.keptFull": "已保留 21 種顏色,請先移除一種", + "contextMenu.label": "選取項目的指令", + "contextMenu.paste": "貼上", + "contextMenu.selectAll": "全選", + "contextMenu.selectMultiple": "多選", + "status.selectMultipleStart": "多選:點按實體即可加入或移除。點按空白處或按 Esc 完成。", + "status.selectMultipleEnd": "多選完成", + "contextMenu.showHidden": "顯示所有隱藏項目", + "contextMenu.toHole": "設為孔", + "contextMenu.toSolid": "設為實體", + "contextMenu.group": "群組", + "contextMenu.ungroup": "取消群組", + "contextMenu.hide": "隱藏", + "contextMenu.lock": "鎖定", + "contextMenu.unlock": "解鎖", + "contextMenu.drop": "放到工作平面", + "contextMenu.carry": "放置在面上", + "contextMenu.simplify": "簡化網格…", + "contextMenu.markCenter": "標記中心", + "contextMenu.markCorners": "標記角點", + "contextMenu.markMidpoints": "標記邊中點", + "contextMenu.removeAllPoints": "刪除所有參考點({count})", + "contextMenu.deleteKey": "Del", + "inspector.custom": "自訂", + "inspector.wrapCylinder": "包覆到圓柱", + "inspector.wrapDiameter": "直徑", + "inspector.wrapInward": "向內(雕刻)", + "inspector.wrapHint": "平放在平台上的形狀會立到壁面:由左至右繞圓柱一圈,後側邊緣成為頂部。接著將它置中對齊圓柱。", + "inspector.wrapInwardHint": "厚度會陷入壁面。設為孔並置中後,會在此直徑的圓柱上雕刻。", + "inspector.wrapApply": "包覆", + "simplify.title": "簡化網格", + "simplify.showTriangles": "顯示三角形", + "simplify.before": "簡化前 · {count} 個三角形", + "simplify.after": "簡化後 · {count} 個三角形", + "simplify.working": "簡化後 · 處理中…", + "simplify.hint": "按住右鍵拖曳可旋轉,滾輪可縮放,按住中鍵拖曳可平移。兩個視圖會同步移動。", + "simplify.groupNote": "此實體是群組的結果。簡化後只會保留網格:之後將無法再編輯群組及取用其原始部件。", + "simplify.keep": "保留", + "simplify.keepPercent": "要保留的三角形比例(百分比)", + "simplify.targetTriangles": "要保留的三角形數量", + "simplify.triangles": "個三角形", + "simplify.apply": "簡化", + "status.meshSimplified": "已從 {before} 個三角形簡化為 {after} 個", + "status.mcpSimplified": "MCP 簡化了一個網格", + "status.selectOneMeshToSimplify": "請選取一個匯入的網格來簡化", + "inspector.separateParts": "分離部件", + "inspector.makeEllipse": "設為橢圓", + "inspector.makeEllipseHint": "圓柱體會保持正圓。改為橢圓後仍是同一個實體,長度與寬度可分別設定。", + "inspector.separatedPartName": "{name} 部件 {index}", + "inspector.keepProportions": "保持比例", + "inspector.properties": "屬性", + "inspector.resetProperty": "還原為預設值", + "inspector.saveDefaults": "儲存為預設值", + "inspector.saveDefaultsHint": "此類新形狀會以這些數值起始(等同設定中的「形狀預設值」)。", + "inspector.resetDefaults": "重設預設值", + "inspector.resetDefaultsHint": "還原為應用程式對此類形狀的原始起始值。", + "inspector.position": "位置", + "inspector.rotation": "旋轉", + "inspector.pivot": "軸心", + "inspector.pivotRemove": "移除", + "inspector.taper": "錐度", + "inspector.twist": "扭曲與傾斜", + "inspector.teeth": "齒數", + "inspector.helix": "螺旋", + "inspector.snapGrid": "吸附格線", + "inspector.unitsSwitch": "單位:公釐或英吋", + "inspector.objectSnap": "吸附到形狀", + "inspector.objectSnapHint": "邊與中心會鎖定到其他形狀。拖曳時按住 Alt 可暫停吸附。", + "inspector.gearType": "齒輪類型", + "gear.spur": "直齒輪", + "gear.helical": "斜齒輪", + "gear.herringbone": "人字齒輪", + "gear.bevel": "傘齒輪", + "gear.profileInvolute": "漸開線", + "gear.profileSimple": "簡單", + "gear.involuteHint": "分度圓 {pitch} mm。可與模數 {module} 的任何齒輪嚙合;中心距 =(兩輪齒數之和)× 模數 / 2。", + "gear.profileRound": "圓弧", + "gear.roundHint": "以圓弧構成的圓齒,用在小齒輪上較易列印,用於旋鈕時握感滑順。分度圓 {pitch} mm。可與模數 {module} 的任何圓弧齒輪嚙合;中心距 =(兩輪齒數之和)× 模數 / 2。", + "gear.simpleHint": "直齒,僅供外觀。若要兩個齒輪順暢嚙合,請選漸開線。", + "gear.internal": "內齒圈", + "gear.rack": "齒條", + "gear.internalHint": "齒朝內。分度圓 {pitch} mm。模數 {module} 的齒輪可在其內運轉;中心距 =(齒圈齒數 − 該齒輪齒數)× 模數 / 2。", + "gear.internalRoundHint": "齒朝內的圓弧齒。分度圓 {pitch} mm。模數 {module} 的圓弧齒輪可在其內運轉;中心距 =(齒圈齒數 − 該齒輪齒數)× 模數 / 2。", + "gear.rackHint": "每齒齒距 {pitchLength} mm;長度為齒數 × 齒距。模數 {module} 的齒輪可在其上滾動:其中心位於分度線前方(齒數 × 模數 / 2)處,分度線則位於齒頂後方 {offset} mm。", + "gear.rackRoundHint": "圓弧齒,每齒齒距 {pitchLength} mm;長度為齒數 × 齒距。模數 {module} 的圓弧齒輪可在其上滾動:其中心位於分度線前方(齒數 × 模數 / 2)處,分度線則位於齒頂後方 {offset} mm。", + "inspector.threadRole": "類型", + "inspector.threadHead": "頭部", + "inspector.thread": "螺紋", + "thread.rod": "螺紋桿", + "thread.screw": "螺絲", + "thread.nut": "螺帽", + "thread.bore": "螺紋孔", + "thread.headCylinder": "內六角頭", + "thread.headCountersunk": "沉頭", + "thread.headHex": "六角頭", + "thread.right": "右旋", + "thread.left": "左旋", + "thread.profileV": "V 形螺紋(ISO)", + "thread.profileTrapezoidal": "梯形", + "thread.profileRound": "圓形", + "thread.profileWhitworth": "惠氏螺紋(55°)", + "thread.profileCustom": "自訂(梯形)", + "thread.customSize": "自訂", + "thread.group.metric": "M – 公制粗牙", + "thread.group.UNC": "UNC – 美規英吋粗牙", + "thread.group.UNF": "UNF – 美規英吋細牙", + "thread.group.G": "G – 管螺紋", + "thread.hint.metric": "ISO 公制粗牙螺紋(ISO 261),與標準螺絲、螺帽相同。", + "thread.hint.UNC": "例如相機與三腳架的 1/4\"-20 螺絲(ISO 1222),較大的腳架雲台為 3/8\"-16。", + "thread.hint.UNF": "直徑與 UNC 相同,螺距更細(ASME B1.1)。", + "thread.hint.G": "例如淋浴軟管 G1/2、洗衣機 G3/4、搭配快接頭的花園水龍頭 G3/4(小型為 G1/2)。", + "shape.box": "長方體", + "shape.roundedBox": "圓角長方體", + "shape.cylinder": "圓柱體", + "shape.slot": "膠囊", + "shape.ellipse": "橢圓", + "shape.sphere": "球體", + "shape.cone": "圓錐", + "shape.pyramid": "角錐", + "shape.wedge": "楔形", + "shape.text": "文字", + "shape.nameTag": "名牌", + "shape.roundRoof": "圓形屋頂", + "shape.halfSphere": "半球", + "shape.torus": "圓環", + "shape.tube": "管", + "shape.bentTube": "彎管", + "shape.loft": "放樣", + "shape.star": "星形", + "shape.heart": "心形", + "shape.crescent": "月牙", + "shape.gear": "齒輪", + "shape.honeycomb": "蜂窩", + "shape.hinge": "鉸鏈", + "shape.knurl": "滾花", + "shape.dovetail": "燕尾", + "shape.teardrop": "淚滴孔", + "shape.counterbore": "沉頭孔", + "shape.countersink": "錐形沉頭孔", + "shape.doubleCountersink": "雙面錐形沉頭孔", + "shape.thread": "螺紋", + "shape.spring": "彈簧", + "shape.gridfinity": "Gridfinity", + "shape.polygon": "多邊形", + "shape.ruler": "標尺", + "shape.group": "群組", + "shape.bundle": "綁定", + "inspector.bundleNote": "綁定只是把部件固定在一起:每個部件各自保留顏色與類型,孔不會挖除任何材料,匯出時每個部件都是獨立實體。按 E 可開啟編輯,Ctrl+Shift+G 可取消綁定。", + "shape.intersection": "交集", + "shape.importedMesh": "匯入的網格", + "shape.sketchExtrusion": "草圖實體", + "shape.sketchRevolve": "旋轉實體", + "shape.threadMenu": "螺紋\n螺絲\n螺帽", + "shape.basicShapes": "形狀", + "shapeMenu.moveHint": "拖曳標題列可移動此面板;按兩下可將它放回按鈕下方", + "shapeMenu.keepOpen": "放置形狀時保持開啟", + "shapeMenu.keepOpenOn": "保持開啟,直到取消釘選", + "shapeMenu.resize": "調整形狀庫大小", + "shapeMenu.resizeHint": "拖曳邊緣或角落可調整大小;按兩下可還原。寬度較窄時只會顯示圖片", + "myShapes.title": "自訂形狀", + "myShapes.basicShapes": "基本形狀", + "myShapes.saveSelection": "儲存選取範圍", + "myShapes.saveSelectionHint": "將選取的實體留在這裡,之後可在任何設計中再次插入", + "myShapes.selectFirst": "請先選取要保留的實體", + "myShapes.nameLabel": "名稱", + "myShapes.defaultName": "自訂形狀", + "myShapes.empty": "選取一或多個實體,然後選擇「儲存選取項目」。它們會留在這裡,供每個設計使用。", + "myShapes.insertHint": "點擊插入,或拖曳到工作平面上", + "myShapes.deleteConfirm": "刪除?", + "myShapes.backup": "備份自訂形狀", + "myShapes.backupHint": "備份此瀏覽器中的自訂形狀:全部存成一個 ZIP 檔案,供其他瀏覽器或電腦使用", + "myShapes.load": "載入形狀", + "myShapes.loadHint": "將形狀載入此瀏覽器:從備份 ZIP 或 .lyl 設計載入", + "myShapes.onServer": "伺服器上", + "myShapes.inBrowser": "此瀏覽器中", + "myShapes.locationLabel": "儲存於", + "myShapes.groupEmpty": "尚無", + "myShapes.moveToServer": "放到伺服器", + "myShapes.newFolder": "新增資料夾", + "myShapes.newFolderHint": "新增資料夾以整理自訂形狀", + "myShapes.folderNameLabel": "資料夾名稱", + "myShapes.createFolder": "建立", + "myShapes.folderLabel": "資料夾", + "myShapes.noFolder": "無資料夾", + "myShapes.moveToFolder": "移到資料夾", + "myShapes.renameFolder": "重新命名資料夾", + "myShapes.deleteFolder": "刪除資料夾", + "myShapes.deleteFolderConfirm": "連同內容一併刪除({count})?", + "myShapes.folderEmpty": "此資料夾是空的", + "myShapes.newSubfolder": "在其中新增資料夾", + "status.myShapeSaved": "「{name}」已存入此瀏覽器的自訂形狀", + "status.myShapeSavedServer": "「{name}」已存入伺服器上的自訂形狀", + "status.myShapeMovedToServer": "「{name}」現在位於伺服器上", + "status.myShapeFolderCreated": "已建立資料夾「{name}」", + "status.myShapeFolderDeleted": "資料夾「{name}」已連同其中的形狀刪除", + "status.myShapeMovedToFolder": "「{name}」已移到「{folder}」", + "status.myShapeMovedOutOfFolder": "「{name}」已不在任何資料夾中", + "status.myShapeNameTakenInFolder": "已有名為「{name}」的自訂形狀在「{folder}」中;請先重新命名其中一個", + "status.myShapeNameTaken": "伺服器上已有名為「{name}」的自訂形狀;請另選一個名稱", + "status.myShapeGone": "此形狀已不存在;清單已重新整理", + "status.myShapeInserted": "已插入「{name}」", + "status.myShapeDeleted": "「{name}」已從自訂形狀中移除", + "status.myShapesNoneToBackUp": "目前沒有可備份的形狀", + "status.myShapesBackedUp": "已備份 {count} 個形狀", + "status.myShapesLoaded": "已將 {count} 個形狀新增到自訂形狀", + "status.myShapesLoadedSkipped": "已將 {count} 個形狀新增到自訂形狀;{skipped} 個已存在", + "status.myShapesLoadFailed": "已新增 {count} 個形狀;無法讀取:{names}", + "prop.length": "長度", + "prop.width": "寬度", + "prop.height": "高度", + "prop.textHeightHint": "厚度,從平台向上", + "prop.bevel": "斜角", + "prop.topRadius": "頂部半徑", + "prop.baseRadius": "底部半徑", + "prop.thickness": "厚度", + "prop.outerDiameter": "外徑", + "prop.innerDiameter": "內徑", + "prop.toothSize": "齒尺寸", + "prop.toothWidth": "齒寬", + "prop.gearProfile": "齒形", + "prop.gearModule": "模數(mm)", + "prop.gearPressureAngle": "壓力角", + "prop.gearBacklash": "齒隙", + "prop.gearRim": "輪緣", + "prop.centerHole": "中心孔", + "prop.topLength": "頂部長度", + "prop.loftBottomOutline": "底部輪廓", + "prop.loftTopOutline": "頂部輪廓", + "prop.loftBottomWidth": "底部寬度", + "prop.loftBottomDepth": "底部長度", + "prop.loftTopWidth": "頂部寬度", + "prop.loftTopDepth": "頂部長度", + "prop.loftBottomCorner": "底部圓角半徑", + "prop.loftTopCorner": "頂部圓角半徑", + "prop.loftBottomSides": "底部角數", + "prop.loftTopSides": "頂部角數", + "prop.loftOffsetX": "頂部寬度方向偏移", + "prop.loftOffsetZ": "頂部長度方向偏移", + "prop.loftWall": "壁厚(0 = 實心)", + "prop.loftSmooth": "平滑過渡(%)", + "loft.smoothHint": "0 為直線收縮,如同圓錐。100 則形成 S 形曲線:兩側從兩端垂直伸出,並在中間改變尺寸,如同從細管平滑擴到粗管的軟管接頭。", + "prop.loftTwist": "扭轉", + "prop.sketchFill": "填充", + "prop.sketchFill.area": "面積", + "prop.sketchFill.outside": "描邊在外", + "prop.sketchFill.inside": "描邊在內", + "prop.sketchFill.center": "描邊置中", + "prop.sketchFill.grow": "加寬", + "prop.sketchFill.shrink": "收窄", + "prop.sketchFill.shrinkHint": "填充形狀的邊緣四周內縮一個線寬——可用作配合間隙,或從同一草圖切出內壁。", + "prop.sketchFill.growHint": "填充形狀四周外擴一個線寬——可用作多色列印中文字或標誌下方的底層。", + "nameTag.title": "名牌", + "nameTag.defaultText": "名字", + "nameTag.makeLayers": "建立分層", + "nameTag.makeLayersHint": "將文字變成名牌:字母在上,下方是彩色分層,每層稍寬。", + "nameTag.cardHint": "字母在上,下方每一列是一層,各有自己的顏色。每次變更都會立即顯示。", + "nameTag.letterSize": "字母大小", + "nameTag.letterSizeHint": "從上方看,平台上大寫字母的高度。", + "nameTag.layers": "分層", + "nameTag.addLayer": "在底部新增一層", + "nameTag.removeLayer": "移除底層", + "nameTag.color": "顏色", + "nameTag.wider": "加寬量({unit})", + "nameTag.height": "高度({unit})", + "nameTag.noHoles": "無孔", + "nameTag.corners": "邊角", + "nameTag.corner.round": "圓角", + "nameTag.corner.bevel": "斜角", + "nameTag.corner.miter": "尖角", + "nameTag.letterEdge": "字母邊緣", + "nameTag.edge.none": "無", + "nameTag.edge.round": "圓角", + "nameTag.edge.chamfer": "倒角", + "nameTag.letterEdgeSize": "邊緣尺寸", + "nameTag.keyring": "鑰匙圈孔", + "nameTag.keyringDiameter": "孔徑", + "nameTag.keyringSide": "側邊", + "nameTag.side.left": "左側", + "nameTag.side.right": "右側", + "nameTag.side.top": "頂部", + "nameTag.keyringAlong": "沿側邊位置", + "nameTag.keyringAlongHint": "讓掛耳沿所在側邊上下移動,例如對準向外伸出的字母。0 表示中間。", + "nameTag.keyringAlongHintTop": "讓掛耳沿頂部左右移動。0 表示中間。", + "nameTag.side.free": "自由", + "nameTag.side.freeHint": "將鑰匙圈孔放到名牌旁獨立的掛耳上:像其他形狀一樣移動和旋轉,再就地固定到名牌上。", + "nameTag.keyringTab": "鑰匙圈掛耳", + "nameTag.keyringTabFix": "固定到名牌", + "nameTag.keyringTabFixHint": "將掛耳就地併入最近的名牌:孔會穿過每一層,文字或尺寸改變時掛耳仍隨名牌。選擇「自由」可再次將其分離。", + "nameTag.letters": "字母", + "nameTag.makeTags": "建立 {count} 個名牌", + "nameTag.makeTagsOne": "建立 1 個名牌", + "nameTag.makeTagsNone": "建立名牌", + "nameTag.bundleNote": "每一層都是獨立的實體,各有自己的顏色。要為某一層的邊緣加上圓角或斜角,請開啟綁定。", + "shape.iconTag": "圖示牌", + "iconTag.title": "圖示牌", + "iconTag.hint": "選擇一個 SVG、PNG 或 JPG 檔案:圖示會像名牌那樣變成有分層的圖示牌。", + "iconTag.browse": "瀏覽…", + "iconTag.noFile": "尚未選擇檔案", + "iconTag.preview": "預覽", + "iconTag.width": "寬度(mm)", + "iconTag.widthHint": "圖示的寬度,{min} 至 {max} mm。", + "iconTag.ok": "確定", + "iconTag.building": "正在建立…", + "iconTag.unreadable": "此 SVG 無法變成圖示牌:它需要閉合的輪廓。", + "iconTag.cardHint": "圖示在上,下方每一列是一層,各有自己的顏色。每次變更都會立即顯示。", + "iconTag.icon": "圖示", + "iconTag.iconWidth": "寬度", + "iconTag.iconWidthHint": "從上方看,頂部圖示的寬度。", + "iconTag.makeLayersHint": "將輪廓變成圖示牌:圖示在上,下方是彩色分層,每層稍寬。", + "iconTag.count": "數量", + "iconTag.countHint": "要多少個圖示牌,1 至 100,排列在平台中央。", + "iconTag.fill": "放得下多少就放多少", + "iconTag.fitsNone": "平台上連一個圖示牌也放不下。", + "iconTag.makeTags": "建立 {count} 個圖示牌", + "iconTag.replace": "另一個檔案…", + "iconTag.part": "描摹來源", + "iconTag.part.dark": "深色部分", + "iconTag.part.light": "淺色部分", + "iconTag.partHint": "圖片會被描摹成輪廓。選擇其中哪一部分作為圖示。", + "status.iconReplaced": "圖示已替換為「{name}」", + "status.iconLayered": "圖示已分成 {count} 層", + "status.iconLayersUpdated": "分層已更新", + "status.iconTagsMade": "已建立 {count} 個圖示牌", + "status.iconTagAdded": "已新增圖示牌「{name}」", + "shape.qrCode": "QR Code", + "shape.qrPlate": "QR Code 底板", + "qrCode.title": "QR Code", + "qrCode.hint": "輸入文字或網址。它會變成可列印的 QR Code,可單獨列印或放在底板上。", + "qrCode.text": "文字或網址", + "qrCode.count": "已用 {used} / {max} 位元組", + "qrCode.tooLong": "太長:{used} / {max} 位元組。縮短文字或選擇較低的糾錯等級。", + "qrCode.enterHint": "Enter 建立 QR Code,Shift+Enter 換行。", + "qrCode.noText": "為 QR Code 輸入文字。", + "qrCode.failed": "無法建立 QR Code。", + "qrCode.preview": "預覽", + "qrCode.errorCorrection": "糾錯等級", + "qrCode.errorCorrectionHint": "等級越高,QR Code 部分髒污或損壞時仍能讀取,但需要更多模組。", + "qrCode.recovery": "QR Code 損壞 {percent} % 時仍可讀取", + "qrCode.style": "建立方式", + "qrCode.styleHint": "放在底板上時,QR Code 可以用自己的顏色凸起,用於多色列印,也可以刻入底板。", + "qrCode.style.code": "僅 QR Code", + "qrCode.style.raised": "在底板上凸起", + "qrCode.style.engraved": "雕刻", + "qrCode.sizeBy": "尺寸依據", + "qrCode.sizeBy.width": "寬度", + "qrCode.sizeBy.module": "模組尺寸", + "qrCode.width": "寬度(mm)", + "qrCode.moduleSize": "模組尺寸(mm)", + "qrCode.moduleInfo": "單個模組:{size} mm({count} × {count} 個模組)", + "qrCode.widthInfo": "寬度:{width} mm({count} × {count} 個模組)", + "qrCode.widthHint": "寬度 {min} 至 {max} mm。", + "qrCode.moduleSmall": "小於 0.8 mm 的模組難以清晰列印——這只是經驗法則,並非保證。請把 QR Code 加大、縮短文字或降低糾錯等級。", + "qrCode.quietZone": "靜區(4 個模組)", + "qrCode.quietZoneHint": "掃描器在 QR Code 周圍需要的空白邊緣:這裡就是底板的邊緣。", + "qrCode.quietZoneAlone": "沒有底板的 QR Code 沒有自己的邊緣:請在四周留出 4 個模組的空白。", + "qrCode.height": "高度(mm)", + "qrCode.heightRaised": "QR Code 高度(mm)", + "qrCode.heightEngraved": "雕刻深度(mm)", + "qrCode.tooDeep": "雕刻深度必須比底板至少淺 0.2 mm。", + "qrCode.plateThickness": "底板厚度(mm)", + "qrCode.ok": "確定", + "qrCode.building": "正在建立…", + "qrCode.cardHint": "修改文字後重新建立 QR Code。它會保持原來的位置和寬度。", + "qrCode.regenerate": "重新建立", + "status.qrCodeAdded": "已新增 QR Code", + "status.qrCodeRegenerated": "QR Code 已重新建立", + "inspector.more": "更多", + "inspector.less": "更少", + "prop.textFill": "填充", + "prop.textFill.filled": "實心", + "prop.textFill.outline": "輪廓", + "prop.textFill.outer": "外輪廓線", + "prop.textFill.inner": "內輪廓線", + "prop.textWider": "加寬(多色列印底層)", + "textLayers.layer": "第 {number} 層", + "textLayers.grow": "加寬量", + "textLayers.names": "姓名清單", + "textLayers.namesHint": "每行一個姓名,最多 100 個:每個姓名各建立一個與這個相同的名牌,在下方逐列排好。", + "textLayers.namesPlaceholder": "安娜\n小明\n怡君", + "status.textLayered": "文字已分成 {count} 層", + "status.textLayersUpdated": "分層已更新", + "status.keyringTabMade": "名牌旁邊有一個獨立的鑰匙圈掛片:像其他形狀一樣移動並旋轉到位,然後在其面板中按「固定到名牌」。", + "status.keyringTabFixed": "鑰匙圈掛片已按你放置的位置成為名牌的一部分。", + "status.keyringTabNoTag": "沒有可固定鑰匙圈掛片的名牌或圖示牌。", + "status.textTagsMade": "已製作 {count} 個名牌", + "status.mcpTextLayered": "MCP 已將文字分成 {count} 層", + "status.mcpTextTagsMade": "MCP 已製作 {count} 個名牌", + "prop.textFillHint": "倒角與分段僅適用於實心字母;填充模式或剪影會把字母畫成平面。", + "prop.sketchLineWidth": "線寬", + "prop.sketchSilhouette": "剪影(無孔)", + "prop.slotSmallEnd": "小端(直徑)", + "prop.slotCentreDistance": "中心距", + "prop.loftTiltX": "頂部傾斜,前/後", + "prop.loftTiltZ": "頂部傾斜,左/右", + "loft.round": "圓 / 橢圓", + "loft.rectangle": "矩形", + "loft.polygon": "多邊形", + "prop.topWidth": "頂部寬度", + "prop.bottomLength": "底部長度", + "prop.bottomWidth": "底部寬度", + "prop.positionX": "X", + "prop.positionY": "Y", + "prop.positionZ": "Z(高度)", + "prop.rotateX": "繞 X 軸", + "prop.rotateY": "繞 Y 軸", + "prop.rotateZ": "繞 Z 軸(高度)", + "prop.pivotX": "軸心 X", + "prop.pivotY": "軸心 Y", + "prop.pivotZ": "軸心 Z(高度)", + "prop.twist": "扭轉", + "prop.widthOffset": "寬度偏移", + "prop.tiltedMeasures": "實體已傾斜:長度、寬度與高度是它自身的尺寸,而非空間方向上的尺寸。", + "prop.lengthOffset": "長度偏移", + "font.manage": "你自己的字型…", + "font.customGroup": "你自己的字型", + "font.builtInGroup": "內建", + "font.missing": "缺少字型", + "font.title": "你自己的字型", + "font.subtitle": "用於文字:字型檔案或電腦中已安裝的字型", + "font.close": "關閉你自己的字型", + "font.addFile": "選擇字型檔案…", + "font.addFileHint": "TrueType(.ttf)、OpenType(.otf)或 WOFF(.woff)。字型會留在這個瀏覽器中。", + "font.fromSystem": "從電腦中選擇字型…", + "font.systemSearch": "搜尋字型", + "font.systemUnsupported": "只有電腦上的 Chrome 和 Edge 能讀取已安裝的字型。請選擇字型檔案,或將它拖曳到這裡。在 Windows 上,檔案對話方塊會隱藏 Fonts 資料夾,此時請從檔案總管把字型拖曳過來。在 Mac 上,字型位於 /Library/Fonts 和 ~/Library/Fonts。", + "font.dropHint": "或將字型檔案拖曳到這裡,也可以直接從檔案總管的 Fonts 資料夾拖曳過來。", + "font.systemNeedsHttps": "瀏覽器僅在安全頁面提供已安裝字型,例如 layerling.com 上的 https。此頁面是透過 http 載入。請改從檔案總管的 Fonts 資料夾將字型拖曳到這裡。", + "font.systemDenied": "瀏覽器未被允許讀取已安裝的字型。請在網站設定中允許,或選擇字型檔案。", + "font.systemMore": "還有 {count} 個 – 請縮小搜尋範圍。", + "font.reading": "正在讀取字型…", + "font.added": "已新增字型「{name}」", + "font.use": "使用", + "font.remove": "從此瀏覽器移除", + "font.removed": "字型「{name}」已不在此瀏覽器中。設計會保留其文字用到的字母。", + "font.stored": "在此瀏覽器中", + "font.fromDesign": "僅設計用到的字母", + "font.none": "還沒有你自己的字型。", + "font.licence": "設計只會保留其文字所用字母的輪廓,絕不會包含字型檔案。轉交他人前,請先檢查字型的授權。", + "font.usedOnText": "將字型「{name}」套用到文字", + "font.error.font-too-large": "檔案大於 40 MB。", + "font.error.font-woff2": "layerling 無法讀取 WOFF2。請改用字型的 TTF 或 OTF 版本。", + "font.error.font-collection": "這是字型集合(.ttc)。請選擇單一字型檔案。", + "font.error.font-unreadable": "這個檔案不是可讀取的字型。", + "font.error.font-no-letters": "該字型沒有 layerling 能繪製的字母。", + "font.error.generic": "無法新增字型:{message}", + "prop.font": "字型", + "prop.text": "文字", + "prop.textCurved": "沿圓弧", + "prop.textSpacing": "字距(%)", + "prop.textSpacingHint": "在字型原有間距之上額外增加的字距,以字母大小的百分比表示;小於 0 會更緊。字母大小不變,外框會跟著調整。", + "prop.textStretch": "將字母拉伸至外框", + "prop.textRadius": "圓弧半徑", + "prop.textInward": "沿底部", + "prop.textFlipped": "上下顛倒", + "prop.segments": "分段", + "prop.sidesFollowSize": "邊數隨尺寸變化", + "prop.sides": "邊數", + "prop.steps": "步數", + "prop.torusSides": "環向邊數", + "prop.torusSteps": "管向步數", + "prop.teeth": "齒數", + "prop.helixAngle": "螺旋角", + "prop.quality": "品質", + "prop.turns": "圈數", + "prop.wire": "線徑", + "prop.springHand": "旋向", + "spring.right": "右旋", + "spring.left": "左旋", + "prop.threadSize": "規格", + "prop.diameter": "直徑", + "prop.pitch": "螺距", + "prop.threadHand": "方向", + "prop.threadProfile": "牙型", + "prop.threadFlankAngle": "牙側角", + "prop.threadDepth": "螺紋深度", + "prop.threadCoreDiameter": "芯徑", + "thread.flankAngleHint": "單一牙兩側牙面之間的夾角。60° 是尖 V 形螺紋,30° 是梯形螺紋。在 90° 或以下時,沒有任何牙面比 45° 更平緩,因此螺紋不需支撐就能列印。", + "prop.clearance": "間隙(XY)", + "prop.threadChamferTop": "倒角,頂端", + "prop.threadChamferBottom": "倒角,底端", + "thread.axialClearanceHint": "沿螺紋方向的額外活動量(mm),加在間隙之上:螺帽的每個牙會變薄這麼多,而直徑保持不變。若要螺紋轉動順暢又不左右晃動:把間隙維持在 0.2 到 0.3 左右,並在此處設為 0.2。設為 0 時,活動量只來自間隙,而間隙對牙面的張開只有大約一半的效果。", + "thread.clearanceHint": "整個直徑上的額外餘裕。列印螺紋需要的餘裕比想像中更多:牙面之間的間隙大約只有它的一半。0.3 左右偏緊,0.4 常見,0.5 偏鬆。建議先列印一對測試件。", + "thread.boltClearanceHint": "讓螺栓變細這麼多,用於本身沒有活動量的金屬螺帽(0.3 到 0.4,與列印螺帽原本會有的餘裕相當)。搭配列印螺帽時請保持為 0,把餘裕留給螺帽。", + "prop.boltClearance": "用於桿件與螺絲的間隙", + "prop.axialClearance": "沿軸向(Z)的活動量", + "prop.headHeight": "頭部高度", + "prop.chamfer": "倒角", + "prop.headChamfer": "頭部倒角", + "prop.rimChamfer": "邊緣倒角", + "prop.threadsPerInch": "每英吋牙數", + "prop.startAngle": "起始角度", + "prop.sweep": "掃掠", + "prop.starPoints": "角數", + "prop.starOuterSize": "外徑", + "prop.starInnerSize": "內徑", + "prop.starOuterFillet": "外圓角", + "prop.starInnerFillet": "內圓角", + "prop.heartTipFillet": "尖端圓角", + "prop.crescentThickness": "厚度", + "prop.crescentTipFillet": "尖端圓角", + "prop.honeycombCellSize": "格子尺寸", + "prop.honeycombWallThickness": "壁厚", + "prop.honeycombFrameWidth": "邊框寬度", + "prop.dovetailWideEnd": "寬度(寬端)", + "prop.dovetailNeckWidth": "頸部寬度", + "prop.dovetailLength": "尾部長度", + "prop.dovetailClearance": "作為孔時的間隙", + "prop.hingeLength": "長度(軸向)", + "prop.hingeOpenWidth": "展開寬度", + "prop.hingeKnuckleDiameter": "鉸鏈節直徑", + "prop.hingeKnuckles": "鉸鏈節數", + "prop.hingePinDiameter": "插銷直徑", + "prop.hingeLeafThickness": "葉片厚度", + "prop.hingePinless": "無插銷(使用自備插銷)", + "prop.hingeAngle": "開合角度", + "prop.hingeClearance": "間隙", + "prop.gridfinityType": "類型", + "gridfinity.bin": "收納盒", + "gridfinity.baseplate": "底板", + "gridfinity.binHint": "42 mm Gridfinity 網格上的收納盒:可放在底板中,也能堆疊在其他收納盒上,包括用其他 Gridfinity 產生器做出的盒子。", + "gridfinity.baseplateHint": "Gridfinity 收納盒所放置的底板,高 5 mm:每個 42 mm 網格單元對應一個插槽。", + "prop.gridfinityUnitsX": "橫向單元數", + "prop.gridfinityUnitsZ": "縱向單元數", + "prop.gridfinityUnitsY": "高度單元數", + "prop.gridfinityLip": "堆疊唇緣", + "prop.gridfinityMagnets": "磁鐵孔", + "prop.gridfinityHalfGrid": "半尺寸網格(21 mm)", + "gridfinity.halfGridHint": "橫向與縱向單元按 21 mm 的格子計算,每個格子都有自己的底腳;四個格子剛好放進底板的一個插槽。", + "prop.gridfinityFloorHeight": "底部高度", + "gridfinity.floorHeightHint": "收納盒從底面向上到這個高度是實心,可作為挖出形狀的粗坯。", + "prop.gridfinityLabelBack": "後側標籤台", + "prop.gridfinityLabelFront": "前側標籤台", + "prop.gridfinityLabelLeft": "左側標籤台", + "prop.gridfinityLabelRight": "右側標籤台", + "prop.gridfinityLabelWidth": "標籤台寬度", + "prop.gridfinityLabelLength": "標籤台長度", + "gridfinity.labelLengthHint": "設為 0 時,標籤台從一側壁延伸到另一側壁。", + "prop.gridfinityLabelOffset": "標籤台位置", + "prop.gridfinityLabelCorner": "標籤台邊角", + "gridfinity.labelRound": "圓角", + "gridfinity.labelChamfer": "倒角", + "prop.gridfinityLabelCornerSize": "邊角尺寸", + "prop.gridfinityScoopBack": "後側取物口", + "prop.gridfinityScoopFront": "前側取物口", + "prop.gridfinityScoopLeft": "左側取物口", + "prop.gridfinityScoopRight": "右側取物口", + "prop.gridfinityScoopRadius": "取物口半徑", + "prop.gridfinityCompartmentsX": "欄數", + "prop.gridfinityCompartmentsZ": "列數", + "gridfinity.compartmentsHint": "隔板會在標籤台處停止,避開疊放在上面的收納盒;每個隔間至少保持 6 mm 寬。", + "prop.gridfinityDividerThickness": "隔板厚度", + "gridfinity.scoopsLeftOutHint": "太窄而放不下取物口的隔間,不會有取物口。", + "inspector.gridfinityCompartments": "隔間", + "prop.gridfinityDividerAcross": "欄之間", + "prop.gridfinityDividerDeep": "列之間", + "prop.gridfinityDividerPosition": "位置", + "gridfinity.dividerPositionHint": "從左側或後側壁的內表面量到隔板中線。", + "prop.gridfinityCompartmentRow": "列", + "prop.gridfinityCompartmentColumn": "欄", + "gridfinity.fromLeft": "左起第 {number} 欄", + "gridfinity.fromBack": "後起第 {number} 列", + "prop.gridfinityCompartmentLabel": "標籤台", + "gridfinity.labelNone": "無", + "gridfinity.labelSideBack": "後側", + "gridfinity.labelSideFront": "前側", + "gridfinity.labelSideLeft": "左側", + "gridfinity.labelSideRight": "右側", + "prop.gridfinityCompartmentLabelLength": "標籤台長度(%)", + "gridfinity.compartmentLabelLengthHint": "100 表示標籤台佔滿所在邊的全長。", + "gridfinity.compartmentLabelTooShortHint": "此標籤台短於 4 mm,將被略過。", + "gridfinity.alignLeft": "左", + "gridfinity.alignMiddle": "置中", + "gridfinity.alignRight": "右", + "gridfinity.alignBack": "後", + "gridfinity.alignFront": "前", + "prop.knurlPattern": "圖案", + "prop.knurlCount": "槽數", + "prop.knurlDepth": "槽深", + "prop.knurlAngle": "槽角度", + "prop.knurlChamfer": "兩端倒角", + "knurl.straight": "直紋", + "knurl.diamond": "交叉紋", + "knurl.round": "圓紋", + "knurl.roundHint": "圓形溝槽與凸紋如波浪般起伏,旋鈕握起來很舒適。深度保持在半個節距以內。", + "knurl.straightHint": "沿軸線的溝槽,就像旋鈕上的滾花。", + "knurl.diamondHint": "兩排傾斜的溝槽交叉成小菱形,就像工具手柄上的滾花。仍為網格;邊工具僅適用於直紋滾花。", + "prop.screwHoleHead": "頭部直徑", + "prop.screwHoleShaft": "桿部直徑", + "prop.screwHoleHeadDepth": "頭部深度", + "prop.screwHoleAngle": "錐角", + "prop.screwHoleBothSides": "兩側", + "prop.screwHoleLength": "總長度", + "prop.teardropDiameter": "直徑(圓形部分)", + "prop.teardropLength": "孔長度", + "prop.teardropTipAngle": "尖端角度", + "prop.cornerFillet": "角落圓角", + "prop.topBottomFillet": "上/下圓角", + "prop.bentTubeProfile": "斷面", + "prop.bentTubeInnerProfile": "內斷面", + "prop.bentTubeSize": "外形尺寸", + "prop.bentTubeWall": "壁厚", + "prop.bentTubeSegment": "分段", + "prop.bentTubeSegmentLength": "直段長度", + "prop.bentTubeBendAngle": "彎曲角度", + "prop.bentTubeBendRadius": "彎曲半徑", + "prop.bentTubeRoll": "滾轉角", + "bentTube.profileRound": "圓形", + "bentTube.profileSquare": "方形", + "bentTube.profileHexagon": "六邊形", + "bentTube.profileOctagon": "八邊形", + "bentTube.innerNone": "無(實心)", + "bentTube.segmentNumber": "分段 {number}", + "bentTube.addSegment": "新增分段", + "bentTube.removeSegment": "移除分段", + "bentTube.selfIntersects": "管子與自身相交。變更某個長度、角度或滾轉角。", + "inspector.bentTubeSegments": "分段", + "panel.export": "匯出", + "panel.import": "匯入", + "panel.close": "關閉{title}", + "export.formatLabel": "匯出格式", + "export.format": "格式", + "export.fileName": "檔名", + "export.fullProject": "完整設計", + "export.scopeSelected": "已選取 {count} 個", + "export.selectionOnlyOne": "僅匯出選取的物件,而非包含 {total} 個物件的整份設計。", + "export.selectionOnlyMany": "僅匯出選取的 {count} 個物件,而非包含 {total} 個物件的整份設計。", + "export.selectAll": "全選", + "export.scopeTotal": "共 {count} 個", + "export.holesOnlyWarning": "孔無法單獨匯出,請將其與實體群組。", + "export.hiddenOne": "已略過 1 個隱藏零件。若要一併匯出,請將其顯示。", + "export.hiddenMany": "已略過 {count} 個隱藏零件。若要一併匯出,請將其顯示。", + "export.estimateTitle": "材料", + "export.estimateHint": "粗略估算,以 1.75 mm 線材計算。", + "export.estimateInfillLabel": "填充率", + "export.estimateWallsLabel": "壁數", + "export.estimateInfill": "重量與線材用量依 {walls} 層壁、{infill} % 填充率計算,僅為粗略估計——實際由切片軟體的設定決定。若為實心(100 % 填充),則為 {grams} g。", + "export.estimateSolidNote": "以實心實體計算,相當於以 100 % 填充列印,為上限值。", + "export.estimateMaterial": "用於估算重量的線材", + "export.estimateVolume": "體積", + "export.estimateWeight": "重量", + "export.estimateFilament": "線材", + "export.estimateBusy": "正在計算 …", + "export.estimateOverlap": "部分重疊的實體無法合併,重疊部分會被重複計算。", + "export.material.pla": "PLA", + "export.material.petg": "PETG", + "export.material.abs": "ABS", + "export.material.asa": "ASA", + "export.material.tpu": "TPU", + "export.material.pa": "PA(尼龍)", + "export.historyTitle": "已儲存的操作記錄", + "export.historyHint": "選擇要隨設計一起儲存的近期復原操作數量", + "export.historyLabel": "已儲存的 LYL 操作記錄", + "export.unlimited": "不限", + "export.historyNone": "無", + "export.actionCount": "{count} 個操作", + "export.saveToShared": "儲存到伺服器", + "export.savingProject": "正在儲存設計…", + "export.saveProject": "儲存 layerling 設計", + "export.buildingStep": "正在建立 STEP…", + "export.run": "匯出 {format}", + "export.stl.description": "3D 列印網格", + "export.stl.note": "最適合切片軟體與 3D 列印。幾何會以三角網格匯出。在 Chrome 和 Edge 中只需選擇一次資料夾與檔名;之後匯出該設計的 STL 會寫入該檔案,除非你輸入其他名稱:此時會再次詢問。", + "export.stlLinkedFile": "儲存到 {name}", + "export.stlNewFile": "詢問 {name} 的儲存位置", + "export.stlSaveAs": "另存新檔…", + "export.3mf.description": "帶顏色的切片專案", + "export.3mf.note": "適用於 PrusaSlicer、Bambu Studio、OrcaSlicer 和 Cura。每個實體都會保留為獨立零件,並保留名稱與顏色。", + "export.obj.description": "通用 3D 網格", + "export.obj.note": "相容性廣泛的網格格式,用於建模、算圖與資料交換。顏色儲存在頂點上,Bambu Studio 和 OrcaSlicer 可讀取。", + "export.step.description": "CAD / B-Rep", + "export.step.note": "將方塊、圓柱、球體和圓錐保留為精確的 CAD 幾何,邊緣做過圓角或倒角的物件,以及以 STEP 匯入的實體也一樣。螺紋、彈簧和齒輪同樣以精確實體匯出。錐形、傾斜和扭曲的形狀也能精確匯出。匯入的網格則超出 STEP 的能力——這類會以 STL 匯出。", + "export.svg.description": "俯視向量圖", + "export.svg.note": "匯出乾淨的俯視剪影,單位為公釐,包含孔與曲線輪廓。", + "export.svg.noteFootprint": "僅匯出物件在工作平面上的著地輪廓,以公釐為單位的線條,用於雷射切割與模板。", + "export.svg.view": "視圖", + "export.svg.viewSilhouette": "俯視剪影", + "export.svg.viewFootprint": "工作平面上的著地輪廓", + "export.lyl.description": "layerling 自有的設計格式", + "export.lyl.note": "保留可編輯的設計、復原/重做歷史、草圖、群組、CAD 資料與匯入的來源檔。較舊的 .skf 檔案也能開啟,並會儲存為 .lyl。在 Chrome 和 Edge 中由你自行選擇資料夾與檔名,之後按 Ctrl+S 會再次儲存到該檔案;從檔案開啟的設計會存回原檔案。", + "import.openProject": "開啟 layerling 設計", + "import.openProjectHint": "將 layerling 設計(.lyl 或較舊的 .skf)還原為新的本機設計", + "import.insertProject": "插入此設計", + "import.insertProjectHint": "將 layerling 設計(.lyl)中的實體新增到目前設計,例如反覆使用的常用零件", + "import.divider": "或新增幾何", + "import.dropZone": "拖入 STL、OBJ(連同其 .mtl 或打包成 ZIP)、3MF、STEP、SVG、PNG 或 JPG 檔案", + "import.dropZoneHint": "或點擊從電腦中選擇", + "import.keepSvgPage": "SVG:保留在圖紙頁面上的位置", + "import.keepSvgPageHint": "在同一頁面繪製的圖形(例如將同一份文件的圖層分別匯出成檔案)逐個匯入後會重新對齊。未勾選時,每張圖都會以自身為中心對齊。", + "import.svgWidth": "SVG 與圖片:寬度(mm)", + "import.svgWidthHint": "輸入圖形或圖片匯入時應有的寬度;留空則維持原有尺寸。僅對下一次匯入有效。", + "import.svgWidthPlaceholder": "原尺寸", + "status.importSvgNoPage": "{name} 未宣告頁面尺寸,因此照一般方式置中。", + "view.cube": "視圖方向立方體", + "view.top": "俯視圖", + "view.bottom": "仰視圖", + "view.front": "前視圖", + "view.back": "後視圖", + "view.right": "右視圖", + "view.left": "左視圖", + "view.topShort": "上", + "view.bottomShort": "下", + "view.frontShort": "前", + "view.backShort": "後", + "view.rightShort": "右", + "view.leftShort": "左", + "camera.controls": "相機控制", + "camera.show": "顯示相機控制", + "camera.hide": "隱藏相機控制", + "camera.showShort": "顯示控制", + "camera.hideShort": "隱藏控制", + "camera.home": "回到預設視角", + "camera.focusSelection": "將視圖置中於選取的物件", + "camera.zoomIn": "放大", + "camera.zoomOut": "縮小", + "camera.touchRotate": "以單指旋轉視圖", + "camera.touchRotateHint": "雙指一律用於縮放與移動工作平面。開啟時,單指會轉動視圖,而不是選取物件。", + "camera.orthographic": "正交視圖", + "camera.perspective": "返回透視視圖", + "camera.placeWorkplane": "放置工作平面", + "camera.resetWorkplane": "工作平面回到基準平台", + "camera.hideFaceWorkplane": "隱藏面上的工作平面", + "camera.showFaceWorkplane": "顯示面上的工作平面", + "camera.hideWorkplane": "隱藏工作平面", + "camera.showWorkplane": "顯示工作平面", + "camera.tapeTools": "捲尺", + "camera.cornerRulerTool": "放置角尺", + "camera.duplicateAlongRuler": "沿尺複製", + "camera.tapeActions": "捲尺操作", + "camera.addMeasurement": "新增量測", + "camera.moveMeasurement": "移動量測點", + "camera.tapeWholeEdges": "量測整條邊", + "camera.tapeWholeEdgesHint": "量測整條邊:點擊一條邊即量測其全長,例如圓的周長。關閉時,點擊會在邊上放置一個點,用於量測直徑或其他任意距離。按住 Alt 可反轉一次。在圓上,對側的點會自動吸附,因此直徑可精確得出。", + "camera.deleteMeasurement": "刪除量測段", + "camera.deleteAllMeasurements": "刪除所有量測", + "camera.tapeMarkMiddle": "將中點標記為參考點", + "camera.sectionView": "剖視圖", + "camera.sectionActive": "剖視已啟用", + "camera.sectionInactive": "剖視未啟用", + "camera.sectionAxis": "軸", + "camera.sectionAxisX": "X(寬度)", + "camera.sectionAxisY": "Y(深度)", + "camera.sectionAxisZ": "Z(高度)", + "camera.sectionFlip": "翻轉剖切方向", + "camera.sectionOrientation": "座標軸基準", + "camera.sectionOrientationWorld": "設計", + "camera.sectionOrientationWorldHint": "設計的 X、Y、Z 軸,與位置欄位一致", + "camera.sectionOrientationWorkplane": "工作平面", + "camera.sectionOrientationWorkplaneHint": "工作平面的 X、Y、Z 軸:Z 軸剖切平行於工作平面,X 與 Y 軸則垂直於它。剖切會隨工作平面移動。", + "camera.sectionOrientationView": "視圖", + "camera.sectionOrientationViewHint": "面向螢幕:Z 軸朝遠離你的方向延伸,因此剖切會切掉前方的部分。轉動視圖後請再點擊一次。", + "camera.sectionWorkplane": "在此放置工作平面", + "camera.sectionWorkplaneHint": "將工作平面放到剖切位置,草圖就能正好從那裡開始,並顯示剖切輪廓", + "camera.sectionReset": "置中", + "camera.sectionResetHint": "將剖切位置置中於模型", + "camera.sectionOffset": "位置", + "camera.sectionCoarse": "粗調", + "camera.sectionFine": "微調", + "camera.sectionFineHint": "微調滑桿:在粗調位置 ±{span} 範圍內", + "camera.sectionMeasure": "量測", + "camera.sectionMeasureHint": "直接在剖切面上量測壁厚、間距與間隙", + "camera.sectionMeasureHelp": "在輪廓上點擊兩個點。第二個點會垂直吸附到其所在的壁面;在圓上,圓心以及與第一個點相對的點也會吸附。", + "camera.sectionBack": "返回", + "camera.sectionBackHint": "先關閉量測,再關閉面板(Esc)", + "camera.sectionConfirm": "關閉", + "camera.sectionConfirmHint": "關閉面板並保留剖切", + "camera.sectionShowPlane": "顯示剖切平面", + "panel.moveHint": "拖曳可移動;連按兩下或拖回原處即可還原", + "camera.sectionMoveHint": "拖曳可移動;拖到剖視圖按鈕上或連按兩下即可還原", + "camera.sectionExportSvg": "剖視匯出為 SVG", + "camera.sectionExportSvgHint": "將剖切平面上的輪廓以 1:1 儲存為 SVG,供雷射切割機、繪圖機或模板使用", + "camera.sectionFileSuffix": "剖視", + "camera.sectionSeenFromRight": "從右側看", + "camera.sectionSeenFromTop": "從上方看", + "camera.sectionSeenFromFront": "從前方看", + "status.buildingSectionSvg": "正在切出剖視 …", + "status.sectionSvgExported": "剖視已儲存為 SVG:{count} 個輪廓,{face},比例 1:1。", + "status.sectionSvgOpen": "其中 {count} 個輪廓未閉合,因為該處的實體並未封閉。", + "status.sectionSvgOverlap": "重疊的實體無法合併,因此輪廓會互相重疊。", + "status.sectionSvgNothing": "沒有可剖切的可見實體。", + "status.sectionSvgMissed": "剖切平面未切到任何可見實體。請將其移入設計範圍內。", + "status.sectionSvgFailed": "無法將剖視儲存為 SVG。", + "sketch.boxWidth": "選取範圍的寬度", + "sketch.boxDepth": "選取範圍的高度", + "sketch.stroke": "描邊", + "sketch.strokeHint": "將草圖建成有寬度的線,而不是面", + "sketch.strokeTitle": "描邊", + "sketch.strokeClose": "關閉描邊設定", + "sketch.strokeOn": "以描邊建立", + "sketch.strokeWidth": "寬度", + "sketch.strokeAlign": "位置", + "sketch.strokeAlign.center": "置中", + "sketch.strokeAlign.inside": "內側", + "sketch.strokeAlign.outside": "外側", + "sketch.strokeAlign.grow": "加寬", + "sketch.strokeAlign.shrink": "收窄", + "sketch.strokeAlignHint": "僅適用於閉合輪廓;開放的線一律置中。", + "sketch.strokeJoin": "轉角", + "sketch.strokeJoin.miter": "尖角", + "sketch.strokeJoin.round": "圓角", + "sketch.strokeJoin.bevel": "斜角", + "sketch.strokeCap": "端點", + "sketch.strokeCap.flat": "平頭", + "sketch.strokeCap.square": "方頭", + "sketch.strokeCap.round": "圓頭", + "sketch.strokeCapHint": "僅適用於開放的線。", + "sketch.silhouetteHint": "省略所有位在另一輪廓內的輪廓:孔洞,以及孔裡的內容。", + "status.sketchSilhouetteOn": "草圖建立時不含孔", + "status.sketchSilhouetteOff": "草圖再次以含孔方式建立", + "sketch.strokeEmpty": "描邊沒有留下任何面積。畫一條線,或選擇更大的寬度。", + "sketch.clickToEditDimension": "點擊以輸入長度", + "sketch.dimensionUpdated": "線長已變更", + "sketch.clickToEditAngle": "點擊以輸入角度", + "sketch.typedLength": "長度", + "sketch.typedAngle": "角度", + "sketch.typedLineHint": "用數值畫下一條線:長度以公釐計,按「<」或 Tab 跳到角度(0° 向右、90° 向上;留空則跟隨游標),Enter 確定點,Esc 關閉。", + "sketch.typedLineOffPlate": "平台沒有延伸到那裡。縮短長度,或換個方向。", + "sketch.angleEditHint": "角度以度為單位。Enter 套用,Tab 切換要旋轉的線(虛線),Esc 取消。", + "sketch.angleUpdated": "角度已變更", + "camera.shortcut": "{label}({keys})", + "camera.viewSaved": "視圖已儲存到 {key},按 {key} 即可返回", + "camera.savedViewEmpty": "{key} 尚未儲存視圖,按 Shift+{key} 儲存目前的視圖", + "workspace.title": "工作區設定", + "workspace.close": "關閉設定", + "workspace.sections": "工作區設定分區", + "workspace.appearance": "外觀", + "workspace.appearanceHint": "調整畫布與導覽行為。", + "workspace.measurement": "量測", + "workspace.measurementHint": "選擇單位、精度、比例與吸附。", + "workspace.workplane": "工作平面", + "workspace.workplaneHint": "設定平台尺寸與可見的網格間距。", + "workspace.shapeDefaults": "形狀預設值", + "workspace.shapeDefaultsHint": "自訂每個工具列形狀的初始設定。現有上限在你輸入自訂上限之前維持不變。", + "workspace.history": "歷史記錄", + "workspace.theme": "主題", + "workspace.themeSystem": "跟隨系統", + "workspace.themeLight": "淺色", + "workspace.themeDark": "深色", + "workspace.themeGraphite": "石墨(中性深色)", + "workspace.toolbarSize": "工具列大小", + "workspace.toolbarSizeSmall": "小", + "workspace.toolbarSizeMedium": "中", + "workspace.toolbarSizeLarge": "大", + "workspace.simpleMode": "簡易模式", + "workspace.simpleModeHint": "適合兒童與初學者:工具更少、形狀清單更短、按鈕更大,起始頁也不會連到 layerling 以外的網站。", + "workspace.simpleModeOff": "按住以關閉簡易模式", + "workspace.viewCubePosition": "視圖立方體位置", + "workspace.viewCubePositionTopLeft": "左上", + "workspace.viewCubePositionTopRight": "右上", + "workspace.viewCubePositionBottomLeft": "左下", + "workspace.viewCubePositionBottomRight": "右下", + "workspace.showMoveDimensions": "顯示移動尺寸", + "workspace.showOriginDimensions": "顯示到原點的距離", + "workspace.dimensionsAlwaysVisible": "尺寸一律顯示", + "workspace.showRotationAngles": "顯示旋轉後實體的角度", + "workspace.startInPerspective": "編輯器以透視視圖啟動", + "workspace.doubleClickOpensSketch": "按兩下開啟草圖", + "workspace.doubleClickOpensGroup": "按兩下開啟群組或綁定", + "workspace.selectBeforeMoving": "先選取再移動", + "workspace.frameByDirection": "由框選方向決定", + "workspace.frameByDirectionHint": "向右拖曳的框只選取完全落在框內的物件,向左拖曳的框則選取所有碰到的物件(以虛線繪製),與 SketchUp 相同", + "workspace.objectSnap": "移動時吸附到其他形狀", + "workspace.overhangAngle": "標記 {angle}° 以上的懸垂", + "workspace.overhangStrict": "30°(謹慎)", + "workspace.overhangLoose": "70°(散熱良好)", + "workspace.showShadows": "顯示陰影", + "workspace.cameraInertia": "相機持續轉動", + "workspace.cameraInertiaHint": "放開後,視圖會再轉一下並緩緩減速。關閉:立即停止,與 Tinkercad 和 Fusion 360 相同。", + "workspace.fastMode": "快速模式", + "workspace.fastModeHint": "適合較慢的電腦:關閉陰影、所有實體的邊線與相機慣性,並只以螢幕解析度繪製視圖。你自己的設定會保留,供日後使用。", + "workspace.offInFastMode": "在快速模式下關閉", + "workspace.showGrid": "顯示網格", + "workspace.resetGrid": "重設網格", + "workspace.resetGridHint": "網格的顯示狀態、顏色、間距與線寬都會回到標準值,包括這裡的設定,以及「設為預設」所儲存的預設值。", + "workspace.cruise": "新增形狀時啟用巡航", + "workspace.zoomSpeed": "縮放速度", + "workspace.slow": "慢", + "workspace.fast": "快", + "workspace.units": "單位", + "workspace.inchFormat": "英吋顯示方式", + "workspace.inchFormatFraction": "分數(1 5/8)", + "workspace.inchFormatDecimal": "小數(1.625)", + "workspace.scale": "比例", + "workspace.accuracy": "精度", + "workspace.snapGrid": "吸附網格", + "workspace.customSnapGrids": "自訂吸附網格", + "workspace.customSnapGridsHint": "自訂的量度,例如晶片、排針與洞洞板上 2.54 mm 的接腳間距。吸附選單會提供整格、半格與四分之一格;關閉「同時提供半格和四分之一格」後,就只提供該尺寸本身。", + "workspace.customSnapGridName": "名稱", + "workspace.customSnapGridSize": "尺寸(公釐)", + "workspace.customSnapGridAdd": "新增吸附網格", + "workspace.customSnapGridRemove": "移除此吸附網格", + "workspace.customSnapGridParts": "同時提供半格與四分之一格", + "workspace.printer": "印表機", + "workspace.printerNone": "無印表機,自由尺寸", + "workspace.printerHint": "選擇你的印表機,讓工作平面對應其列印平台尺寸。超出平台的實體會標示出來。", + "workspace.printerInfo": "列印平台 {width} × {depth} mm,最大列印高度 {height} mm(來自 OrcaSlicer 設定檔)。", + "status.bedOverhangOne": "「{name}」放不進 {printer} 的建構範圍({sides})", + "status.bedOverhangMany": "{count} 個實體放不進 {printer} 的建構範圍", + "status.bedOverhangDismiss": "對這些實體隱藏警告(之後若離開建構範圍,會再次警告)", + "bed.side.left": "向左 {mm} mm", + "bed.side.right": "向右 {mm} mm", + "bed.side.back": "向後 {mm} mm", + "bed.side.front": "向前 {mm} mm", + "bed.side.top": "高出 {mm} mm", + "workspace.size": "工作平面尺寸", + "workspace.width": "寬度", + "workspace.length": "長度", + "workspace.gridBlockSize": "網格區塊大小", + "workspace.blockSize": "區塊大小", + "workspace.booleanTriangleLimit": "匯入網格可剪裁的上限", + "workspace.booleanTriangleLimitOlder": "較舊的電腦({count} 個三角形)", + "workspace.booleanTriangleLimitNormal": "一般({count} 個三角形,預設)", + "workspace.booleanTriangleLimitFast": "較快的電腦({count} 個三角形)", + "workspace.booleanTriangleLimitCustom": "三角形數量", + "workspace.booleanTriangleLimitNote": "匯入網格的剪裁、合併與交集都在瀏覽器中計算。三角形數量超過此上限的網格不會處理;先簡化網格,或提高上限。上限越高,編輯器可能停頓數秒。", + "workspace.custom": "自訂", + "workspace.shape": "形狀", + "workspace.useAppDefaults": "使用應用程式預設值", + "workspace.shapeDetails": "形狀詳細資料", + "workspace.shapeDetailsHint": "新增此形狀時使用的額外預設值。", + "workspace.customLimit": "自訂尺寸上限", + "workspace.customLimitHint": "留空則此形狀目前的所有屬性面板與拖曳上限都維持不變。", + "workspace.appLimits": "應用程式上限", + "workspace.savedHistory": "已儲存的歷史記錄", + "workspace.savedHistoryHint": "選擇儲存或重新開啟此設計後,仍可使用的已完成操作數量。", + "workspace.historyActions": "已儲存歷史操作數", + "workspace.actionsToRetain": "保留的操作數", + "workspace.footerHint": "儲存此設計目前的設定。", + "workspace.makeDefault": "設為預設", + "workspace.defaultSaved": "預設值已儲存", + "sketch.toolbar": "草圖工具列", + "sketch.group.draw": "繪製", + "sketch.group.shapes": "形狀", + "sketch.group.select": "選取", + "sketch.group.finish": "完成", + "sketch.group.create": "建立", + "sketch.line": "直線", + "sketch.arc": "圓弧", + "sketch.bezier": "貝茲曲線", + "sketch.smooth": "平滑曲線", + "sketch.construction": "建構線", + "sketch.constructionHint": "將新線畫成建構線:虛線、不屬於實體,點會吸附到建構線的交點", + "sketch.makeConstruction": "建構線", + "sketch.makeConstructionHint": "將這條線設為建構線:虛線,不屬於實體", + "sketch.makeSolid": "設為一般線", + "sketch.makeSolidHint": "將這條建構線改回一般線,成為輪廓的一部分", + "sketch.fromMiddle": "從中點畫線", + "sketch.fromMiddleHint": "從中點畫線:先點擊中點,再往外拖曳;線會往兩側延伸相同長度", + "status.sketchFromMiddleOn": "從中點畫線:先點擊中點,再點擊端點;線會往另一側延伸相同長度", + "status.sketchFromMiddleOff": "已關閉從中點畫線:線會重新從第一點畫到下一點", + "status.sketchConstructionOn": "建構線:新線都是建構線", + "status.sketchConstructionOff": "已關閉建構線:新線重新屬於輪廓", + "status.sketchMadeConstruction": "線已設為建構線", + "status.sketchMadeSolid": "建構線已改為一般線", + "sketch.addShape": "新增草圖形狀", + "sketch.shapesMenu": "草圖形狀", + "sketch.shapesTitle": "草圖形狀", + "sketch.rectangle": "矩形", + "sketch.circle": "圓形", + "sketch.ellipse": "橢圓", + "sketch.halfCircle": "半圓", + "sketch.pieSlice": "扇形", + "sketch.boltCircle": "螺栓圓", + "sketch.triangle": "三角形", + "sketch.hexagon": "六邊形", + "sketch.polygon": "多邊形", + "sketch.star": "星形", + "sketch.polygonSides": "邊數 / 角數", + "sketch.starInner": "星形內徑", + "sketch.addPrimitiveHint": "在草圖原點新增{shape},或將它拖曳到草圖上", + "sketch.select": "選取", + "sketch.addImage": "新增圖片", + "sketch.addImageReady": "新增圖片", + "sketch.addImageBlocked": "選擇「選取」即可新增圖片", + "sketch.refine": "新增或移除點", + "sketch.erase": "擦除", + "sketch.undo": "草圖復原", + "sketch.redo": "草圖重做", + "sketch.finishRevolve": "完成旋轉", + "sketch.sweep": "掃掠草圖", + "sketch.sweepHint": "將輪廓沿路徑掃掠", + "sketch.finishSweep": "完成掃掠", + "sketch.modeBadgeSweep": "掃掠草圖", + "sketch.modeBadgeExtrude": "擠出草圖", + "sketch.operationHint": "此草圖會變成什麼:擠出、旋轉或掃掠", + "status.sketchOperationChanged": "目前:{operation}。完成草圖以建立實體", + "status.sweepStarted": "已開始掃掠草圖:先將橫截面畫成閉合輪廓,再將路徑畫成建構線", + "status.editingSweepProfile": "正在編輯掃掠草圖", + "status.sweepCreated": "已建立掃掠草圖", + "status.sweepUpdated": "掃掠已更新", + "status.sketchCannotSweep": "此草圖無法沿其路徑掃掠", + "sketch.sweepNoProfile": "將橫截面畫成至少一個封閉輪廓。", + "sketch.sweepNoPath": "把路徑畫成構造線:開啟構造線,並在輪廓旁邊畫一條直線或曲線。", + "sketch.sweepManyPaths": "路徑不只一條。請只保留一條連續的構造線。", + "sketch.sweepFailed": "無法沿此路徑掃掠輪廓。請試試更平滑的路徑或更小的橫截面。", + "sketch.finishSketch": "完成草圖", + "sketch.cancel": "取消", + "sketch.to3d": "草圖轉 3D", + "sketch.extrude": "擠出草圖", + "sketch.extrudeHint": "將輪廓擠出成 3D 形狀", + "sketch.revolve": "旋轉草圖", + "sketch.revolveHint": "讓輪廓繞軸旋轉", + "sketch.editTo3d": "編輯草圖轉 3D", + "sketch.edit": "編輯", + "visibility.nothingHidden": "沒有隱藏的物件", + "visibility.showAllHidden": "顯示全部隱藏項({count})", + "visibility.showOutliner": "顯示物件清單", + "visibility.hideOutliner": "隱藏物件清單", + "outliner.collapsePanel": "收合物件清單", + "outliner.expandPanel": "展開物件清單", + "outliner.moveHint": "拖曳可移動;將它放到視圖立方體旁邊,或按兩下重新停駐", + "outliner.title": "物件", + "outliner.search": "搜尋物件 …", + "outliner.empty": "設計中沒有物件", + "outliner.noMatches": "沒有符合的物件", + "outliner.clearSearch": "清除搜尋", + "outliner.collapse": "收合群組", + "outliner.expand": "展開群組", + "outliner.rename": "重新命名", + "outliner.children": "{count} 個部件", + "outliner.lock": "鎖定物件", + "outliner.unlock": "解鎖物件", + "outliner.hide": "隱藏物件", + "outliner.show": "顯示物件", + "outliner.solid": "實體", + "outliner.hole": "孔", + "group.edit": "編輯群組", + "group.editBundle": "編輯綁定", + "group.done": "完成", + "group.noneOpen": "目前沒有正在編輯的群組", + "group.busy": "群組正在重建", + "group.editing": "正在編輯 {path}:修改其中的部件,然後按「完成」。", + "group.editingEdgeWarning": " 重建群組後,整個群組上的圓角與倒角都會遺失。", + "group.finishOpenFirst": "現在只能編輯「{name}」內的群組;請先按「完成」結束目前群組", + "status.groupOpened": "正在編輯「{name}」", + "status.groupClosed": "已重建「{name}」", + "status.groupOpenCancelled": "「{name}」已原樣還原", + "status.groupOnePartLeft": "只剩一個部件,它會獨立保留", + "status.groupNoPartsLeft": "沒有剩餘部件", + "note.placeholder": "寫一則備註 …", + "note.move": "拖曳可移動,點擊可開啟", + "note.detach": "從物件上解除", + "note.free": "位於工作平面", + "point.title": "參考點", + "point.deleteAll": "全部刪除({count})", + "point.move": "拖曳可移動,點擊可顯示座標", + "point.hint": "形狀會吸附到它", + "visibility.overhangs": "顯示懸垂(從 {angle}° 起)", + "visibility.notes": "顯示備註與參考點", + "visibility.eyeAgain": "再按一次眼睛:已選取", + "visibility.allShortcut": ":全部", + "units.metric": "公制(預設)", + "units.imperial": "英制", + "units.bricks": "積木", + "scale.millimeters": "1:1(公釐)", + "scale.centimeters": "1:10(公分)", + "scale.meters": "1:1000(公尺)", + "scale.inches": "1:1(英吋)", + "scale.feet": "1:1(英呎)", + "scale.studs": "1:1(凸點)", + "grid.off": "關閉", + "grid.brick": "積木", + "workspace.customActive": "已啟用自訂設定", + "workspace.usingDefaults": "使用 layerling 預設設定", + "workspace.customizedSuffix": " — 已自訂", + "workspace.appDefault": "應用程式:{value}", + "workspace.shapeNote": "自訂數值會套用到新形狀。自訂尺寸上限也會取代此形狀現有的縮放上限,最高 {max} mm。", + "prop.helixQuality": "螺旋品質", + "workspace.unlimited": "無限制", + "workspace.historyNote": "預設為 {count} 步動作。降低上限會從此設計中永久捨棄較早的復原狀態。", + "edge.chamferTitle": "倒角邊", + "edge.chamfilletTitle": "圓滑倒角邊", + "edge.chamfillet": "圓滑倒角", + "edge.chamfilletHint": "從列印平台上可列印的倒角開始,再平順地圓滑過渡到壁面", + "edge.filletTitle": "圓角邊", + "edge.cancelChamfer": "取消倒角", + "edge.cancelFillet": "取消圓角", + "edge.preparing": "正在準備邊…", + "edge.selectionStatus": "已選取 {selected}/{available} 條銳邊", + "edge.singleObject": "單一物件", + "edge.groupedObjects": "{count} 個群組物件", + "edge.existingFeatureOne": " · 1 個現有的邊特徵", + "edge.existingFeatureMany": " · {count} 個現有的邊特徵", + "edge.selectionHelp": "點擊模型中亮起的邊即可切換選取。按住 Shift 可加入或移除單一條邊。", + "edge.loading": "正在從本機瀏覽器工作執行緒載入 CAD 邊資料。", + "edge.previewBusy": "正在計算預覽。可繼續調整,只會計算最後停留的數值。", + "edge.allSharpEdges": "所有銳邊", + "edge.clear": "清除", + "edge.featureHistory": "復原邊特徵", + "edge.revertHint": "點擊一次即可復原該特徵。", + "edge.editAction": "編輯", + "edge.editHint": "撤回此處理,並以相同的邊和要修改的數值重新開啟工具。", + "edge.revertAction": "復原", + "edge.revertFilletOne": "圓角({size} mm,1 條邊)", + "edge.revertFilletMany": "圓角({size} mm,{count} 條邊)", + "edge.revertChamferOne": "倒角({size} mm,1 條邊)", + "edge.revertChamferMany": "倒角({size} mm,{count} 條邊)", + "edge.revertChamfilletOne": "圓滑倒角({size} mm,1 條邊)", + "edge.revertChamfilletMany": "圓滑倒角({size} mm,{count} 條邊)", + "edge.noStoredHistory": "較早的邊特徵沒有儲存復原記錄。", + "edge.alsoRemovesNewer": "注意:還會一併移除 {count} 個較新的特徵", + "edge.noManifoldEdges": "此處沒有可處理的連續邊。", + "edge.noEdgeAtThreshold": "沒有邊的銳利度達到目前門檻。", + "edge.selectAtLeastOne": "至少選取一條亮起的邊。", + "edge.emptyResult": "CAD 核心傳回空的邊處理結果。", + "edge.radius": "半徑", + "edge.variableRadius": "可變半徑", + "edge.variableRadiusHint": "半徑會沿邊從起點到終點均勻變化。一次只作用在一條邊上。", + "edge.radiusStart": "起點半徑", + "edge.radiusEnd": "終點半徑", + "edge.swapEnds": "交換兩端", + "edge.swapEndsHint": "把較大的半徑放到邊的另一端。", + "edge.variableOneEdge": "可變半徑一次只作用在一條邊上。請只選取一條邊。", + "edge.distance": "距離", + "edge.angle": "角度", + "edge.sharpThreshold": "銳邊門檻", + "edge.topEdges": "頂部邊", + "edge.topEdgesHint": "只選取實體最頂部的邊,例如餅乾壓模的邊緣", + "edge.noTopEdges": "在此門檻下,頂部沒有可處理的邊。", + "edge.bottomEdges": "底部邊", + "edge.bottomEdgesHint": "只選取實體最底部的邊,例如零件的底腳", + "edge.noBottomEdges": "在此門檻下,底部沒有可處理的邊。", + "edge.verticalEdges": "垂直邊", + "edge.verticalEdgesHint": "選取筆直向上的邊,例如箱體的角", + "edge.noVerticalEdges": "在此門檻下,此實體沒有垂直向上的邊。", + "edge.horizontalEdges": "水平邊", + "edge.horizontalEdgesHint": "選取平躺的邊,例如箱體頂部與底部的邊緣", + "edge.noHorizontalEdges": "在此門檻下,此實體沒有平躺的邊。", + "edge.quickAddHint": "按住 Shift 或 Ctrl 再點擊,即可把邊加入已選取的邊", + "edge.done": "完成", + "edge.tangentChains": "點擊時也會一併選取平順延續的邊", + "edge.tangentChainsHint": "只決定點擊會選取什麼。對於從已選邊平順(相切)延續的邊,CAD 核心一律會一併施加倒角或圓角。", + "edge.tangentImpliedOne": "CAD 核心會將此處理延伸到另外 1 條平順延續的邊。", + "edge.tangentImpliedMany": "CAD 核心會將此處理延伸到另外 {count} 條平順延續的邊。", + "edge.keepSize": "縮放時保持邊尺寸", + "edge.onlyVisibleEdges": "只顯示可見邊", + "edge.onlyVisibleEdgesHint": "從此視圖隱藏實體背面的邊,只會顯示並可選取面向你的邊。", + "edge.previewQuality": "預覽品質", + "edge.draft": "草稿", + "edge.standard": "標準", + "edge.fine": "精細", + "edge.apply": "套用", + "edge.errorOverlappingGeometry": "所選尺寸對此邊過大,會與相鄰面相交。請選擇較小的值。", + "edge.errorNoSolidBody": "所選群組中沒有可修改的實體。", + "edge.errorPrepareTimeout": "邊準備逾時。此網格細節過多,無法進行互動處理。", + "edge.errorPreviewTimeout": "邊預覽逾時。請取消工具後再試一次。", + "edge.errorWorkerFailed": "CAD 引擎無法啟動。通常是 layerling 剛更新過:重新載入頁面即可繼續。如果還是不行,請更新瀏覽器。", + "edge.errorFilletTogether": "所選邊在此尺寸下無法一起倒圓角。請縮小尺寸,或少選幾條相連的邊。", + "edge.errorChamferTogether": "所選邊在此尺寸下無法一起倒角。請縮小尺寸,或少選幾條相連的邊。", + "edge.errorKernelFailed": "CAD 核心無法完成此邊處理。", + "error.unknown": "發生錯誤:{detail}", + "error.storedBodyRestore": "無法還原已儲存的精確實體。請復原上一次邊處理,或選擇較小的值。", + "error.exactBodyInvalid": "放置後精確實體無效。請稍微調整數值後再試一次。", + "error.solidNotValid": "無法用這些數值建立有效實體。請稍微調整後再試一次。", + "error.measuresOutOfRange": "數值超出範圍。", + "error.threadChamferAxis": "螺紋的倒角觸及軸線。請選擇較小的倒角。", + "error.gearHoleTeeth": "齒輪的中心孔觸及輪齒。請選擇較小的孔。", + "error.crescentRounding": "尖角的圓化程度不適合此月牙。請選擇較小的值。", + "error.glyphCurve": "某個字母使用了無法轉換成精確輪廓的曲線。", + "error.primitiveDimensions": "此形狀的數值無效。", + "error.primitiveNotSolid": "無法將此形狀準備成有效的 CAD 實體。", + "error.noMeshData": "此物件沒有網格資料。", + "error.noClosedFaces": "此物件沒有封閉面。", + "error.meshOpen": "網格是開放的或非流形。處理邊之前請先修復。", + "error.groupRepair": "無法將群組實體修復成有效幾何。", + "error.noSolidComponents": "所選內容中沒有封閉實體。", + "error.edgeNotMapped": "有條邊無法對應到所屬實體。請重新啟動邊工具。", + "error.prepareFirst": "開啟預覽前請先準備物件。", + "edge.errorNoSolidResult": "此數值不會留下封閉實體。請選擇較小的值。", + "error.storedStepNoSolid": "已儲存的 STEP 主體中沒有實體。", + "error.fontsNotLoaded": "字型尚未載入。請稍後再試。", + "error.revolveNoProfile": "請在旋轉軸左側繪製至少一個封閉輪廓。", + "error.revolveNoArea": "旋轉輪廓沒有填充面積。", + "error.revolveNotValid": "無法將此輪廓旋轉成有效實體。", + "error.sketchOpenPaths": "所有輪廓路徑都是開放的。完成草圖前請至少封閉一個迴路。也可以開啟「以描邊建立」,用一定寬度建立這條開放線本身。", + "error.svgEmpty": "SVG 檔案是空的。", + "error.svgTooLarge": "SVG 檔案過大。上限為 {size} MB。", + "error.svgEntities": "此 SVG 檔案使用了實體或自訂的文件類型。僅支援單純的 SVG 文件。", + "error.svgNaN": "SVG 檔案包含無效的數字。在 Tinkercad 中,匯出橫截面之前請確認工作平面與模型相交。", + "error.svgTooComplex": "SVG 檔案過於複雜。請簡化圖形後再試一次。", + "error.svgExternal": "此 SVG 只連到它外部的檔案,layerling 無法開啟。請直接開啟該圖片(PNG 或 JPG),或將繪圖內容一併儲存進 SVG。", + "error.svgPicture": "此 SVG 在繪圖之外還附了一張圖片,而圖片不是繪圖。只有當 SVG 裡只有圖片時才會描摹圖片:請把圖片移出 SVG,或直接開啟該圖片(PNG 或 JPG)。", + "error.pictureUnreadable": "無法讀取圖片。請另存成 PNG 或 JPG 後再試一次。", + "error.pictureEmpty": "圖片這個部分沒有可描摹的內容。請試試其他部分。", + "error.svgOpenStrokes": "SVG 檔案只包含開放的描邊。匯入前請封閉路徑,或將描邊轉換成填充輪廓。", + "error.svgNoPaths": "SVG 檔案中找不到可讀的填充或封閉路徑。", + "error.svgInvalidXml": "該檔案不是有效的 SVG(XML 錯誤)。", + "error.meshBroken": "網格已損壞:有不完整的三角形或無效的座標。", + "error.meshTooComplex": "網格過於複雜。請簡化後再試一次。", + "error.meshDegenerate": "網格包含零面積的三角形。請修復後再試一次。", + "error.meshNotWatertight": "網格不是水密的(有開放或非流形的邊)。請修復後再試一次。", + "error.meshNoVolume": "網格未圍成任何體積。", + "error.svgProjectionEmpty": "投影中沒有可讀的輪廓,也沒有可見面積。", + "error.objEmpty": "OBJ 檔案不含可讀取的幾何。", + "error.objBroken": "OBJ 檔案含有錯誤的幾何(頂點、面或索引無效)。", + "error.stlEmpty": "STL 檔案不含可讀取的幾何。", + "error.threemfUnzip": "無法解壓縮 3MF 檔案。檔案是否已損壞?", + "error.threemfEmpty": "3MF 檔案不含可讀取的 3D 模型。", + "error.threemfBroken": "3MF 檔案含有錯誤的資料。", + "error.stepRead": "無法讀取 STEP 檔案。", + "error.stepNoSolid": "STEP 檔案沒有可匯入的實體幾何。", + "error.stepExport": "STEP 匯出失敗。", + "error.stlExportLimit": "設計的三角面過多,無法寫入二進位 STL 檔案。", + "error.threemfExportEmpty": "匯出 3MF 至少需要一個含有三角面的實體。", + "error.projectAssetType": "設計中不支援這種檔案。", + "error.noLocalDatabase": "此瀏覽器沒有本機資料庫。", + "error.libraryOpen": "無法開啟形狀庫。", + "error.libraryBusy": "形狀庫正在另一個分頁中使用。", + "error.libraryWrite": "無法寫入形狀庫。", + "error.libraryMissing": "此形狀已不在形狀庫中。", + "error.serverShapeSave": "無法將形狀儲存到伺服器。", + "error.projectStorage": "設計形狀的儲存空間無法使用或無法開啟。", + "error.storeFolderCreate": "無法建立共用資料夾 {folder}(來自 {setting} 設定)({reason})。請在 {folder} 掛載可寫入的資料夾,或將 {setting} 設為你掛載的資料夾。在 Docker 中,變更設定後請執行「docker compose up -d」套用;「restart」會沿用舊設定。", + "error.folderNameNotAllowed": "不允許使用該資料夾名稱。", + "error.folderNotAllowed": "不允許使用該資料夾。", + "error.folderNotOnServer": "伺服器上沒有該資料夾。", + "error.folderExists": "已有使用該名稱的資料夾。", + "error.folderSameName": "該資料夾已經叫這個名稱。", + "error.folderNotEmpty": "該資料夾不是空的。", + "error.storeFolderRename": "儲存資料夾本身無法重新命名。", + "error.storeFolderRemove": "儲存資料夾本身無法移除。", + "error.sharedBusy": "此共用專案目前正由其他人變更。請稍後再試。", + "error.sharedNotFound": "找不到共用專案。", + "error.sharedNameInvalid": "共用專案的名稱無效。", + "error.sharedNameRequired": "共用專案需要一個名稱。", + "error.sharedNameTaken": "該資料夾中已有同名專案。", + "error.sharedAlreadyHere": "該專案已在此資料夾中。", + "error.sharedCopyName": "副本需要有自己的名稱。", + "error.sharedReloadFirst": "請先重新載入共用專案,以檢查目前的修訂版本,然後再試一次。", + "error.sharedChanged": "共用專案在你載入後已變更。請重新整理共用專案清單後再試。", + "error.sharedChangedSave": "共用專案在你開啟後已變更。請重新載入,或以其他名稱儲存。", + "error.sharedGone": "共用專案已不存在。請以其他名稱儲存。", + "error.sharedDisabled": "共用專案的儲存功能已停用。", + "error.sharedSameOrigin": "共用專案僅接受來自本網站的請求。", + "error.sharedTooLarge": ".lyl 檔案超過共用儲存空間的大小上限。", + "error.sharedUpload": "上傳不完整,或其縮圖無效。請重新儲存。", + "error.sharedFailRead": "無法讀取共用專案。", + "error.sharedFailDelete": "無法刪除共用專案。", + "error.sharedFailSave": "無法儲存共用專案。", + "error.sharedFailDownload": "無法下載共用專案。", + "error.thumbnailInvalid": "縮圖或其請求無效。", + "error.thumbnailTooLarge": "縮圖影像過大。", + "error.thumbnailSameOrigin": "僅接受來自本網站的縮圖。", + "error.thumbnailSave": "無法儲存縮圖。", + "error.historyViewOpen": "歷史記錄視圖已開啟。變更設計前請先關閉它(layerling_set_history_view,open: false)。", + "error.noEarlierState": "目前還沒有較早的狀態可以回看。", + "error.finishBeforeHistory": "請先完成目前的動作,再開啟歷史記錄視圖。", + "crash.title": "layerling 發生錯誤", + "crash.description": "無法顯示此視圖。瀏覽器中儲存的設計不會因此被刪除。", + "crash.details": "錯誤訊息", + "crash.backupMissing": "瀏覽器中尚無此設計的儲存狀態。", + "crash.projectHint": "受影響的設計:{name}", + "crash.goToDashboard": "返回起始頁", + "crash.downloadBackup": "將最後一次儲存的狀態另存新檔為 .lyl", + "crash.newEmptyProject": "開始新設計", + "edge.errorMeshNotSolid": "無法將所選網格轉換為封閉的 CAD 實體。新增邊特徵前,請先嘗試分離部件、取消群組或簡化物件。", + "edge.errorKernelMemoryFault": "CAD 核心發生記憶體錯誤並已重設。請重新啟動邊工具;不需要重新整理頁面。", + "edge.errorKernelRestart": "CAD 核心空間不足,已重新啟動。請稍候片刻,再重新啟動邊工具;不需要重新整理頁面。", + "error.kernelNeedsSimd": "CAD 核心需要 WebAssembly SIMD,但此瀏覽器或電腦不支援。請使用最新版的 Chrome、Edge、Firefox 或 Safari。", + "error.outOfMemory": "瀏覽器在此步驟中記憶體不足。設計相當大。請用「簡化網格」減少匯入網格的三角面,關閉其他分頁後再試。", + "split.title": "分割", + "split.subtitle": "擺放平面,然後建立兩個實體", + "split.cancelAria": "取消分割", + "split.targetOne": "已選取 1 個物件", + "split.targetMany": "已選取 {count} 個物件", + "split.targetHint": "每個相交的物件都會變成兩個封閉網格。", + "split.orientation": "平面方向", + "split.workplane": "對齊工作平面", + "split.workplaneParallel": "平行", + "split.workplaneParallelHint": "讓平面貼齊工作平面——若工作平面原點穿過部件,就讓平面經過原點,否則經過部件中央", + "split.workplaneAcrossX": "沿 X 方向", + "split.workplaneAcrossXHint": "垂直於工作平面,沿其 X 方向", + "split.workplaneAcrossY": "沿 Y 方向", + "split.workplaneAcrossYHint": "垂直於工作平面,沿其 Y 方向", + "split.rotation": "繞 {axis} 旋轉", + "split.rotationAria": "分割平面繞 {axis} 軸旋轉", + "split.rotationSliderAria": "分割平面繞 {axis} 軸旋轉滑桿", + "split.rotationValue": "{value} 度(繞 {axis} 軸)", + "split.degrees": "度", + "split.position": "平面位置", + "split.positionAria": "分割平面位置", + "split.positionSliderAria": "分割平面位置滑桿", + "split.positionValue": "{value} {unit}", + "split.pickFace": "選取面", + "split.pickFaceHint": "選取面:點擊一個面,將平面放在該面上", + "split.help": "半透明平面會預覽實際的切割位置。拖曳箭頭即可移動,或用「選取面」讓平面貼在某個面上。繞一個或兩個軸轉動,即可斜切。", + "split.apply": "分割模型", + "split.applying": "正在分割", + "split.error.notClosed": "來源網格無法形成封閉實體({status})。", + "split.error.overlapping": "重疊或未相連的部件無法合併為有效的分割實體。", + "split.error.emptyHalf": "分割平面切出空白或無效的一半。請將平面往模型內部移得更深。", + "split.error.store": "分割已完成,但有一個輸出網格無法儲存。", + "split.error.kernel": "分割核心錯誤:{message}", + "split.error.kernelUnknown": "分割核心無法處理此模型。", + "split.error.failed": "無法分割 {name}。{detail}", + "split.error.failedDefault": "無法在此平面分割模型。", + "split.error.movePlane": "請讓平面穿過至少一個所選物件。", + "status.splitReady": "分割:擺放平面,然後套用", + "status.splitPick": "點擊一個面,將分割平面貼在其上;按 Esc 停止", + "status.splitCancelled": "已取消分割", + "status.splitCancelledChanged": "因選取範圍或模型已變更,分割已取消", + "status.splitCancelledProcessing": "因處理過程中專案、選取範圍或模型已變更,分割已取消", + "status.splitSelectSolids": "選取一個或多個可見且未鎖定的實體或孔,以進行分割", + "status.splitNoGeometry": "所選內容沒有可列印的幾何可供分割。", + "status.splitFailed": "無法分割 {name}", + "status.splitMissed": "分割平面未穿過所選內容", + "status.splitOne": "已將 1 個物件分割為 {count} 個實體", + "status.splitMany": "已將 {count} 個物件分割為 {bodies} 個實體", + "align.left": "左", + "align.right": "右", + "align.center": "置中", + "align.front": "前", + "align.back": "後", + "align.middle": "中間", + "align.bottom": "底", + "align.top": "頂", + "align.do": "對齊:{label}", + "align.already": "已對齊:{label}", + "mirror.leftRight": "左右", + "mirror.frontBack": "前後", + "mirror.topBottom": "上下", + "notice.sharedLoadFailed": "無法載入伺服器上的設計", + "notice.projectListSaveFailed": "無法儲存設計清單", + "notice.projectShapesLoadFailed": "無法載入設計形狀", + "notice.projectShapesSaveFailed": "無法儲存設計形狀", + "error.projectTooLarge": "此設計太大,無法儲存:歷史記錄與網格佔用太多空間。請在歷史記錄視圖中刪除歷史記錄,或簡化最佔空間的實體。", + "error.storageFull": "瀏覽器已沒有空間儲存此設計。請在歷史記錄視圖中刪除歷史記錄、移除不需要的設計,或先備份。", + "notice.projectShapesSaveFailedWhy": "無法儲存設計形狀:{reason}", + "notice.projectHistoryTrimmed": "此設計較大:瀏覽器中儲存的副本只保留最後 {kept} 步歷史記錄(共 {total} 步)。刪除歷史記錄可讓它更小。", + "notice.projectShapesMigrateFailed": "無法將設計形狀遷移到更大的儲存空間", + "notice.projectShapesPrepareFailed": "無法準備設計形狀的儲存空間", + "notice.projectShapesDeleteFailed": "無法從本機儲存空間刪除設計形狀", + "notice.validatingFile": "正在驗證 {name},以便將其開啟為新設計", + "notice.opened": "已開啟 {name}", + "notice.openingShared": "正在開啟伺服器設計 {name}", + "notice.openedServerProject": "已開啟伺服器設計 {name}——變更會自動儲存到那裡。", + "error.newerDesign": "此設計由 layerling {saved} 儲存,而你使用的是 {current}。其中含有此版本尚未支援的內容。請重新載入頁面以取得最新版本;已安裝的應用程式或你自己的伺服器可能需要更新。", + "notice.newerDesignOpened": "此設計由 layerling {saved} 儲存,而你使用的是 {current}:較新的內容(例如自訂字型)在這裡可能顯示不同。請重新載入頁面以取得最新版本。", + "notice.openedLocalProject": "已將 {name} 開啟為新的本機設計", + "notice.savedToServer": "已將 {name} 儲存到伺服器", + "notice.sendingAllToServer": "正在將 {done}/{count} 放到伺服器上……", + "notice.sentAllOne": "1 個設計已在伺服器上。", + "notice.sentAllMany": "{count} 個設計已在伺服器上。", + "notice.sentAllPartial": "伺服器上有 {done} 個,{failed} 個無法上傳,仍留在瀏覽器中。", + "notice.openSharedFailed": "無法開啟伺服器設計", + "notice.saveSharedFailed": "無法將設計儲存到伺服器", + "notice.folderCreateFailed": "無法建立資料夾", + "notice.renamingFolder": "正在重新命名資料夾 {name}……", + "notice.renamedFolder": "資料夾現在名為 {name}", + "notice.folderRenameFailed": "無法重新命名資料夾", + "notice.deletingFolder": "正在刪除資料夾 {name}……", + "notice.deletedFolder": "已刪除資料夾 {name}", + "notice.folderDeleteFailed": "無法刪除資料夾", + "notice.deletingShared": "正在刪除伺服器設計 {name}", + "notice.deletedShared": "已刪除伺服器設計 {name}", + "notice.deleteSharedFailed": "無法刪除伺服器設計", + "notice.renameSharedFailed": "伺服器設計的檔案無法重新命名,仍保留舊名稱", + "notice.movingShared": "正在移動伺服器設計 {name}……", + "notice.movedShared": "伺服器設計 {name} 現在位於 {folder}", + "notice.movedSharedRoot": "伺服器設計 {name} 現在位於伺服器資料夾的頂層", + "notice.moveSharedFailed": "無法移動伺服器設計", + "notice.moveNameTaken": "該資料夾中已有名為 {name} 的設計", + "notice.duplicating": "正在複製 {name}……", + "notice.duplicated": "已建立 {name}", + "notice.duplicateFailed": "無法複製設計", + "notice.sendingToServer": "正在將 {name} 儲存到伺服器……", + "notice.serverNameTaken": "伺服器上已有名為 {name} 的設計", + "notice.backupEmpty": "尚無可備份的設計", + "notice.backingUp": "正在備份設計……{index}/{total}", + "notice.backupDone": "已備份 {count} 個設計到 {name}", + "notice.backupDoneWithShapes": "已備份 {count} 個設計和 {shapes} 個自訂形狀到 {name}", + "notice.backupShapesRestored": "自訂形狀:新增 {count} 個,{skipped} 個已存在。", + "notice.backupFailed": "備份失敗:{reason}", + "notice.backupNotReadable": "{name} 不是可讀取的 ZIP 檔案", + "notice.backupNoDesigns": "{name} 不含任何 layerling 設計", + "notice.restoringBackup": "正在還原設計……{index}/{total}", + "notice.backupRestored": "已還原 {count} 個設計(來自 {name})", + "notice.backupRestoredPartly": "已還原 {count} 個設計(來自 {name});{failed} 個無法讀取", + "notice.backupAlreadyThere": "{count} 個已存在,未再次新增。", + "notice.backupAllThere": "全部 {count} 個設計都已在這裡(來自 {name}),未新增任何內容。", + "notice.oneBackupAtATime": "請單獨開啟備份,不要和其他檔案一起", + "notice.oneLylAtATime": "一次開啟一個設計檔案;STL、OBJ、STEP 和 SVG 幾何請分開匯入", + "notice.importedDesignName": "已匯入的設計({count} 個檔案)", + "notice.folderDeleted": "資料夾 {name} 已刪除;其中的內容已上移一層。", + "notice.movedToFolder": "{name} 已移到資料夾 {folder}。", + "notice.movedToRoot": "{name} 已移到最上層。", + "notice.importing": "正在匯入第 {index}/{total} 個:{name}", + "notice.importProjectFailed": "無法為匯入的檔案建立設計", +}; diff --git a/docs/TRANSLATING.md b/docs/TRANSLATING.md index 4e029913..ebbe74cb 100644 --- a/docs/TRANSLATING.md +++ b/docs/TRANSLATING.md @@ -1,6 +1,6 @@ # Translating layerling -layerling speaks English, German, Dutch, French, Russian, Czech and Slovenian in full. Further languages are welcome (see the +layerling speaks English, German, Dutch, French, Russian, Czech, Slovenian, Simplified Chinese and Traditional Chinese in full. Further languages are welcome (see the [discussion](https://github.com/henmedia/layerling/discussions/141)); this page is how to add one. You do not have to finish it in one go: a language may start with a few hundred sentences and one chapter of the guide, and everything it does not have yet shows in English. diff --git a/docs/guide/README.md b/docs/guide/README.md index 4e832a67..31d48fe2 100644 --- a/docs/guide/README.md +++ b/docs/guide/README.md @@ -1,8 +1,8 @@ # The user guide The guide at [layerling.com/guide](https://layerling.com/guide/index.html) (English), -[layerling.com/anleitung](https://layerling.com/anleitung/index.html) (German) and in nine more languages (Arabic, -Czech, Danish, Dutch, French, Hungarian, Polish, Russian, Slovenian) is written here and built into plain static pages; +[layerling.com/anleitung](https://layerling.com/anleitung/index.html) (German) and in eleven more languages (Arabic, +Czech, Danish, Dutch, French, Hungarian, Polish, Russian, Simplified Chinese, Slovenian, Traditional Chinese) is written here and built into plain static pages; the three interface languages without a guide of their own (Italian, Japanese, Turkish) show the English one. It ships with the program: `npm run export` and `npm run dev` build it, nothing else to deploy. The build also writes a `search-index.json` per language (one entry per section of every chapter), which the search box in the header of each page reads; nothing to maintain, a new chapter or heading is in it with the next build. diff --git a/docs/guide/zh-cn/01-getting-started.md b/docs/guide/zh-cn/01-getting-started.md new file mode 100644 index 00000000..ec18fc27 --- /dev/null +++ b/docs/guide/zh-cn/01-getting-started.md @@ -0,0 +1,114 @@ +--- +title: 快速上手 +summary: 五分钟从一张空白页面做出第一个 3D 打印零件,无需账号,无需安装。 +--- + +layerling 是一款直接在浏览器里运行的 3D 打印设计程序。你用简单的形状搭出零件,在它上面挖孔,把边缘变圆,然后交给切片软件。无需安装,也无需注册。你做的设计只保存在你自己的电脑上。 + +![layerling 的起始页:顶部是“新建 3D 设计”,下面是你的设计,以及快速指南。](shot:start-page) + +## 创建设计 + +打开 [layerling.com](https://layerling.com/)。在起始页点击 {{ui:dashboard.createDesign}}。编辑器会带着一个空的工作平面打开,所有东西都在这个网格上成形。 + +如果你已经有文件想接着做,用 {{ui:dashboard.importGeometry}}。它支持 layerling 设计(`.lyl`),也支持 STL、OBJ、3MF、STEP 或 SVG 文件。 + +你所有的设计随后都会出现在起始页上,并带有预览图。它们保存在浏览器的存储空间里,每次更改后自动保存,所以没有保存按钮。**layerling 不对保存在浏览器里的设计承担责任。** 浏览器可能出故障,浏览器更新也可能带来问题,所以要不时用起始页上的 {{ui:dashboard.backupAll}} 备份你的设计,或者把它们保存为文件。备份可以通过 {{ui:dashboard.restoreBackup}} 恢复。如何把设计打包成文件并转交他人,见[文件与保存](chapter:files-and-saving)。 + +## 编辑器一览 + +![编辑器的工作平面上有两个形状。上方是功能区,左侧是相机控制,右侧是所选形状的设置。](shot:editor-overview) + +- **上方**是功能区。它按任务分类:{{ui:editor.group.clipboard}}、{{ui:editor.group.history}}、{{ui:editor.group.shapes}}、{{ui:editor.group.visibility}}、{{ui:editor.group.combine}}、{{ui:editor.group.modify}}、{{ui:editor.group.arrange}}、{{ui:editor.group.manage}} 和 {{ui:editor.group.help}}。把鼠标停在图标上就能看到名称。凡是看到小问号的地方,比如形状的设置里、形状库中或工具面板里,它都会直接带你到本指南对应的章节。 +- **中间**是工作平面。你在这里放置形状、把它们拉成想要的形状,并看到结果。 +- **右侧**显示所选形状的设置:颜色、尺寸、位置以及组成该形状的其他内容。输入数字比拖动更精确。 +- **左侧**是相机控制,上方是视图立方体。它们带你在这个场景中移动,详见[视图与工作平面](chapter:view-and-workplane)。 +- **最上方**可以在 {{ui:editor.modeGeometry}} 与 {{ui:editor.modeSketch}} 之间切换、重命名设计,以及选择语言和配色方案。 + +## 工作区周围的按钮 + +把鼠标停在按钮上就能看到名称。如果不确定某个按钮的作用,点击 {{ui:interactiveHelp.title}}(位于 {{ui:editor.group.help}} 区域,快捷键 [[Shift]]+[[F1]]),再点那个按钮。下面是被问得最多的几个。 + +### 粘贴 + +{{ui:editor.tool.paste}}([[Ctrl]]+[[V]])会把用 {{ui:editor.tool.copy}} 复制的内容加入设计。{{ui:common.duplicate}} 则一步完成复制和粘贴。 + +### 删除 + +{{ui:common.delete}}([[Delete]])移除所选形状。{{ui:editor.tool.undo}} 可以把它们找回来。 + +### 取消分组 + +{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])把所选分组重新拆成组成它的那些形状。 + +### 工作区设置 + +{{ui:editor.workspaceSettings}} 打开工作区的设置:单位、平台大小、打印机、网格、颜色、光照等。详见[视图与工作平面](chapter:view-and-workplane)。 + +### 主题 + +最上方的 {{ui:common.theme}} 决定 layerling 的外观:跟随系统、浅色、深色或石墨色。 + +### 重命名设计 + +{{ui:editor.renameProject}}:最上方名称旁边的铅笔图标。输入新名称并按 [[Enter]]。 + +### 设计名称 + +设计的名称({{ui:confirm.projectName}})位于最上方。点击它,输入,按 [[Enter]] 即保留该名称。 + +### 显示选项 + +{{ui:editor.visibilityOptions}},即眼睛图标旁的箭头,里面是你可显示或隐藏的内容:对象列表、你隐藏的所有东西、注释以及打印的悬垂。详见[选择与排列](chapter:select-and-arrange)。 + +### 隐藏所选 + +{{ui:editor.tool.hideSelected}}([[Ctrl]]+[[H]])隐藏所选形状。它们仍留在设计和对象列表中;{{ui:editor.visibilityOptions}} 可以让它们重新显示。 + +### 搜索命令 + +{{ui:palette.open}}:输入你要找的东西——一个工具、一个形状或一项设置——然后点击结果。 + +### 隐藏相机控制 + +{{ui:camera.hide}} 收起左侧的相机控制,给工作区腾出更多空间;{{ui:camera.show}} 会把它们调回来。 + +### 吸附网格 + +属性面板底部的 {{ui:inspector.snapGrid}} 是移动和调整尺寸时吸附的步距。它旁边的小开关 **mm | in** 用来切换单位。详见[视图与工作平面](chapter:view-and-workplane)。 + +### 单位:毫米或英寸 + +{{ui:inspector.snapGrid}} 旁的开关 **mm | in** 会为本设计更改单位、平台网格和吸附步距。 + +### 页脚 + +在窗口底部:{{ui:dashboard.sponsor}} 通往可以支持本项目的页面;{{ui:dashboard.userGuide}} 打开本指南;{{ui:dashboard.forum}} 通往提问、提想法和报告错误的地方(GitHub 上的讨论区,德语用户则为 drucktipps3d 论坛);{{ui:editor.bugReport}} 生成一个用于错误报告的 ZIP 文件;{{ui:dashboard.projectOnGitHub}} 通往 GitHub 上的项目,版本号则打开发行说明。法律声明和隐私政策的链接属于你所使用的那份 layerling 的运营者。 + +## 你的第一个零件 + +举个例子,我们做一个带孔的立方体。 + +1. 点击功能区中的 {{ui:editor.addShape}},选择 {{ui:shape.box}}。这个形状现在挂在鼠标指针上。在工作平面上点一下即可放下。 +2. 在右侧设置尺寸,比如长 40 mm、宽 40 mm、高 20 mm。 +3. 用同样的方式在中间放一个 {{ui:shape.cylinder}},直径 14 mm、高 30 mm。它应该比立方体高,这样才能贯穿整个立方体。 +4. 选中圆柱体,点击右侧的 {{ui:inspector.hole}}。它会变为半透明:这个实体变成了一个从材料中去除东西的工具。 +5. 同时选中两个形状,点击 {{ui:editor.tool.group}}。立方体现在有了一个孔。 + +![圆柱体是孔,并从立方体顶部伸出来。](shot:hole-before) + +![分组之后,立方体上有了一个孔。](shot:hole-after) + +孔、槽和凹坑就是这样做的。[实体与孔](chapter:solids-and-holes)一章有详细说明。 + +## 上次访问之后的新内容 + +更新之后再次打开 layerling 时,起始页上的一张卡片会列出你上次离开之后新增的内容:从那时起的每个版本,最新的在最上面。隔了很久没来,就在卡片里向下滚动。在它们下面,{{ui:whatsNew.earlier}} 会把上次访问之前的版本也加进来。用 {{ui:whatsNew.dismiss}} 关掉它,它就会一直消失到下一次更新。起始页页脚的 {{ui:whatsNew.footerLink}} 随时可以再次显示最新的新增内容。浏览器会记住你上次看到的版本,关于你的任何信息都不会离开它。 + +在你自己电脑或服务器上的 layerling 副本中,有可用更新时会出现一个按钮 {{ui:update.previewShow}},可以在安装前列出这次更新带来的内容。只有你按下按钮时,列表才会从 GitHub 获取。 + +## 从设计到打印 + +零件做好后,点击 {{ui:editor.export}},选择 STL 或 3MF 并下载文件。在你的切片软件中打开它,例如 Bambu Studio、PrusaSlicer、OrcaSlicer 或 Cura。如果在设置中选好了打印机,你在建模时就能看出零件是否能放进打印床。详见[打印](chapter:printing)。 + +> **提示:** 如果你来自 Tinkercad,会很快上手:平台、形状、实体与孔、分组、对齐和镜像的用法几乎一样。新东西主要是倒角与圆角、抽壳、螺纹和草图。 diff --git a/docs/guide/zh-cn/02-view-and-workplane.md b/docs/guide/zh-cn/02-view-and-workplane.md new file mode 100644 index 00000000..ec7c6c01 --- /dev/null +++ b/docs/guide/zh-cn/02-view-and-workplane.md @@ -0,0 +1,195 @@ +--- +title: 视图与工作平面 +summary: 在场景中移动、正对着观察,以及把新形状放到任意你喜欢的表面上。 +--- + +## 移动视图 + +使用鼠标: + +| 操作 | 效果 | +| --- | --- | +| 按住右键拖动 | 旋转视图 | +| 单击右键 | 在实体上打开常用命令菜单:复制、设为孔或实体、分组、隐藏、锁定、删除等;在空白处为“粘贴”和“全选” | +| 按住中键拖动 | 平移视图 | +| 滚轮 | 放大和缩小 | +| 按住 [[Ctrl]] / [[Cmd]] 并用左键拖动 | 也可平移视图(在 MacBook 触控板上:按住 [[Cmd]],按下并拖动) | + +滚轮缩放的速度在设置的 {{ui:workspace.appearance}} 下用 {{ui:workspace.zoomSpeed}} 设定:滑块范围 1 到 14,初始为 5。它只作用于滚轮和触控板:按钮以及 [[+]] 和 [[−]] 键始终按同样的小步距缩放。鼠标滚轮的一格在任何浏览器里缩放幅度都相同,触控板则按你滑过的距离缩放。 + +平板或手机上,两根手指缩放(张开和捏合)并平移视图(并拢滑动)。一根手指在空白处会转动视图,在那里轻点会清除选择;落在形状或控制柄上时,则像鼠标左键那样操作设计。要让从形状上开始的手指也能转动视图,请打开相机栏中的 {{ui:camera.touchRotate}}。这个开关只在带触摸屏的设备上显示。 + +带笔的绘图板用起来像鼠标:笔尖是左键,笔杆上的按键是右键,用于转动视图和打开菜单。绘图板的热键可以在其驱动中设为 layerling 的[键盘快捷键](chapter:shortcuts)。 + +**在平板上,尽量使用触控笔。** 它的笔尖比指尖细得多,也不会挡住你要对准的地方,因此草图中的小点、细线和控制柄、测量点与边都能精确点中,长时间工作也更省力。layerling 已经让手指比鼠标指针更容易够到点、线、控制柄和边,但触控笔仍然是更精确的方式。这适用于绘图板能识别为笔的笔(S Pen、Apple Pencil 等)。普通橡胶笔尖的触控笔在屏幕上等同于手指,并不会更细。 + +平板没有鼠标右键:把一根手指在形状或空白处按住半秒,就会打开右键所打开的菜单,空白处还有**全选**。同一菜单里的**多选**在平板上代替 Shift:之后每次点按实体都会把它加入或移出选择,直到你点按空白处或按 [[Esc]];手指落在空白处仍然会转动视图。选中形状周围的控制柄,手指从旁边一点的位置也能抓住。 + +### 视图立方体 + +左上角的立方体显示你正看向哪里。点击它的某一面,就会跳到从上、下、前、后、左或右看的正视图。点击立方体的角,会从那个角斜着看向模型;点击边附近,则从那条边看过去,位于两个面之间;指针停在上面时该处会亮起。数字键 [[1]] 到 [[6]] 也能给出正视图。同时按住 [[Shift]],视图还会缩放到选中项,就像 [[Shift]]+[[F]] 那样。 + +拖动立方体可以转动视图,和按住右键拖动一样。没有选中任何东西时,方向键也会转动视图:每按一次 15°,配合 [[Shift]] 为 90°。它们按所指的方向转动模型——[[→]] 把模型的正面转向右,[[↑]] 把它的正面向上仰。按住 [[Ctrl]] 时,方向键改为让视图在屏幕上平移:每按一次移动画面的十分之一,同时按 [[Shift]] 则为一半。模型按所指的方向移动。如果选中了东西,方向键会移动它;先点击空白处再转动视图。在触摸屏上,用一根手指即可,无需打开 {{ui:camera.touchRotate}}。 + +### 相机栏 + +左边缘是一条窄栏。从上往下: + +- {{ui:camera.home}} 把整个场景重新装回画面。快捷键是 [[Home]];没有选中任何东西时,[[F]] 也可以。 +- {{ui:camera.focusSelection}} 缩放到选中项([[F]] 或 [[Shift]]+[[F]])。 +- {{ui:camera.zoomIn}} 和 {{ui:camera.zoomOut}} 按步缩放,[[+]] 和 [[−]] 键也是如此。 +- {{ui:camera.orthographic}} 切换到平面视图,平行边保持平行。对于测量和对齐边,这通常比透视视图更舒服。[[O]] 来回切换,再点一次也会返回。 +- {{ui:camera.hideWorkplane}}(网格上方的眼睛)连同网格一起隐藏平台,让你可以从下方查看设计的底面。改变的只是视图:新形状仍然落在工作平面上。再点一次会重新显示。 +- {{ui:camera.placeWorkplane}}、卷尺和直角尺是各自的工具,下文以及[测量与注释](chapter:measuring-and-notes)中会介绍。 + +栏最顶部的小箭头会在它挡路时把它收起。 + +设计会按你离开时的样子打开:视图的角度、缩放和位置会随设计保存在这个浏览器中,所以你可以从停下的地方继续,即使回过起始页或关闭过页面也一样。保存的文件(.lyl)会带上视图,因此在别处打开时也是这个视角。视图不属于撤销历史。 + +每个设计中还可以保存四个自己的视图。[[Shift]]+[[7]]、[[Shift]]+[[8]]、[[Shift]]+[[9]] 或 [[Shift]]+[[0]] 把当前视图原样保存到该键下——包括角度、位置、缩放以及平面或透视——只按该键([[7]]、[[8]]、[[9]] 或 [[0]])即可恢复。底部会有消息确认保存;在同一键下再次保存会替换该视图。和上面的视图一样,保存的视图会随设计留在这个浏览器中,并随保存的文件(.lyl)一起带走,它们也不属于撤销历史。 + +## 查看内部:剖视图 + +{{ui:camera.sectionView}},栏中最后一个按钮(切割工具),沿一个平面把视图切开,以便检查壁、空腔以及互相嵌套的零件。不会真的切掉任何东西:设计、它的文件和所有导出都保持完整。平面穿过实体的地方,切面会以该实体稍暗的颜色填充,内部的孔则保持空白,这样就能区分实心与空心;平面停止移动片刻后,填充面才会出现。 + +- 选择平面横跨的轴:X(宽度)、Y(深度)或 Z(高度),与位置字段中的相同。平面从设计的中间开始。 +- {{ui:camera.sectionOrientation}} 设定这些轴跟随什么。{{ui:camera.sectionOrientationWorld}} 采用设计的坐标轴。{{ui:camera.sectionOrientationWorkplane}} 采用工作平面的坐标轴:此时 Z 平行于它切割,X 和 Y 与它垂直,位置从它的原点算起。工作平面位于斜面时,你就平行于该面切割,移动工作平面时切口也会跟着移动。{{ui:camera.sectionOrientationView}} 把平面转向屏幕:它去掉前方遮挡的部分,滑块则沿视线把平面推入设计更深处,例如为了够到被埋住的零件并点击它。转动视图后,再点一次,切口就会跟随新视图。 +- {{ui:camera.sectionCoarse}} 让平面横跨整个设计移动,{{ui:camera.sectionFine}} 让它在当前位置两侧小幅移动,以十分之一毫米为单位。也可以直接输入位置。 +- 坐标轴旁的按钮显示切口的另一侧,{{ui:camera.sectionReset}} 把平面放回中间,{{ui:camera.sectionShowPlane}} 隐藏蓝色平面。 +- 你可以点击并选中切口露出的内容,包括内壁。 +- {{ui:camera.sectionWorkplane}} 把工作平面放到切口上。它位于剖面上,朝向保留下来的实体外侧,就像切割留下的面。如果你随后切换到草图,草图会正好从那里开始,淡淡的轮廓显示切口,你可以沿着它绘制并吸附。例如,这就是给用剖视图打开的空腔配一个盖子的画法。坐标轴旁的按钮选择保留哪一侧,也就决定了工作平面朝哪个方向。像平常一样,可以把工作平面放回底板。 +- {{ui:camera.sectionMeasure}} 直接在切口上测量:轮廓以蓝色显示,在它上面点击两次即可得到距离,以及沿平面两个轴的分量。两个点都会吸附到轮廓上,优先吸附角点。当第二次点击落在对侧壁上任意位置时,它会与第一个点垂直对齐——因此不用精确瞄准,就能读出壁厚、间隙和公差。第三次点击开始下一次测量,[[Esc]] 结束测量。移动平面会清除测量。在圆形轮廓上,例如穿过圆柱或孔的切口,小十字会标出圆心,圆心也会吸附。点击圆上一点,再靠近它正对面的点:第二次点击会正好落在圆心另一侧,读数显示 Ø,即直径。从圆心到圆上一点则得到 R,即半径。 +- {{ui:camera.sectionExportSvg}} 把切割平面上的轮廓按 1:1 保存为 SVG,供激光切割机、绘图仪、模板或垫片使用。X 切口从右侧看,Y 切口从前面看,Z 切口从上方看。与导出时一样,只有可见实体才会写入,孔已经扣除,同色的实体会合并成一个轮廓。每种颜色保持为独立的无填充路径,这样激光软件会把它们当作不同图层分开。 + +面板附着在它的按钮上。如果它挡住了东西,可以抓住标题栏把它拖到工作平面上的任意位置;下次也会在那里打开。双击标题栏或把它拖回按钮处即可复原。 + +X 和 [[Esc]] 会关闭面板;如果正在测量,[[Esc]] 会先结束测量。切口会一直保留,直到你用 {{ui:camera.sectionActive}} 将其关闭,或回到设计总览。开启时,它的按钮保持高亮。放在被切掉那一侧的任何东西,只有关闭切口后才会显示。平板没有 [[Esc]],所以那里的面板多两个按钮:{{ui:camera.sectionBack}} 在测量进行时结束测量,否则关闭面板;{{ui:camera.sectionConfirm}} 一步关闭面板。电脑上不显示这两个按钮。 + +## 工作平面 + +新形状会与工作平面对齐。起初它是带网格的底板。但你可以把它放到任何表面上,以便在侧壁或斜面上放置东西。 + +1. 按 [[W]] 或点击 {{ui:camera.placeWorkplane}}。 +2. 把鼠标移到实体的某个面上。该面会亮起。 +3. 点击一下就把工作平面放在那里。此后添加的所有东西都位于该面上。 + +如果改为点击空白的平台,工作平面会平放在你点击的位置,并吸附到网格上。新形状和完成的草图(包括旋转生成的)会出现在那里,而不是平台中央。工作平面这样平放在平台上时,平台只显示轮廓:同一平面里的两个网格会造成闪烁的花纹。 + +在面上时,工作平面的原点否则会吸附到网格。点击靠近面角的位置,它就正好落在那个角上。靠近边时它落在边上,网格也与边对齐;这就是有意选择网格角度的方法。没有角或边时,平放的面上的网格与实体平行,所以在一个转过的长方体上,网格也会跟着转。 + +点击平台旁边或按 [[Esc]] 会把工作平面送回底板。更快的是 {{ui:camera.resetWorkplane}}:工作平面位于面上时,带向下箭头的按钮会出现在相机栏里眼睛的下方。[[Shift]]+[[W]] 直接把它放到当前选中的面上。如果点击时按住 [[Shift]],平面会朝向另一边。 + +工作平面位于面上时,{{ui:camera.placeWorkplane}} 旁边会出现一只眼睛。它会隐藏工作平面而不取消它,方便清楚地查看设计:新形状仍然落在那个面上,旋转也仍然绕它进行。点击眼睛会重新显示,设定新的工作平面也会。 + +## 网格与吸附 + +网格显示平台的大小。右下角是**吸附步距**:移动和缩放按这个步距吸附,例如 1 mm。精细作业时调小,粗略摆放时调大。功能区中的 {{ui:editor.tool.snapToGrid}} 会在之后把选中的形状移到最近的网格交叉点。移动时,形状还会吸附到其他形状,见[选择与排列](chapter:select-and-arrange)。 + +> **提示:** 精确拼合零件时,不要一边转着视图。用数字键转到俯视或正视,再按 [[O]] 切换到平面显示。这样一眼就能看出两条边是否真的齐平。 + +### 设置窗口 + +功能区中的齿轮({{ui:editor.workspaceSettings}})打开设置。左侧有五个区域:{{ui:workspace.appearance}}、{{ui:workspace.measurement}}、{{ui:workspace.workplane}}、{{ui:workspace.shapeDefaults}} 和 {{ui:workspace.history}}。改动立即生效。底部的 {{ui:workspace.makeDefault}} 把当前设置保存为默认值,让新设计从这些设置开始;右上角的 {{ui:workspace.close}} 关闭窗口。本节逐项介绍这些设置。 + +### 外观:主题、工具栏与视图立方体 + +{{ui:workspace.theme}} 设定整个程序的配色:{{ui:workspace.themeSystem}} 跟随电脑,其余为 {{ui:workspace.themeLight}}、{{ui:workspace.themeDark}} 和 {{ui:workspace.themeGraphite}}。也可以在编辑器右上角更改。 + +{{ui:workspace.toolbarSize}} 让顶部功能区的按钮、其形状菜单、左侧相机控制和右侧属性面板变小或变大:{{ui:workspace.toolbarSizeSmall}}、{{ui:workspace.toolbarSizeMedium}}(一直以来的样子)或 {{ui:workspace.toolbarSizeLarge}}。小尺寸在笔记本电脑上给工作平面留出更多空间;大尺寸在大屏幕上或用手点击时更容易命中。使用大按钮时,如果窗口太窄,功能区的各组会排到第二行。尺寸保存在这个浏览器中,对所有设计生效。 + +{{ui:workspace.viewCubePosition}} 把视图立方体放到工作平面的另一个角:{{ui:workspace.viewCubePositionTopLeft}}(一直以来的位置)、{{ui:workspace.viewCubePositionTopRight}}、{{ui:workspace.viewCubePositionBottomLeft}} 或 {{ui:workspace.viewCubePositionBottomRight}}。除了左上角,相机控制都会上移到立方体让出的位置。在右下角时,立方体正好位于 {{ui:inspector.snapGrid}} 控件上方。右侧打开形状属性时,右侧的立方体会让到属性面板左边。这个角保存在浏览器中,对所有设计生效。窗口很窄时(例如手机上),该设置会隐藏,立方体留在左上角。 + +### 外观:快速模式 + +{{ui:workspace.fastMode}} 用于较慢的电脑。它会关闭阴影、所有实体的边线和相机的惯性,并且只按屏幕分辨率绘制视图。你自己的设置会保留下来供以后使用,开启期间被覆盖的开关会显示 {{ui:workspace.offInFastMode}}。更多关于慢电脑的提速方法见下文“layerling 卡顿的时候”。 + +### 外观:工作区与草图的颜色 + +工作区的颜色在 {{ui:workspace.appearance}} 下设置:浅色主题的 {{ui:workspace.backgroundColor}} 和 {{ui:workspace.surfaceColor}}(深色主题保留自己的颜色),网格颜色则在 {{ui:workspace.workplane}} 下。每种颜色都是一个显示该颜色的按钮。点击后会打开一个小窗口,其中有色域、一行预设颜色、十六进制值输入框,以及一个把颜色恢复为 layerling 初始值的箭头。按 [[Enter]] 应用输入的十六进制值,点击窗口外也会应用。 + +草图视图有自己的颜色:{{ui:workspace.sketchBackground}} 用于纸张周围的窗口,{{ui:workspace.sketchPlateColor}} 用于网格下方的纸张,{{ui:workspace.sketchGridColor}} 用于网格,均针对浅色主题。{{ui:workspace.sketchMatch}} 一键采用工作区的三种颜色。 + +{{ui:workspace.classicLook}} 把工作区布置成 Tinkercad 的样子:白色地面、淡蓝色的毫米网格(每厘米一条较深的线)、黑色边线、来自上方的光以及柔和阴影。之后每个值仍可单独更改。这些初始值都是 layerling 一直以来的样子,哪种合适取决于你的显示器。 + +![外观下的设置:浅色主题的背景色和工作平面颜色,以及所有实体边线的开关。](shot:settings-appearance) + +![深色配色方案下的编辑器。在右上角设置配色方案:跟随系统、浅色、深色或石墨。](shot:editor-dark) + +### 外观:坐标轴箭头与边线 + +{{ui:workspace.showAxes}}(默认开启)在平台后左角画出三个箭头:**X** 为红色指向右,**Y** 为绿色指向后,**Z** 为蓝色指向上,与位置字段的计数方式一致。这就是 Tinkercad、CAD 程序和切片软件也采用的右手定则。工作平面位于面上时,它们会跟随该面。如果它们挡路,可以在这里关闭。 + +{{ui:workspace.edgeLines}} 为每个实体绘制轮廓,颜色由 {{ui:workspace.edgeColor}} 决定(初始为黑色,与 Tinkercad 相同):当深色彼此混在一起时会很有帮助。默认关闭,非常大的导入网格会被略过。 + +![三个开启了边线的深色实体:轮廓把它们区分开来。](shot:edge-lines) + +{{ui:workspace.strongHoles}} 把孔画成更深的灰色、更不透明,并在周围加一条深色线。当孔在透明实体中难以找到时很有帮助。与边线不同,它在快速模式下仍然开启。 + +### 外观:光照与阴影 + +{{ui:workspace.showShadows}} 打开或关闭投射阴影。两个滑块设定实体的受光方式。{{ui:workspace.shadowStrength}} 决定投射阴影的深浅,{{ui:workspace.shadeContrast}} 把光从均匀的环境光转向主光:偏向“强烈”时,背光面更暗、阴影更明显;偏向“柔和”时,整体更平。对比度拉到最高会非常强,背光面和阴影会变得很暗。{{ui:workspace.shadowSoftness}} 让阴影边缘变柔和而不是锐利。{{ui:workspace.lightAzimuth}} 让主光绕平台旋转(0° 从前方,90° 从右方),{{ui:workspace.lightElevation}} 把它抬高;90° 时它像 Tinkercad 那样位于平台正上方,阴影正好落在实体下方。{{ui:workspace.lightReset}} 恢复全部设置。 + +### 外观:工作平面上的测量 + +{{ui:workspace.showMoveDimensions}} 显示拖动时移动了多少,{{ui:workspace.showOriginDimensions}} 显示选中项到平台原点的距离,选中多个实体时也会显示。开启 {{ui:workspace.dimensionsAlwaysVisible}} 后,这些测量会一直可见,而不只在拖动时显示。选中转过的实体时,其角度会显示在工作平面上它的下方;{{ui:workspace.showRotationAngles}} 可关闭这一显示。更多内容见[测量与注释](chapter:measuring-and-notes)。 + +### 外观:选择与移动 + +{{ui:workspace.selectBeforeMoving}}:实体必须先被选中,下一次拖动才会移动它。当小孩或匆忙的手会碰到实体时,以及在触摸屏上,这很有用。 + +{{ui:workspace.frameByDirection}}:向右拖出的选框只选中完全位于其中的对象,向左拖出的选框则选中它碰到的所有对象(以虚线绘制),与 SketchUp 相同。 + +{{ui:workspace.doubleClickOpensSketch}} 决定双击拉伸出的草图是否会重新打开草图,与 Tinkercad 相同;{{ui:workspace.doubleClickOpensGroup}} 决定双击分组或捆绑是否会打开它进行编辑。 + +{{ui:workspace.objectSnap}} 让形状的边和中心在拖动时吸附到其他形状;右下角的网格菜单有同样的开关。{{ui:workspace.cruise}} 让新形状挂在鼠标指针上,并落在其下方的面上,类似 Tinkercad 的 Cruise;关闭时,新形状出现在平台中央。更多内容见[选择与排列](chapter:select-and-arrange)。 + +### 外观:视图 + +{{ui:workspace.startInPerspective}}:编辑器随即以透视视图打开,而不是平面视图。 + +{{ui:workspace.zoomSpeed}} 是一个从慢到快的滑块:滚轮和触控板缩放的速度;缩放按钮和按键仍保持自己的小步距。{{ui:workspace.cameraInertia}}:松开鼠标后,视图会继续转一小会儿并平缓减速。关闭后它会立刻停住,与 Tinkercad 和 Fusion 360 相同。 + +{{ui:workspace.overhangAngle}} 是在可见性菜单中打开“显示悬垂”时,一个面被视为悬垂的起始角度:这些面会以红白斜线标示。30° 偏保守,70° 依赖良好的打印冷却;45° 是常用的起点。 + +{{ui:workspace.booleanTriangleLimit}} 限制导入网格在切割、合并或相交时允许的三角形数量,因为这些计算在你的浏览器中完成。超过上限的网格不会被处理;请先简化网格,或者如果电脑承受得住,就提高上限。上限过高可能让编辑器卡住几秒。 + +### 测量:单位、比例与吸附步距 + +在 {{ui:workspace.measurement}} 下,你可以设置 {{ui:workspace.units}},即测量显示所用的单位({{ui:workspace.scale}}:公制为毫米、厘米或米,英制为英寸或英尺)、数字显示的小数位数({{ui:workspace.accuracy}})、移动和调整尺寸时吸附的 {{ui:workspace.snapGrid}},以及 {{ui:workspace.customSnapGrids}} 下自己的吸附步距。 + +在设置的 {{ui:workspace.measurement}} 下设置 {{ui:workspace.units}}。使用 {{ui:units.imperial}} 时,layerling 会把所有测量显示为英寸——形状上、属性面板中、卷尺和标尺上都是如此。吸附网格随后提供从 1/64 到 1 英寸的步距,平台的网格也按英寸绘制(1/8 到 1 英寸,默认 1/4 英寸),每个整英寸处有一条更粗的线。在 {{ui:workspace.inchFormat}} 下,你可以选择英寸显示为像 Tinkercad 那样的分数(1 5/8,四舍五入到 1/64 英寸),还是显示为小数(1.625),小数位数由 {{ui:workspace.accuracy}} 设定。两种写法都能输入,包括“1 5/8”。在毫米和英寸之间快速切换的方法是属性窗口底部 {{ui:inspector.snapGrid}} 旁的小开关 **mm | in**:它会像设置一样改变单位、平台的网格和吸附步距,且只作用于当前设计。 + +在同一处的 {{ui:workspace.customSnapGrids}} 下,可以添加自己的吸附步距:一个名称和一个以毫米为单位的大小,例如用“Pin pitch 2.54 mm”表示 DIP 芯片、排针和洞洞板孔的间距,或用 19.05 mm 的“MX Key Unit”表示键盘按键的间距。吸附步距菜单随后会提供该尺寸的整份、一半和四分之一(1 ×、½ × 和 ¼ ×),因此形状可以按一个间距、半个间距或四分之一个间距移动。如果你只想要该尺寸本身,取消勾选旁边的 {{ui:workspace.customSnapGridParts}};菜单就只剩这一个步距。自定义步距随设计保存,也会随 {{ui:workspace.makeDefault}} 一起保存。 + +### 工作平面:平台与打印机 + +{{ui:workspace.printer}} 把工作平面调整为打印机的打印床大小,并标出超出边界的实体,见[打印](chapter:printing)。{{ui:workspace.showPlateLabels}} 在平台上写设计的名称,选择打印机后还会写上打印机名称和成型体积。 + +{{ui:workspace.size}} 给平台设定自定义尺寸,用 {{ui:workspace.width}} 和 {{ui:workspace.length}},单位为毫米或你选择的单位。网格始终穿过原点,所以无论平台多大,较粗的线都位于坐标轴上。 + +### 工作平面:网格 + +{{ui:workspace.showGrid}} 显示或隐藏平台上的网格。{{ui:workspace.gridBlockSize}} 设定网格线的间距,{{ui:workspace.gridMajorEvery}} 设定较深的线每隔 5 个还是 10 个网格步距出现;{{ui:workspace.gridMajorColor}} 给这条线单独的颜色,中心十字和平台边框也会采用;{{ui:workspace.gridColor}} 是普通网格线的颜色。 + +放大时网格的每条线都会变宽,与 Tinkercad 相同,缩小时也保持可见。如果觉得太粗,关闭 {{ui:workspace.gridLinesGrow}},线条在任何缩放下都保持一个像素宽,与草图中一样。 + +如果网格消失了,比如因为颜色被设成了与平台相同,{{ui:workspace.workplane}} 区域末尾的 {{ui:workspace.resetGrid}} 会把它的可见性、颜色、间距和线宽恢复为标准值,这里的设置以及用 {{ui:workspace.makeDefault}} 保存的默认值都会恢复。 + +### 形状默认值 + +在 {{ui:workspace.shapeDefaults}} 下,用 {{ui:workspace.shape}} 选择一种形状,并设定添加它时的初始状态:宽度、长度和高度。{{ui:workspace.useAppDefaults}} 把该形状恢复为程序的初始值。有各自设置的形状会在 {{ui:workspace.shapeDetails}} 下显示这些设置。这些值只作用于新形状,不作用于已经在平台上的形状。{{ui:workspace.customLimit}} 为控制柄和属性可以把该形状做到多大设定你自己的上限;留空则保留通常的限制。 + +### 保存的历史记录 + +在 {{ui:workspace.history}} 下,滑块 {{ui:workspace.savedHistory}} 设定保存或重新打开设计后,有多少已完成的操作仍可用于撤销。每个设计默认保留 100 个操作。降低上限会永久丢弃该设计较早的撤销步骤。 + +## layerling 卡顿的时候 + +layerling 在你的浏览器中计算并绘制一切。因此在较旧的电脑上、显卡较弱时,或在多块大屏幕上,视图可能会显得迟缓。以下方法有帮助: + +- **{{ui:workspace.fastMode}}**:{{ui:workspace.appearance}} 下的快速模式会立即关闭所有让视图开销很大的效果:阴影、所有实体的边线和相机的惯性。它还只按屏幕自身分辨率绘制视图,在高分辨率屏幕上像素最多减少到四分之一。你自己的设置会保留,一关闭快速模式就重新生效。 +- **相机会继续转:** 转动后松开鼠标时,视图会继续转一小会儿并平缓减速。这是有意为之,不是卡顿。如果你习惯了 Tinkercad 或 Fusion 360,可在 {{ui:workspace.appearance}} 下关闭 {{ui:workspace.cameraInertia}},视图会立刻停住。 +- **单独关闭各项:** 不用快速模式,也可以只关闭 {{ui:workspace.showShadows}} 或 {{ui:workspace.edgeLines}}。 +- **使用显卡:** 在 Chrome 中打开 `chrome://gpu`(Edge 中为 `edge://gpu`)。在“WebGL”旁边应显示“Hardware accelerated”。如果显示“Software only”,说明浏览器设置中的硬件加速已关闭。在 Windows 上,还可以在“设置”→“系统”→“显示”→“图形”中为浏览器选择“高性能”,让它使用真正的显卡,而不是处理器中较弱的显卡。 +- **简化大型导入网格:** 包含几十万个三角形的模型会拖慢任何视图。精简方法见文件一章中的“简化导入的网格”。 +- **关闭其他标签页:** 每个打开的 layerling 标签页和其他 3D 页面都共用同一块显卡。 diff --git a/docs/guide/zh-cn/03-shapes.md b/docs/guide/zh-cn/03-shapes.md new file mode 100644 index 00000000..1273f923 --- /dev/null +++ b/docs/guide/zh-cn/03-shapes.md @@ -0,0 +1,156 @@ +--- +title: 放置与调整形状 +summary: 形状库、用数字和手柄设置尺寸、颜色、旋转、锥度与扭曲。 +--- + +layerling 里的每个零件都从一个形状开始。用这些形状,你可以搭建其他一切:形状彼此互补、相互挖空,或合并成一个新形状。 + +## 添加形状 + +单击功能区中的 {{ui:editor.addShape}}。形状库随即打开。 + +![形状库。每一张小图都是由形状的真实几何体渲染出来的。](shot:shape-menu) + +每选一个形状,形状库都会关闭。拖动它的标题栏可以移动它,这样你就能把它放到不遮挡目标位置的地方,例如属性面板上方;双击标题栏可让它回到按钮下方,你上次留下的位置会保存在浏览器中。标题栏中的图钉可让形状库保持打开,方便你连续放置多个形状。拖动边缘和角可以调整它的大小,最大可到屏幕允许的宽高;尺寸也会保存在浏览器中,双击边缘可恢复。拉窄后,形状库会隐藏名称,只显示图片;指向某个形状时才出现名称。 + +选择一个形状。它会跟随鼠标指针,并在你单击的位置落下。把它移到某个实体上方,它会贴到指针下的面上,斜面也一样,就像 Tinkercad 的 Cruise;在空白平台上方,它会落在工作平面上。[[Esc]] 取消放置。等待单击的工具(例如卷尺、直角尺、便签、{{ui:camera.placeWorkplane}}、{{ui:editor.tool.layFlat}} 或边缘工具)在你选择形状时会被关闭,因此单击会放置形状。反过来,开启其中某个工具会把形状放下。如果你更希望形状直接出现在平台中央,可以在设置中关闭单击放置({{ui:workspace.appearance}} 区域,{{ui:workspace.cruise}} 开关)。 + +形状库提供: + +- **基本形状:** {{ui:shape.box}}、{{ui:shape.roundedBox}}、{{ui:shape.cylinder}}、{{ui:shape.slot}}、{{ui:shape.ellipse}}、{{ui:shape.polygon}}(三到二十四条边)、{{ui:shape.sphere}}、{{ui:shape.cone}}、{{ui:shape.pyramid}}(三到二十四条边,因此也有三棱锥)、{{ui:shape.wedge}}、{{ui:shape.roundRoof}}、{{ui:shape.halfSphere}} 和 {{ui:shape.torus}}。 +- **管:** {{ui:shape.tube}} 和 {{ui:shape.bentTube}},由最多十二段直管及之间的弯头组成,以及从一种轮廓过渡到另一种的 {{ui:shape.loft}},比如从方形到圆形。 +- **装饰形状:** {{ui:shape.star}}、{{ui:shape.heart}} 和 {{ui:shape.crescent}}。 +- **文字:** {{ui:shape.text}},也可沿圆弧排列。更多见[文字](chapter:text)。 +- **机械件:** {{ui:shape.thread}}(螺杆、螺钉、螺母和螺纹孔)、{{ui:shape.spring}}、{{ui:shape.gridfinity}} 收纳盒和底板、{{ui:shape.gear}},以及用于握持的 {{ui:shape.knurl}}。更多见[螺纹与机械件](chapter:threads-and-mechanics)。 +- **用于结构件:** 一体打印的 {{ui:shape.hinge}}、{{ui:shape.dovetail}}、用于水平孔的 {{ui:shape.teardrop}}、用于螺钉头的 {{ui:shape.counterbore}} 和 {{ui:shape.countersink}},以及 {{ui:shape.ruler}},它只是测量工具,永远不会出现在导出结果中。 + +有两种方式可以得到三角形:三边的 {{ui:shape.polygon}} 是等腰三角形,也就是 Tinkercad 的“Roof”;{{ui:shape.wedge}} 是直角三角形。两者都是真正的三棱柱。要挖出三角形孔,复制该形状,把副本缩小,标记为孔,然后用 {{ui:editor.tool.centerOnWorkplane}} 或 {{ui:editor.tool.align}} 对齐。两者都按形状的边界框工作,也就是包围它的最小方框,所以被切掉一半的正方形仍按完整正方形计算。命令搜索([[Ctrl]]+[[K]])在“triangle”或“roof”下也能找到这两种形状。 + +{{ui:shape.slot}} 可以一端比另一端窄,例如用于两个带轮之间的皮带护罩。在 {{ui:inspector.properties}} 下设置 {{ui:prop.slotSmallEnd}};大端与胶囊一样宽,两侧从一段圆弧直通另一段圆弧。{{ui:prop.slotCentreDistance}} 是两段圆弧圆心之间的距离,也就是两个带轮的间距。改变小端时圆心距保持不变,胶囊会变长或变短。锥形胶囊同样是精确实体,可用于圆角和 STEP。 + +## 形状的设置 + +选中形状后,它的设置会立即出现在右侧。顶部是名称,旁边的铅笔({{ui:outliner.rename}})可输入新名称。[[Enter]] 保留,[[Esc]] 取消,名称为空则恢复形状的默认名称。再往右,挂锁可锁定形状、防止误移动,眼睛图标可隐藏它。最左侧的箭头可把设置折叠到只剩标题栏。下方的卡片可通过单击标题展开和收起({{ui:inspector.properties}}、{{ui:inspector.position}}、{{ui:inspector.rotation}}、{{ui:inspector.taper}}、{{ui:inspector.twist}} 以及特殊形状的卡片);layerling 会记住你保持展开的卡片,供下一个形状和下次访问使用。 + +设置停靠在右侧边缘。如果它挡住了你想看的内容,拖动标题栏即可让它浮动到你放下的位置;下一个形状也会保持在那里。把它拖回右上角,或双击标题栏,它就会重新停靠。浮动或折叠时,吸附步距会从设置底部移到工作平面右下角。 + +![圆柱体的设置:实体或孔、直径和高度,可用数字和滑块设置。](shot:editor-overview) + +- **{{ui:inspector.solid}} 或 {{ui:inspector.hole}}:** 实体保留材料,孔则去除材料。单击 {{ui:inspector.solid}} 会打开颜色;你在那里调出的自定义颜色之后会留在 {{ui:inspector.recentColors}} 下,最多最近八个。更多见[实体与孔](chapter:solids-and-holes)。{{ui:inspector.keptColors}} 一行中的图钉可永久保留你选的颜色:它独占一行,更新的颜色永远不会把它挤掉,再次单击同一图钉即可取消保留;此浏览器最多保留 21 种颜色。 +- **{{ui:inspector.transparent}}:** 让实体变得透明,例如看清它后面的形状。 +- **{{ui:inspector.multicolor}}:** 仅用于分组;[[Shift]]+[[M]] 可切换。开启后,分组中的每个部件都显示自己的颜色,被孔挖成单一实体的分组也一样(孔留下的壁采用被挖实体的颜色)。为分组选择颜色会关闭它,并给整个分组上色。捆绑始终保持各部件的颜色。导出 3MF 时,每个部件都保留自己的颜色,切片软件可据此把部件映射到耗材;OBJ 把颜色记录在顶点上,所以两种颜色的交界在那里会略显粗糙。 +- **{{ui:inspector.properties}}:** 尺寸以及属于这个形状的一切。圆柱体有直径、高度和边数。圆管或圆环有 {{ui:prop.outerDiameter}}、{{ui:prop.innerDiameter}}(用于已知轴径的衬套)和壁厚:任意两个值可得出第三个,输入顺序不限。设置外径时内孔保持不变,壁厚随之改变;设置内径时外径保持不变,壁厚随之改变;内孔比管更宽时,外径会按壁厚增大。管的长度就是它的高度。被拉过一条边的非圆管,会用“长度”和“宽度”两个值代替原来的外径;在那里改变宽度时壁厚保持不变。齿轮有齿数,弹簧有圈数。离开默认值的数值名称旁会出现一个小箭头:单击只恢复这个数值,无论你之后还做了什么,这一点与撤销不同。双击滑块也一样,这里以及工作区设置中的滑块都是如此。用鼠标拖动时,长度滑块会吸附到吸附步距,因此高度会得到整毫米值(网格关闭时以及短滑块上不会);输入的值和滑块上的方向键仍保持精确。底部的 {{ui:inspector.saveDefaults}} 会把当前值设为这类形状的起始值(与设置中的 {{ui:workspace.shapeDefaults}} 相同),{{ui:inspector.resetDefaults}} 则恢复应用的默认值。 +- **{{ui:inspector.makeEllipse}}:** 仅用于圆柱体。圆柱体始终是圆的:它只有一个直径,每个手柄都会同时改变两侧。要得到椭圆,单击此项,它就会变成 {{ui:shape.ellipse}}——同一个实体,之后你可以分别设置它的长度和宽度。带有倒角、圆角或壁的圆柱体,以及旋转过或分组过的圆柱体,不能这样转换;这些情况请从一开始就使用 {{ui:shape.ellipse}}。 +- **{{ui:inspector.taper}}:** 顶部和底部尺寸不同,例如用于斜面或漏斗。 +- **{{ui:inspector.twist}}:** 让顶部相对底部扭转或横向偏移。这样可以做出扭转的柱子和倾斜的塔。 + +![一个由橙色方块、蓝色销钉和孔组成的分组,被挖成单一实体。开启多色后,销钉保持蓝色,方块保持橙色,孔壁则采用方块的颜色。](shot:group-multicolor) + +锥度和扭曲几乎适用于所有形状。只有齿轮、螺纹、弹簧、Gridfinity、铰链、棱锥、弯管、泪滴孔、用于螺钉头的沉孔与锥形沉孔以及标尺不支持:它们有自己固定的尺寸,或者像棱锥那样已经有自己的顶部。 + +![一个改变了顶部半径和高度的圆锥:每个数值旁的小箭头可恢复该值,底部的两个按钮可保存或重置该形状的默认值。](shot:property-reset) + +{{ui:inspector.saveDefaults}} 会把你在该形状上的改动保存为同类型每个新形状的起点:尺寸、形状的设置和颜色。把一个圆柱体涂成绿色,按下按钮,之后添加的每个圆柱体都是绿色;其他类型保持各自的颜色。{{ui:inspector.resetDefaults}} 把该类型恢复为应用的初始状态。有各自默认值的类型会在设置的 {{ui:workspace.shapeDefaults}} 下标出。从起始页新建的设计也会以这些默认值开始;数值保存在此浏览器中。 + +锥形或倾斜的长方体、圆柱体、椭圆、多边形、管或圆环保持精确形状;胶囊、星形、心形、月牙、燕尾、顶部和底部边缘未倒圆的圆角长方体,以及直的或圆的滚花(其倒角端也随之收窄)同样如此:倒角和圆角可以像在普通形状上一样作用于它,STEP 导出也会写出它。扭曲的形状同样如此:它的截面随高度精确旋转,侧面从底部到顶部均匀盘旋。 + +输入比拖动更精确。所有数字字段都接受毫米,也接受百分比:在 40 mm 的宽度中输入“50 %”,得到 20 mm。它们也会计算:“15*3”“120-2*4”或“(40+2)/2”分别得到 45、112 和 21;可以用 x 代替 *。字段会记住算式,属性面板和选中实体周围尺寸框中的字段都是如此:之后再次单击它,只要数值仍然吻合,那里显示的就是算式而不是数字,你可以就地修改,把“(140+2)/2”改成“(40+6)/2”。用手柄拖动实体或缩放它之后,算式不再吻合,字段就只显示数字。 + +### 选择颜色 + +单击实体属性中的 {{ui:inspector.solid}} 会打开颜色卡片,标题为 {{ui:inspector.shapeColor}}。顶部显示实体当前颜色的十六进制值。下面是调色板中的现成颜色;单击一种即可给实体上色并关闭卡片。 + +{{ui:inspector.custom}} 会打开浏览器的颜色选择器,用于自定义颜色。它提供什么取决于浏览器:在 Chrome 和 Edge 中,它有颜色字段、色相滑块、可从屏幕任意位置取色的吸管,以及以 HEX、RGB 或 HSL 表示的值,可用旁边的箭头切换。关闭选择器或单击其外部时,颜色才会生效。 + +你在那里调出的自定义颜色之后会留在 {{ui:inspector.recentColors}} 下,最多最近八个。{{ui:inspector.keptColors}} 一行中的图钉可永久保留你选的颜色:它独占一行,更新的颜色永远不会把它挤掉,再次单击同一图钉即可取消保留;此浏览器最多保留 21 种颜色。图钉用于自定义颜色,调色板中的颜色始终都在。选中多种颜色时,或选中孔时,没有单一颜色可保留。 + +设置中工作区颜色有自己更简单的选择器,包含颜色字段、一排现成颜色和十六进制值字段;见[设置](chapter:view-and-workplane)。 + +## 圆有多圆?边数 + +圆柱体、圆锥、管、椭圆或内孔等圆形形状,其属性中有 {{ui:prop.sidesFollowSize}} 开关和 {{ui:prop.sides}} 滑块。{{ui:shape.torus}} 有两个滑块:沿环的 {{ui:prop.torusSides}} 和沿管身的 {{ui:prop.torusSteps}}。它们在那里也会跟随尺寸,直到你手动固定,因此大型圆环不会显出棱面。原因在于:对于视图以及 STL、3MF 和 OBJ,layerling 把圆画成由许多小边组成的多边形。边越多越平滑,占用的三角形也越多。 + +**边数在哪些地方重要** + +- **导出给切片软件时**(STL、3MF、OBJ)。边数少的圆柱体到了那里就是多边形。 +- **合并实体和孔时。** 由边数少的孔挖出的内孔,在成品中会带有棱角。螺钉孔也包括在内。 +- **在视图中。** 许多非常精细的形状会拖慢编辑器。 + +**边数在哪些地方不重要** + +- **导出 STEP 时。** 它写出的是圆形形状,而不是多边形。 +- **使用倒角和圆角时**({{ui:editor.tool.chamfer}}、{{ui:editor.tool.fillet}}),只要形状保持圆形。未设置边数、边数不少于该形状的默认值,或者多边形与圆的偏差最多 {{value:EXACT_ROUND_TOLERANCE}} mm 时,就是这种情况。默认值是:圆柱体、椭圆、管和圆锥为 {{value:ROUND_FROM_SIDES}} 条边,{{ui:shape.roundRoof}} 为 {{value:ROUND_FROM_ROOF_SIDES}},{{ui:shape.sphere}} 为 {{value:ROUND_FROM_SPHERE_STEPS}} 段,{{ui:shape.halfSphere}} 为 {{value:ROUND_FROM_HALF_SPHERE_STEPS}} 段,{{ui:shape.torus}} 为 {{value:ROUND_FROM_TORUS_SIDES}} 条边和 {{value:ROUND_FROM_TORUS_STEPS}} 段,圆形 {{ui:shape.bentTube}} 的 {{ui:prop.quality}} 为 {{value:ROUND_FROM_BENT_TUBE_QUALITY}}。 +- **螺纹、弹簧或斜齿轮。** 边缘工具和 STEP 导出使用它的精确实体;它的 {{ui:prop.quality}} 只决定绘制得有多精细。 + +**边数再次重要的情况** + +- **在边数少的形状上使用倒角和圆角时。** 如果把边数设得低于默认值,边缘工具会按形状绘制出来的样子处理:6 条边的圆柱体仍是六棱柱,圆角会沿它的六条边延伸。这样你就可以做出例如带圆角的螺母槽。对于圆形形状,请保持 {{ui:prop.sidesFollowSize}} 开启。 + +**如何使用** + +- **保持 {{ui:prop.sidesFollowSize}} 开启。** 然后 layerling 会根据直径选择边数,使多边形与真实圆的偏差最多 {{value:ROUND_DEVIATION_TOLERANCE}} mm,远低于打印机能够分辨的程度。小形状至少有 {{value:MIN_AUTOMATIC_SIDES}} 条边,大形状则更多。 +- **减少边数**:只有在你有意要多边形时才这样做(不过那种情况有 {{ui:shape.polygon}}),或者当编辑器因大量圆形形状而变慢时。 +- **增加边数**:几乎不需要。只有在非常大的圆形零件上、在 STL 中能看到棱边时才需要。 +- **对于只用边缘工具处理或以 STEP 交付的零件,** 边数无关紧要。 + +## 使用手柄 + +除了设置之外,形状本身也有手柄: + +- **角和边**用于放大或缩小形状。把其中一个拖过对侧,形状会在该边的另一侧继续增大。顶部的箭头在底面下方做同样的事。拖动角时按住 [[Shift]] 可同时缩放宽度、深度和高度并保持比例;按住 [[Alt]] 则从中心缩放,而不是从对角缩放。没有键盘,或者不想按键时,可开启属性顶部的 {{ui:inspector.keepProportions}}:此后角始终保持比例,输入宽度、深度或高度之一,另外两个会按相同比例缩放。该设置会被记住。 +- **顶部的箭头**改变高度,**中间的手柄**抬高或降低形状。 +- **弧形箭头**旋转它。 +- **形状旁的数值**显示尺寸。单击其中一个会打开字段,可输入想要的数字。按 [[Enter]] 时,形状从该数字对面的边开始增大,与拖动时相同;按 [[Alt]]+[[Enter]] 时,它围绕自己的中心增大,因此与另一个形状对齐过的形状仍保持对齐。这适用于宽度和长度;高度始终从底面向上增大。右侧属性中的字段不用按键就保持中心。[[Tab]] 保留数字并打开下一个(宽度、深度、高度);[[Shift]]+[[Tab]] 返回上一个。在已单击过的属性字段中,鼠标滚轮也会改变数值:一格一个单位,按住 [[Shift]] 为十倍,[[Ctrl]] 为十分之一,[[Alt]] 为百分之一。未单击过的字段把滚轮留给面板,由面板滚动。 +- **单击一个角**(不拖动)会同时打开宽度和深度。输入第一个,按 [[Tab]] 切到第二个,按 [[Enter]] 应用两者。[[Esc]] 取消。 + +形状一旦按直角转过,例如用 {{ui:editor.tool.layFlat}} 侧放,属性中的字段就会按每项尺寸当前的方向命名:{{ui:prop.height}} 是向上的尺寸,{{ui:prop.width}} 沿 X 方向,{{ui:prop.length}} 沿 Y 方向。因此输入躺倒形状的高度会改变垂标尺寸,它的底面仍留在平台上。以其他角度倾斜的形状会在字段中显示自己的尺寸,下方会有说明。 + +不用鼠标时,可以用键盘:方向键按一个吸附步距移动选中项(网格关闭时为 0.01 mm),按住 [[Shift]] 为五步,或者在设置的 {{ui:workspace.appearance}} 下把 {{ui:workspace.gridMajorEvery}} 设为 {{ui:workspace.gridMajorSteps|10}} 时,为十步:直到下一条更深的线,与 Tinkercad 中一样。它们跟随视图:[[→]] 移向屏幕右侧,[[↑]] 远离你,即使转动过平台也是如此。把形状推出画面时,视图会跟着移动。[[Ctrl]]+[[↑]] 和 [[Ctrl]]+[[↓]] 升高和降低它。连续按方向键在历史记录中算作一步:只要下一次按键在 1.5 秒内跟上,撤销就会收回整串操作,而不是一次一次地收回。[[R]] 旋转 45°,[[Shift]]+[[R]] 旋转 22.5°。[[D]] 把选中项放到工作平面上。 + +手柄可把形状拉到和你的平台一样大,宽和深至少 220 mm。在属性中输入数字可以超过这个范围,而这样放大的形状再次抓取时不会缩回。在设置的 {{ui:workspace.shapeDefaults}} 下,可用 {{ui:workspace.customLimit}} 为每种形状设置自己的上限。 + +吸附步距位于编辑器右下角,随时可以更改。 + +## 复制与重复 + +{{ui:editor.tool.copy}}、{{ui:editor.tool.paste}} 和 {{ui:editor.tool.duplicate}} 位于功能区({{ui:editor.group.clipboard}})。[[Ctrl]]+[[D]] 复制选中项。layerling 会记住你上次如何移动或旋转副本,并在下次复制时再次应用。这样几下按键就能做出一排孔或一排台阶。规则排列还可以使用阵列,见[选择与排列](chapter:select-and-arrange)。 + +> **提示:** 如果某个形状不肯接受你想要的尺寸,通常是新形状的限制所致。在设置的 {{ui:workspace.shapeDefaults}} 下,你可以决定每种形状如何开始,以及最大能有多大。 + +## 自定义形状 + +需要反复使用的支架、手柄或底板,可以放进 {{ui:myShapes.title}}。它们位于形状库顶部、{{ui:myShapes.basicShapes}} 上方,可用箭头收起。 + +1. 选择一个或多个实体、孔、分组,也可以包含导入的模型。 +2. 打开形状库并单击 {{ui:myShapes.saveSelection}}。输入名称,用 {{ui:common.save}} 确认。 +3. 在任何设计中,单击图块即可插入该形状,与其他形状一样。你也可以把图块拖到工作平面上;它会在你松手的位置落下。随后形状会跟随指针,和其他形状一样:它跟着指针移动,经过其他实体的表面时也是如此,单击即可放下;[[Esc]] 把它收走。 + +多个实体会一起回来,保持它们彼此的相对位置,并且仍可逐个选择。固定到已保存实体上的[便签](chapter:measuring-and-notes)会随之保存,并在插入时以收起状态回来,仍固定到插入的实体上;自由便签和参考点留在设计中。图块上的铅笔可重命名,垃圾桶会在询问后删除。已插入设计中的形状保持原样。 + +{{ui:myShapes.title}} 保存在此浏览器中,与设计分开,下次启动时仍在。起始页的 {{ui:dashboard.backupAll}} 会把它们和设计一起备份,打开备份即可恢复两者。如果只想把形状带到另一个浏览器,{{ui:myShapes.backup}}(向下的箭头)会把它们保存为 ZIP 文件,{{ui:myShapes.load}}(向上的箭头)会把它们带回来。{{ui:myShapes.load}} 也接受单个 `.lyl` 设计;每个都会变成一个形状。已有的形状不会重复添加。 + +### 文件夹 + +许多自定义形状更适合分类到文件夹中。{{ui:myShapes.newFolder}}(带加号的文件夹,位于 {{ui:myShapes.saveSelection}} 旁)会要求输入名称,并在顶部创建文件夹;文件夹上的加号 {{ui:myShapes.newSubfolder}} 会在其中创建子文件夹。文件夹最多三层:第三层的文件夹可以放形状,但不能再放文件夹。文件夹按名称顺序排列在不属于任何文件夹的形状上方,可用箭头展开和收起;文件夹上的数字统计其中及内部文件夹中的形状数量。保存时,在名称旁的列表中选择文件夹;{{ui:myShapes.noFolder}} 会把形状留在顶部。 + +图块上带箭头的文件夹可把该形状移到另一个文件夹,或用 {{ui:myShapes.noFolder}} 移回外面。文件夹上的铅笔可重命名,垃圾桶会在询问后删除它以及其中的文件夹和形状。文件夹本身不能移动:请在合适的位置新建一个,再把形状移过去。备份会保留文件夹,载入后形状会回到原来的位置。 + +### 服务器上的自定义形状 + +开启[共享服务器存储](chapter:files-and-saving)后,该区域会显示两组:{{ui:myShapes.onServer}} 和 {{ui:myShapes.inBrowser}}。保存时你可以选择形状的去处;默认选择服务器。在那里,它存放在 `Custom shapes` 文件夹中,是一个独立的 `.lyl` 文件,带有图片,任何能访问服务器的设备上都可以使用;它的文件夹就是 `Custom shapes` 内的文件夹。两侧各有自己的文件夹,形状只会在所属一侧的文件夹之间移动。浏览器图块上的云图标会把这个形状放到服务器上;此后它就不再保存两份。 + +`Custom shapes` 文件夹也会显示在起始页上。在那里像设计一样打开形状,修改后它会像服务器上的任何设计一样自动保存;下次插入时使用的就是新版本。由于服务器存储没有登录功能,所有能访问服务器的人看到的都是相同的形状。 + +## 包裹到圆柱 + +想让图案、标志或文字贴到杯子、罐子或管子上?先把平铺在平台上,例如作为导入的 SVG 或文字,并按从上方看应有的样子摆好。然后在形状设置的 {{ui:inspector.wrapCylinder}} 下把它包裹到圆柱: + +1. 打开 {{ui:inspector.wrapCylinder}},输入圆柱壁的 {{ui:inspector.wrapDiameter}},例如杯子的外径。也可以精确到十分之一毫米,比如 63.5。 +2. 单击 {{ui:inspector.wrapApply}}。原本从左到右延伸的内容现在绕着圆柱延伸,后边缘变成顶部,厚度从壁面向外突出。 +3. 选中包裹后的形状和圆柱,让两者在左右和前后方向都居中。包裹后形状的中间就是圆柱的轴线,因此它会正好贴在壁上。 + +如果要雕刻,请开启 {{ui:inspector.wrapInward}}:厚度此时会陷入壁内。把形状设为孔,居中,然后与圆柱分组。 + +已经包裹过的形状是包裹后物体的网格,不能再次包裹:撤销包裹,或者用另一个直径再次包裹原来的平面形状。 + +结果像导入的模型一样是网格。撤销会把形状重新摊平;要换直径,先撤销再重新包裹。包裹范围不能超过圆柱一圈;超过时 layerling 会给出能够容纳的最小直径。 diff --git a/docs/guide/zh-cn/04-select-and-arrange.md b/docs/guide/zh-cn/04-select-and-arrange.md new file mode 100644 index 00000000..c34fb434 --- /dev/null +++ b/docs/guide/zh-cn/04-select-and-arrange.md @@ -0,0 +1,164 @@ +--- +title: 选择与排列 +summary: 选择形状、在对象列表中查找它们、对齐、镜像、旋转、平放在某个面上,以及按阵列复制。 +--- + +## 选择 + +单击形状即可选中。按住 [[Shift]] 可以添加更多,也可以再次移除。按住 [[Shift]] 且选中两个或更多形状时,鼠标指针下方的小数字会显示数量。单击空白处会清除选择,[[Esc]] 也是如此。在空白工作平面上拖出选框,可选择它接触到的所有内容;按住 [[Shift]] 时,选框会添加未选中的内容并移除已选中的内容。如果你想从一簇形状中只挑出某一个,请在设置中开启 {{ui:workspace.frameByDirection}}(区域 {{ui:workspace.appearance}}):此时向右拖出的选框只包含完全位于框内的形状,向左拖出的选框仍会选中接触到的所有内容,且选框线为虚线。拖动时按住 [[Alt]] 可为这一次拖动反转选框方向,例如从该方向不允许的一侧框选整个实体。[[Ctrl]]+[[A]] 选择所有可见实体。拖动实体或选框手柄时,只要鼠标按键仍未松开,[[Esc]] 就会取消:一切恢复原状,历史记录中也不会新增步骤。 + +挡住视线的东西就隐藏起来({{ui:editor.tool.hideSelected}},[[Ctrl]]+[[H]])。隐藏的形状仍留在设计中,只是不可见,也不会进入导出;导出窗口会事先说明有多少个。[[Ctrl]]+[[Shift]]+[[H]] 可将它们全部恢复显示。应当固定不动的东西,用设置顶部的挂锁或 [[Ctrl]]+[[L]] 锁定。锁定的形状无法移动、调整大小、旋转、改色或删除:它的手柄变灰,顶部箭头旁显示挂锁,会改变它的工具也会变灰。将鼠标悬停在手柄上仍会显示尺寸,按下任何会改变它的按键都会提示“对象已锁定”。只要选择中包含一个锁定形状,其他形状也不会有任何变化。隐藏、重命名、复制和创建副本仍然可用。 + +{{ui:editor.group.visibility}} 组中按钮上的数字表示隐藏了多少个形状,单击它即可全部重新显示。打开带有隐藏形状的设计时,会提示一次,并提供一个显示它们的按钮。 + +## 对象列表 + +零件一多,视图里很容易看不清。对象列表({{ui:editor.tool.showOutliner}} 或 [[Ctrl]]+[[Shift]]+[[O]])以列表形式显示所有形状。无论哪个设计,它都会保持你上次的打开或关闭状态,直到你关闭它;这个选择保存在浏览器中。 + +![对象列表:名为“Group”的分组包含两个零件,旁边有一个球体。文件夹图标可展开该分组。](shot:object-list) + +- 单击条目即可选中形状,包括分组内部的零件。按住 [[Shift]] 可添加或移除条目,与在视图中一样。箭头可展开和收起分组。 +- 标签显示零件是 {{ui:outliner.solid}} 还是 {{ui:outliner.hole}}。 +- 挂锁和眼睛图标可锁定和隐藏单个零件。 +- {{ui:outliner.rename}} 可给零件单独命名;设置顶部名称旁的铅笔按钮对选中形状起同样作用。合理的名称在较大设计中非常有帮助。 +- 搜索框按名称和种类查找形状,因此也可以搜“圆柱体”或“孔”。它还会搜索分组内部,无论嵌套多深:包含匹配项的分组会留在列表中并展开,显示匹配的零件以及通向它们的各层分组。按自身名称找到的分组,展开后会显示其全部零件。 +- 标题栏最左侧的箭头可将列表折叠到标题栏,再展开。 + +列表停靠在视图立方体右侧。拖动标题栏可将它放到工作平面上的任何位置;它会从视图立方体和相机栏下方穿过。拖回视图立方体旁边,或双击标题栏,它就会重新停靠。它原来的位置以及是否折叠,都会在此浏览器中记住。 + +## 输入位置 + +属性面板中的 {{ui:inspector.position}} 卡片显示选中实体的位置,也可以直接输入:{{ui:prop.positionX}} 和 {{ui:prop.positionY}} 是实体包围盒中心在平台上的位置,正负号与工作平面上显示的距离一致,{{ui:prop.positionZ}} 是其底面的高度。X 向右计数,Y 向后,Z 向上,遵循与 Tinkercad 和 CAD 程序相同的右手定则;平台上的坐标轴箭头显示方向。数值使用你设定的单位,滑块的可调范围与拖动时一样。 + +## 把零件停在平台旁 + +你可以把形状拖过平台边缘并留在那里,大约超出每边一个平台宽度,以便留待后用。方向键可把它移到任意远。停放的零件仍属于设计,会和其他内容一起导出。若要排除它,请隐藏它,或仅导出选中项。如果已选择打印机,当有内容位于其平台之外时,layerling 会在导出时发出警告。 + +## 移动时吸附 + +在工作平面上拖动形状时,它会吸附到其他形状:其左、右、前、后边缘或中心会精确落在另一个形状的边缘或中心上。粉色参考线会显示它正对齐到什么。这样两个零件无需输入数字就能并排齐平或前后居中。关闭网格时也同样有效。 + +拖动时按住 [[Shift]] 可将移动限制在一个轴上:形状会沿你拖动更多的方向(X 或 Y)移动,另一个方向保持不变。最好在已经开始拖动后再按 [[Shift]];对于尚未选中的形状,按住 [[Shift]] 单击只会把它加入选择。 + +如果在拖动开始时已经按住 [[Alt]],拖动的就是副本,与 Tinkercad 一样:原形状留在原处,副本落在你松开的位置。只在拖动途中按 [[Alt]] 会暂停吸附;此时形状只跟随网格。副本也只有在途中松开 [[Alt]] 后才会吸附。要永久关闭吸附,请使用右下角的网格菜单({{ui:inspector.objectSnap}})或设置。目前只有正常在工作平面上的移动会吸附,抬升和调整大小不会。 + +## 对齐 + +选中两个或更多形状后,用 {{ui:editor.tool.align}} 将它们对齐:选择周围会出现左、中、右,前、中、后,以及上、中、下的点。单击某个点即可将所有形状移到那里。如果先单击选中的某个形状,它会留在原处,其他形状与它对齐。选择中若有锁定形状,则该固定形状就是基准。左、右、前、后、上、下都以形状的包围盒为准;三角形、五边形或星形的中心是其自身中心,因此以它为中心的孔会位于形状中心,而不是其包围盒中心。 + +以某个角度旋转过的形状(比如 45°)对齐时依据的是它的包围盒,而不是它自身的边。要按边对齐,先在该形状的某个面上设置工作平面({{ui:camera.placeWorkplane}},然后单击该面):这些点便会立在该平面的坐标轴上,形状也沿这些轴测量和移动,与 Tinkercad 一样。重置工作平面,即可重新沿平台对齐。 + +![对齐工具用圆点在选择周围显示可对齐的目标。](shot:align) + +快捷键是 [[L]]。[[Esc]] 取消。 + +## 镜像 + +{{ui:editor.tool.mirror}}([[M]],或右键单击选择并选择它)会让选择沿某个平面翻转:{{ui:mirror.leftRight}}、{{ui:mirror.frontBack}} 或 {{ui:mirror.topBottom}}。单击对应的轴箭头即可。这对对称零件很方便:做好一半,复制一份,再镜像副本。 + +## 旋转与设置旋转中心 + +可以用形状上的弧形箭头、设置中的数值,或按 [[R]] 以 45° 为步长旋转。在旋转圆环上拖动时,旋转会吸附到每个刻度,即每 22.5°;按住 [[Shift]] 可更精细,并会每隔 11.25° 出现额外刻度。在圆环外拖动可自由旋转,步长为 1°,按住 [[Shift]] 则为 45°。通常选择会绕其中心旋转。有时不应如此,例如要让一根倾斜的管在其端部继续旋转。这时可用 {{ui:editor.tool.rotationPivot}}:随后单击某个面。平面会提供其中心,例如管端的轴线。选择现在会绕该点旋转。再次单击该工具可移除旋转中心。 + +角度会随实体保留。在其设置中,{{ui:inspector.rotation}} 以 {{ui:prop.rotateX}}、{{ui:prop.rotateY}} 和 {{ui:prop.rotateZ}} 显示角度,命名与位置相同:Y 横穿平台,Z 向上。在那里输入角度,实体便会转到该角度——绕其中心,或绕它自己的旋转中心(如果有)。选中旋转过的实体时,其角度也会显示在工作平面上它下方;设置中的 {{ui:workspace.showRotationAngles}} 可关闭此显示。 + +![一个绕两个轴旋转的实体:角度显示在它下方,设置中的旋转卡片可将其作为数值输入。](shot:rotation-card) + +选中**一个实体**时,旋转中心属于该实体:选择其他零件再回来,它仍然存在。它会随实体移动、旋转和缩放,保存在项目中,并可通过撤销恢复。在 {{ui:inspector.position}} 下,旋转中心有自己独立的 X、Y 和 Z,可以输入或微调,{{ui:inspector.pivotRemove}} 可将其移除。你也可以用鼠标拖动旋转中心的红色标记:它会在实体表面滑动,并吸附到角、边中点和边上,因此铰链销能精确落在某个角上。选中多个实体时,旋转中心只属于当前选择,重新选择就会移除它。 + +## 平放在某个面上 + +想让零件以最适合打印的一面朝下吗?选中它,单击 {{ui:editor.tool.layFlat}},然后单击应朝下的面。当指针在零件上移动时,指针下方的面会高亮,让你看出即将选中哪个面;旋转视图可以检查其他面。零件会转动,使该面贴在工作平面上。 + +两个零件需要面对面,或齐平对齐?选中应移动的零件,单击 {{ui:editor.tool.mateFaces}},然后依次单击它的一个面和另一个零件的面。在面板中,{{ui:mate.mode.against}} 让两个面相对(背面相贴、接触),{{ui:mate.mode.flush}} 将它们并排放在同一平面;{{ui:mate.gap}} 在它们之间留出空间,例如用于间隙。{{ui:mate.apply}} 会移动该零件:它以最短路径旋转,直到两个面平行——如果已经平行则不旋转——然后只朝另一个面滑动,因此横向位置保持不变。另一个零件留在原处,一次撤销即可全部还原。 + +![对齐面面板:先选择要移动的零件,再选择另一个零件的一个面,然后选择相对或齐平,并可设置间隙。](shot:mate-faces) + +**两个面之间的精确角度:** {{ui:editor.tool.mateFaces}} 只会让面平行;没有专门用于面间角度的工具,但可以这样实现。先用 {{ui:editor.tool.mateFaces}} 让两个面靠在一起,使它们平行。然后在它们相交的边上设置旋转中心({{ui:editor.tool.rotationPivot}},单击该边或某个角),再在零件的 {{ui:inspector.rotation}} 卡片中输入角度,例如 15 或 30。零件会绕该旋转中心转动。卡片中的轴是平台的轴,因此当该边沿 X、Y 或 Z 方向时,这个方法有效。 + +同样简单的还有 {{ui:editor.tool.dropToWorkplane}}([[D]]),它把选择落到工作平面上,以及 {{ui:editor.tool.centerOnWorkplane}}。 + +[[C]] 会拾起选择,就像 Tinkercad 中的 Cruise:它跟随鼠标指针,并平放在你正悬停的另一个实体的面上,斜面也可以。单击即可放下,[[Esc]] 则让它留在原处。其底面随后贴在该面上,像新建形状一样与面的边缘对齐;它保留自身绕竖直轴的旋转。多个零件会一起移动并保持间距。在空白平台上,[[C]] 会让倾斜的零件重新竖直立在工作平面上。没有键盘时,长按菜单中有 {{ui:contextMenu.carry}} 可达到同样效果。 + +## 阵列:直线与圆周 + +孔阵列、螺栓圆周和齿圈可以用 {{ui:editor.tool.array}}。选中要复制的形状,然后在功能区中单击它。 + +![圆周模式下的阵列:副本首先以预览形式出现。](shot:pattern-tool) + +- **{{ui:array.mode.row}}:** 选择会以相等间距重复。直线阵列可同时沿三个轴逐步排列,使用 {{ui:array.spacingX}}、{{ui:array.spacingY}} 和 {{ui:array.spacingZ}}:其中一个给出直线排列,两个或三个则给出斜线或阶梯排列。负间距会让排列朝相反方向。 +- **{{ui:array.mode.circle}}:** 选择会围绕一个中心分布。副本数量在 {{ui:array.count}} 中设置,{{ui:array.angle}} 为 360° 时是整圈。可选择副本是否随之旋转。{{ui:array.rise}} 让每个副本比前一个略微升高(螺钉或上升螺旋),{{ui:array.radiusChange}} 让它离中心更远或更近(平面螺旋);两者结合则形成锥形螺旋。螺旋最多绕一圈:角度超过 360° 按整圈计算,副本最多 100 个。 + +提示:先用 {{ui:editor.tool.rotationPivot}} 在某个面上设置旋转中心,圆周的中心就会正好落在那一点。 + +![圆周模式下的阵列,每个副本带有升高和半径变化:副本像螺旋一样逐渐升高并扩大。](shot:pattern-spiral) + +副本首先以预览形式出现。只有 {{ui:array.apply}} 才会创建它们。如果副本是孔,之后请将它们与要挖孔的实体分组。 + +## 在面上制作孔阵列 + +对于通风口、扬声器格栅、篮子和外壳,{{ui:holePattern.title}} 会在平面上均匀分布孔。你不必再先做一个孔、重复它,再把它放到壁上。只选中一个实体,然后单击 {{ui:holePattern.title}},它位于工具栏的 {{ui:editor.group.modify}} 组中、阵列旁边。也可以右键单击实体,或用 [[Ctrl]]+[[K]] 找到它。 + +1. 单击实体的一个平面。你单击处周围的整个平面都算数,而不只是指针下的三角形。曲面不行:会给出提示,请改选一个平面。 +2. 在窗口中设置孔的外观和排布: + - **{{ui:holePattern.form}}:** {{ui:holePattern.form.round}}、{{ui:holePattern.form.square}}、{{ui:holePattern.form.rectangle}}、{{ui:holePattern.form.hexagon}} 或 {{ui:holePattern.form.slot}}。 + - **大小:** 圆孔用 {{ui:holePattern.size.diameter}},方孔用 {{ui:holePattern.size.side}},矩形和槽孔用 {{ui:holePattern.size.width}} 与 {{ui:holePattern.size.height}}。六边形的大小是 {{ui:holePattern.size.corners}}。 + - **{{ui:holePattern.spacing}}:** 从一个孔的中心到下一个孔中心的距离。如果它小于孔所允许的最小值,layerling 会将其提高到最小可能值,以便孔之间保留壁。 + - **{{ui:holePattern.wall}}:** 同一距离的另一种说法:相邻两个孔之间留下的壁,也就是打印件中的壁厚。设定它,中心距会随之变化,反之亦然。对于六边形、矩形和槽孔,layerling 测量它们边缘之间的最短距离。 + - **{{ui:holePattern.arrangement}}:** {{ui:holePattern.arrangement.grid}} 将孔排成行与列。{{ui:holePattern.arrangement.staggered}} 将每隔一行错开半个间距,并让行更靠近,使每个孔到相邻孔的距离相同——用于六边形时便形成蜂窝。 + - **{{ui:holePattern.margin}}:** 孔与面边缘之间的净距离。只有完全位于“面减去此边距”范围内的孔才会生成;任何会超出该范围的孔都会被略过。面中的开口周围也会保留此边距。 + - **{{ui:holePattern.depth}}:** {{ui:holePattern.depth.through}}(默认)会切穿整面壁。使用 {{ui:holePattern.depth.custom}} 时,以毫米为单位给出深度,例如用于凹槽。 +3. 孔会立即在面上以预览形式显示,并跟随每个数值变化。窗口会说明能容纳多少个孔。{{ui:holePattern.repick}} 可选择另一个面,[[Esc]] 关闭工具;和其他工具窗口一样,可拖动其标题栏移动。 +4. 只有 {{ui:holePattern.apply}} 才会真正制作孔。 + +这些孔是与实体分组的普通孔,就像使用 {{ui:editor.tool.group}} 之后一样:没有任何内容被固化。{{ui:editor.tool.ungroup}} 会再次解散分组并释放每个孔,之后你可以逐个移动、修改或删除。整个操作在 {{ui:editor.tool.undo}} 中算一步。该工具一次最多制作 400 个孔;超过时请把孔做大或把间距加宽。 + +AI 可以通过 MCP 桥接使用 `layerling_perforate_face` 完成同样的事(参见 [AI 与 MCP](chapter:ai-with-mcp) 一章)。 + +## 将面推出或推入 + +要加厚壁、在面上加凸台或在面上挖凹槽,可使用 {{ui:faceTool.title}} 工具处理一个平面。它也可用于导入的 STL,那里没有草图可改。只选中一个实体,然后单击 {{ui:faceTool.title}},它位于工具栏的 {{ui:editor.group.modify}} 组中、孔阵列旁边。也可以右键单击实体,或用 [[Ctrl]]+[[K]] 找到它。 + +1. 单击实体的一个平面。与孔阵列一样,你单击处周围的整个平面都算数;曲面不行。 +2. 在窗口中: + - **{{ui:faceTool.direction}}:** 选择 {{ui:faceTool.direction.out}} 让材料凸出于面,或选择 {{ui:faceTool.direction.in}} 挖出凹槽。凹槽不会比面后方的实体更深;在抽壳实体上,它仍可通向内部空腔。 + - **{{ui:faceTool.inset}}:** 新轮廓在面边缘内缩多少。向外时,0 会取整个面,从而加厚壁。面中的开口会按同样数值扩大。 + - **{{ui:faceTool.radius}}:** 圆化轮廓的每个角,包括内角,因此尖角末端会变成圆弧。窄于两倍半径的缺口会闭合,而窄于内缩量与半径之和的两倍的那部分面会被略过。 + - **{{ui:faceTool.depth}}:** 新部分凸出于面多少,或凹槽有多深。 +3. 结果会立即以预览形式显示,并跟随每个数值变化。{{ui:faceTool.repick}} 可选择另一个面,[[Esc]] 关闭工具。 +4. 只有 {{ui:faceTool.apply}} 才会真正执行。 + +该工具添加的是一个与实体分组的普通草图实体:没有任何内容被固化。{{ui:group.edit}} 可打开分组,对新零件使用 {{ui:inspector.editSketch}} 可查看它遵循的轮廓。在普通草图实体的顶面或底面上——单一区域、未分组、未镜像、未锥化、未扭曲或倾斜,且没有描边、钥匙环、圆角或倒角——那就是实体自身的轮廓,在构建时嵌入,因此只要 CAD 内核能嵌入,其直线和圆弧就保持精确,可供边工具和 STEP 导出使用。之后调整大小时,该零件会保留其内缩量。在任何其他面上,以及导入网格的每个面上,轮廓都跟随面的三角形,曲线由短直线段组成。整个操作在 {{ui:editor.tool.undo}} 中算一步。之后若要更改内缩量或半径,请撤销并重新运行该工具。若之后要圆化顶边,请在最后一步对分组使用 {{ui:editor.tool.fillet}} 和 {{ui:edge.topEdges}}:与分组上的所有边处理一样,这会将分组合并为一个实体。 + +AI 可以通过 MCP 桥接使用 `layerling_push_face` 完成同样的事(参见 [AI 与 MCP](chapter:ai-with-mcp) 一章)。 + +## 同时修改多个零件 + +选中多个零件时,右侧的属性面板会显示数量,并提供适用于所有零件的操作:{{ui:inspector.solid}} 或 {{ui:inspector.hole}}、统一颜色(单击 {{ui:inspector.solid}} 会打开颜色)以及锁定。对于混合选择,单击一次即可全部设为实体或全部设为孔。只要有任一零件被锁定,就只能使用锁定。可通过手柄、{{ui:scalePercent.title}},或在尺寸标签中输入数字来更改尺寸。选中多个零件时,该数字表示整个选择的尺寸:每个零件都会随之增大,它们之间的间距也会,就像拖动手柄一样。实体和孔也可通过右键单击或 [[S]]、[[H]] 键切换。 + +## 按百分比缩放 + +要按相同比例放大或缩小一个或多个零件——比如把某个打印文件的所有零件放大 20 %——请使用 {{ui:scalePercent.title}}。选中零件,右键单击并选择 {{ui:scalePercent.title}},或用 [[Ctrl]]+[[K]] 搜索它。 + +在 {{ui:scalePercent.percent}} 下,以当前尺寸的百分比输入新尺寸:120 % 表示放大五分之一,50 % 表示缩小一半。宽度、深度和高度会同样变化,因此比例保持不变。底部保持在原处,所以不会有东西陷入平台。 + +选中多个零件时,可以选择它们如何增长: + +- **{{ui:scalePercent.mode.together}}:** 零件围绕它们的共同中心增大,间隙也随之增大。整体就像一个大零件一样变大。 +- **{{ui:scalePercent.mode.each}}:** 每个零件在原地增大,它们之间的间隙保持不变。 + +只有 {{ui:scalePercent.apply}} 会更改设计,后退一步即可撤销。如果选择中包含锁定零件,则不会打开该工具。 + +## 撤销 + +{{ui:editor.tool.undo}}([[Ctrl]]+[[Z]])和 {{ui:editor.tool.redo}}([[Ctrl]]+[[Shift]]+[[Z]] 或 [[Ctrl]]+[[Y]])会在历史记录中前后步进。保存的设计会附带多少步历史,可在设置的 {{ui:workspace.history}} 下设定。 + +## 回看:历史记录视图 + +撤销和重做旁边的 {{ui:editor.tool.history}} 会打开历史记录视图,而不更改任何内容。工作区显示当时的设计,底部的滑块可浏览每个撤销步骤:最右端是当前状态,向左每一步都早一步撤销,而你已经撤销掉的状态位于当前状态的右侧。方向键可逐步浏览这些状态,[[Esc]] 返回当前状态。在滑块上滚动鼠标滚轮也有同样效果,每格一个状态,直到更早的状态;[[Page Up]] 和 [[Page Down]] 跳十个状态,[[Home]] 跳到最早的状态,[[End]] 回到当前状态。期间你可以旋转和缩放视图,并单击对象将其带回(见下文),但不能移动任何东西;设计本身保持原样。如果这条栏挡住了内容,可拖动其标题栏移开;双击它可使其归位。 + +有两种方式可以从较早的状态带出内容。{{ui:historyView.createProject}} 会把该状态放入起始页中的新设计,以当前设计的名称命名,并在括号中带上该状态的时间——在 layerling 记录时间之前保存的设计则显示“副本”——同时附带截至该时间点的历史记录,因此撤销在那里仍然可用。{{ui:historyView.export}} 会以该状态作为设计打开通常的导出窗口,因此你可以将它保存为 STL、3MF、STEP、图片或 LYL 文件,并带有截至该状态的历史记录。 + +你也可以把单个对象带回设计。在所示状态中单击一个对象——[[Shift]]+单击可添加更多或再取消一个,单击空白处则什么都不选——然后选择 {{ui:historyView.bringBack}}。视图关闭,每个对象的副本会进入当前设计,与该状态中完全一样,并位于它当时所在的位置,处于选中状态,与设计当前的内容并排;其他内容不变。这是一步操作,因此撤销即可还原。可用于恢复你后来改过的某个零件版本,或恢复你删除过的零件。分组会整体带回;对象上的备注和参考点则不会带回。其名称会带上该状态的时间,例如“长方体(12:32)”,因此很容易与设计当前的版本区分。要从分组内部带回零件,请选中该分组并选择 {{ui:historyView.openGroup}} 或按 [[E]],与在设计中的操作一样:其零件会摆放在编辑分组时它们应在的位置,可供挑选,这条栏会显示你正位于哪个分组。{{ui:historyView.backOut}} 可再次关闭。这只是查看——分组、设计和历史记录都保持原样。 + +{{ui:historyView.delete}} 单独位于这条栏的左下角。经确认后,它会永久删除所有较早的步骤:设计保留当前状态(不是所显示的状态),撤销没有可回退的内容,之后保存的文件也不带历史记录。可用它在分享设计时去掉过去的历史,或重新开始撤销步骤。此操作无法撤销;若要分享文件而不影响自己的设计,请在导出时选择 {{ui:export.historyNone}}。 diff --git a/docs/guide/zh-cn/05-solids-and-holes.md b/docs/guide/zh-cn/05-solids-and-holes.md new file mode 100644 index 00000000..7f244716 --- /dev/null +++ b/docs/guide/zh-cn/05-solids-and-holes.md @@ -0,0 +1,86 @@ +--- +title: 实体与孔 +summary: 简单的形状如何变成内孔、槽和凹槽,以及之后如何再次修改分组。 +--- + +这是 layerling 中最重要的概念,而且很快就能学会:**每个形状不是实体就是孔。** 实体保留下来。孔是一种去除材料的工具。 + +## 实体还是孔 + +选中一个形状,在其设置中点击 {{ui:inspector.solid}} 或 {{ui:inspector.hole}}。用键盘更快:[[H]] 把选中项变成孔,[[S]] 把它变回实体。右键点击实体打开的菜单中也有这两项。孔以半透明方式显示,好让你看到它所在的位置。[[T]] 让实体变为半透明,比如为了看进一个外壳内部;再按一次又恢复不透明。它对整个选中项生效:只要其中有一个实体已经半透明,所有都变为不透明,否则所有都变为半透明。 + +只要没有分组,孔就不会有任何作用。它只是待在那里,显示之后某处会消失。 + +![圆柱体是一个孔。它从立方体顶部伸出,因此能完全切穿。](shot:hole-before) + +## 分组 + +选中实体和一个或多个孔,点击 {{ui:editor.tool.group}}([[Ctrl]]+[[G]])。现在孔会从它接触到的实体上移除材料。剩下的是一个新的单一形状。 + +![结果:一个带内孔的立方体。](shot:hole-after) + +这样就能做出: + +- **内孔:** 用一个圆柱体作为孔穿透一个实体。 +- **槽:** 用一个长条盒体作为孔放在边缘处。 +- **凹槽:** 不穿透的孔。 +- **零件中的螺纹:** 用一个孔做出内螺纹孔,参见[螺纹与机械](chapter:threads-and-mechanics)。 + +如果分组里有多个实体,它们会连接在一起。两个接触的实体会变成一个零件。 + +你可以把分组当作形状来处理:移动、旋转、上色、再次分组。{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])会把它解散,各个部件重新独立。 + +### 让分组变成孔 + +整个分组也可以是实体或孔。适用一条简单的规则: + +- 如果分组只由实体(或只由孔)组成,你就整体切换它,它的部件也随之改变。 +- 如果两者都有,比如一个带内孔的立方体,每个部件保持自己的状态。整个分组然后变成一个工具,但内孔仍然是内孔。 + +## 捆绑 + +有时部件只应保持在一起,而不该合成一个——比如多色打印时黑色底板上的一块白色标志。这就是 {{ui:editor.tool.bundle}}([[Ctrl]]+[[B]])的用途,与 Tinkercad 中一样。捆绑可以像形状一样移动、旋转和调整大小,但不会合并任何东西: + +- 每个部件保留自己的颜色,并保持为实体或孔。 +- 孔不切割任何东西。当你把捆绑与其他部件分组时,它的孔会切割那些部件,但仍不会切割捆绑自身的实体,与 Tinkercad 中一样。所以,一个旁边带着孔的销钉,可以作为一个捆绑反复使用。 +- 在 STL、3MF 或 OBJ 导出中,每个部件都是独立的实体;在 3MF 和 OBJ 中还会带上颜色。 + +{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])可以再次拆开捆绑,[[E]] 像打开分组一样打开它进行编辑。倒角、圆角和抽壳对捆绑不起作用,因为它不是一个实体:要这样做就先分组,或者逐个处理它的部件。如果捆绑中的某个孔也应切割捆绑自身的实体,就把捆绑拆开,再对其部件分组([[Ctrl]]+[[G]])。 + +## 交集 + +{{ui:editor.tool.intersect}} 只保留两个或多个实体共有的部分。把两个相互重叠的形状叠放在一起,全选后点击它。这样就把一个圆柱体和一个盒体变成一面圆、一面直的块。分组按它的外观计算,包括孔。如果孔也被选中,剩下的是所有实体与所有孔共有的部分。如果这些形状没有任何共同部分,则不做更改,并会提示说明。旁边的 {{ui:editor.tool.intersectPreview}} 会在应用之前显示公共部分:所选形状变为半透明,它们共有的部分以绿色绘制。逐个选中并移动每个形状,绿色部分随之变化;{{ui:editor.tool.intersect}} 应用结果,[[Esc]] 关闭预览。 + +## 编辑分组 + +如果内孔做小了,你不必解散分组再重建。选中分组,在其设置中点击 {{ui:group.edit}}、点击对象列表中的文件夹图标,或按 [[E]]。双击分组也一样,与 Tinkercad 中一样,对捆绑也适用;如果你不希望这样,在设置中关闭 {{ui:workspace.doubleClickOpensGroup}}。部件只有在指针拖动几个像素之后才开始移动,所以手抖的单击或双击不会把它碰偏。现在部件分别摊开,你可以用任何工具修改它们:把孔做大、移动实体、添加孔。 + +![正在编辑的分组:底部的栏里有“完成”和“取消”,对象列表显示各个部件。](shot:open-group) + +画面底部会出现一条栏。{{ui:group.done}} 会重建分组,保留它的名称、颜色以及实体或孔的状态。{{ui:common.cancel}} 则原样放回。 + +如果其中一个部件本身就是一个分组,你可以用同样的方式编辑它,以此类推,深入到设计有多深都行。栏中会显示你所在的位置,例如“支架 › 螺钉柱”。{{ui:group.done}} 和 {{ui:common.cancel}} 总是结束最内层的分组,并把你退回上一级。当你在某个分组内部时,只能编辑其部件中的分组;要编辑另一个,先完成当前编辑。 + +与 {{ui:editor.tool.ungroup}} 不同——后者会永久拆散分组——编辑会保留分组:它的名称和设置都还在,你随时可以用 {{ui:common.cancel}} 返回。 + +注意:加在**整个**分组上的圆角和倒角会在重建时丢失。栏中会提示你。 + +## 分割 + +{{ui:editor.tool.split}} 在 {{ui:editor.group.modify}} 区域中用平面把选中项一分为二——比如一个对打印床来说太大的零件,或一个你想看内部的零件。选中一个或多个实体或孔,然后点击它。一个半透明平面会明确显示切割的位置,实体上还会有一条白线标出平面与实体的交线;在你应用之前不会有任何改变。 + +- {{ui:split.orientation}}:**X** 在左右之间做竖直切割,**Y** 在前后面之间做竖直切割,**Z** 在上下之间做水平切割。坐标轴按位置卡片上的命名,Z 朝上。平面一开始平行于工作平面,因此在底板上是沿 Z 轴。 +- {{ui:split.workplane}}:{{ui:split.workplaneParallel}} 让平面平行于工作平面,{{ui:split.workplaneAcrossX}} 和 {{ui:split.workplaneAcrossY}} 让它垂直于工作平面,横跨其 X 或 Y 方向。工作平面的原点穿过选中项时,平面就经过该点,否则经过中间。于是你可以用 [[W]] 把工作平面放到一个斜面上,直接在那里切割,不必转动滑块。 +- {{ui:split.position}}:平面在何处穿过,用滑块或输入数值。开始时位于中间。你也可以拖动平面上的箭头;平面沿箭头方向以 0.1 mm 的步长移动。 +- {{ui:split.pickFace}},位置旁边的按钮,把平面放到一个面上:点击它,然后点击那个面。方向、两个旋转和位置都会相应设置。拾取时,指针下方会有一个蓝色平面,显示将要采用的面。未选中实体的面也可以,用来对齐切割,但平面仍局限在选中项内。[[Esc]] 停止拾取,平面留在原处。 +- 下方两个旋转滑块绕另外两个轴转动平面,各方向最多 180°,用于斜切。两者可以组合。 + +{{ui:split.apply}} 或 [[Enter]] 执行切割,[[Esc]] 取消(在拾取面时,第一次按 [[Esc]] 只会停止拾取)。平面穿过的每个对象都会变成两个封闭实体,按所在侧命名,例如“长方体(Z+)”和“长方体(Z-)”;未穿过的对象保持原样。一个孔会变成两个孔,抽壳实体保留其空腔。两半都留在原位——要打印的话,用 {{ui:editor.tool.layFlat}} 把每一半放到其切割面上。 + +两半是普通网格:圆柱体的边数或文字的字体等设置都已丢失,所以要先设置好这些。[[Ctrl]]+[[Z]] 一步即可恢复原状。锁定和隐藏的对象无法分割。 + +## 分离部件 + +如果一个形状由几个分开的片段组成,比如由单个字母组成的文字,{{ui:inspector.separateParts}} 会把它拆分为各自独立的形状。右键点击形状打开的菜单里也有这一项。 + +> **提示:** 孔总要做得比它要穿过的零件稍长一些。如果孔正好在表面处结束,有时会残留一层极薄的表皮。多伸出 1 mm 就能确保切穿。 diff --git a/docs/guide/zh-cn/06-edges-and-hollowing.md b/docs/guide/zh-cn/06-edges-and-hollowing.md new file mode 100644 index 00000000..ed519e41 --- /dev/null +++ b/docs/guide/zh-cn/06-edges-and-hollowing.md @@ -0,0 +1,98 @@ +--- +title: 处理边与抽壳实体 +summary: 对指定的边做倒角或圆角,为盒子、杯子和壳体抽出等壁厚的空腔。 +--- + +## 为边做倒角与圆角 + +在打印件上,锋利的边很少好看,也并不特别结实。**倒角**把边斜着切掉,**圆角**把边磨圆。两者都作用于你点击的边。 + +1. 选中实体(或分组)。 +2. 在功能区点击 {{ui:editor.tool.fillet}} 或 {{ui:editor.tool.chamfer}},按 [[B]] 打开圆角、按 [[Shift+B]] 打开倒角,或右键点击实体并从菜单中选择。 +3. 实体的边会亮起。点击要处理的边。再点一次可将该边取消。按住 [[Shift]] 可单独添加或移除一条边。 +4. 设置尺寸,然后用 {{ui:edge.apply}} 或 [[Enter]] 确认。之后窗口会带着相同尺寸停在新实体上,马上就能接着做下一个圆角或倒角;{{ui:edge.done}}、[[Esc]] 或叉号可关闭它。按住 [[Shift]] 或 [[Ctrl]] 点击 {{ui:edge.topEdges}}、{{ui:edge.bottomEdges}}、{{ui:edge.verticalEdges}} 或 {{ui:edge.horizontalEdges}} 时,这些边会加入已选的边,而不是替换它们。 + +![“圆角边”工具:已选中所有锋利的边,图中显示 4 mm 半径的预览。](shot:fillet-preview) + +面板位于右上角。如果它挡住了你要点击的边,抓住标题栏把它拖开;下次它也会在那里打开,{{ui:editor.tool.hollow}} 和 {{ui:editor.tool.array}} 同样如此。双击标题栏可将其复位。 + +面板打开时从形状列表中选取形状会关闭面板,不应用任何更改,你点过的边也会被遗忘。这一次点击会放置新形状,而不是选取边。 + +面板中包括: + +- {{ui:edge.allSharpEdges}} 一次选中所有边,{{ui:edge.clear}} 清空选择。 +- 圆角用 **{{ui:edge.radius}}**。倒角则设置 {{ui:edge.distance}} 或 {{ui:edge.angle}}。 +- {{ui:edge.variableRadius}}(仅圆角)让半径沿一条边变化:一端小,另一端大,中间匀速过渡,例如直壁与斜壁相交处。先点击单条边,再设置 {{ui:edge.radiusStart}} 和 {{ui:edge.radiusEnd}}。哪一端算起点取决于这条边是如何生成的;如果较大的半径出现在错误的一端,可用 {{ui:edge.swapEnds}} 对调。它一次只处理一条边,所以多条边要依次倒圆。{{ui:edge.editAction}} 可把两个数值调回来。 +- {{ui:edge.sharpThreshold}} 决定哪些边算作锋利的边。设为 25° 时,只有明显的折角才算边,平缓过渡不受影响。 +- {{ui:edge.verticalEdges}} 选取竖直向上的边,例如长方体的角:一次圆角就能把所有竖直的角一起倒圆。 +- {{ui:edge.topEdges}} 只选取实体最顶部的边。做饼干模具时这是快捷做法:在草图里用描边画出轮廓,再对顶部边做倒角。{{ui:edge.angle}} 设置倒角的陡峭程度;倒角深度不会超过壁厚。 +- {{ui:edge.bottomEdges}} 只选取实体最底部的边,是 {{ui:edge.topEdges}} 的镜像。想只对零件底部做圆角或倒角时,这是快捷做法。 +- 在倒角窗口顶部 {{ui:editor.tool.chamfer}} 旁选择的 {{ui:edge.chamfillet}},用于做零件可打印的底部:在平台上是一段倒角,朝壁面方向相切地过渡为圆角,这样最初几层不需要支撑,边的收尾依然柔和。{{ui:edge.distance}} 是底部占用的高度,{{ui:edge.angle}}(15° 到 75°)是平台处倒角的陡峭程度。用 {{ui:edge.bottomEdges}} 选取边。 +- {{ui:edge.onlyVisibleEdges}} 隐藏从你的视角看位于实体背后的边。默认情况下所有边都会透过实体显示,零件复杂时容易看花眼;打开此开关后,你只能看到并点击朝向你的边。转动视图才能处理其余的边。以红色显示的边(见下文)始终可见。 +- {{ui:edge.tangentChains}}:点击时还会一并选取彼此平滑相接的边,例如带圆角的面周围的所有边。这个开关只决定点击选取哪些边:CAD 内核总会让倒角或圆角沿着这类平滑延续的边延伸下去。面板会告诉你它还沿多少条边延伸。 +- {{ui:edge.keepSize}} 即使之后缩放实体,也让倒角或圆角保持原来的大小。 +- {{ui:edge.previewQuality}}({{ui:edge.draft}}、{{ui:edge.standard}} 或 {{ui:edge.fine}})决定预览的计算精度。零件复杂时 {{ui:edge.draft}} 更快。 + +调整尺寸时,layerling 会重新计算预览。这可能需要一点时间。你可以继续调整;最终计算的是你最后选择的数值。 + +如果尺寸对这条边来说太大,layerling 会提示并建议一个更小的值。通常少一两毫米就够了。在尖锐的夹角处,圆角需要的空间比半径看起来更大。屏幕较小时,面板会自动向下滚动,让提示信息显示出来。 + +如果原本可行的选择在又点了一条边后失败,那条边会变红并画得更粗:在当前尺寸下,它无法与其他边一起处理。再点一次可将它取消,或把尺寸调小。提示仍在时继续点击其他边,最早出问题的那条会保持红色。如果没有先前可行的选择——比如第一次点击,或你刚调大的尺寸——则单独处理也失败的边会变红;若只是它们的组合失败,则全部变红。 + +指针下方的边也会画得更粗,方便你看出点击会选中哪一条。 + +### 撤销边处理 + +处理过的实体随时可以再次处理。重新选中它并打开工具——圆角、倒角或抽壳都会显示这份列表:在 {{ui:edge.featureHistory}} 下可以看到它上面已经有哪些处理。{{ui:edge.revertAction}} 可撤销单次处理。注意:如果上面还叠着更新的处理,它们会一并撤销,面板会告诉你有多少个。 + +倒角、圆角或抽壳旁边还有 {{ui:edge.editAction}}。它以同样的方式撤销该处理,但会立刻用相同的边和原来的数值重新打开工具。你改完数值再应用即可:3 mm 的圆角变成 5 mm,无需再点一遍边。如果上面叠着更新的处理,这里它们也会一并撤销。这适用于从今往后做的边处理;更早的处理只提供撤销,分组中的单个部件也是如此。 + +对分组,比如带孔圆柱体,被处理的边属于最终成形的实体,而不属于其中某个部件。因此分组会变成一个实体。{{ui:editor.tool.ungroup}} 对它仍然有效:它会先撤销边处理特征,再解散分组,整个过程一步完成,[[Ctrl]]+[[Z]] 即可撤销。若按上文所述撤销该处理,分组会带着所有部件恢复。最省事的做法是把边处理留到最后。螺纹也是如此:边工具把螺纹当作它的精确实体,所以带螺纹孔的方块可以在螺纹就位的情况下倒圆边。计算螺纹的边比普通形状更耗时,M6 需要几秒,G1/2 管螺纹约需半分钟。 + +> **值得了解:** layerling 对圆角和倒角使用真正的 CAD 几何,而不只是三角网格。因此在 STEP 导出中,倒圆的边依然是倒圆的边。 + +以 STEP 导入的零件也会保留其 CAD 几何:倒角、圆角和抽壳都作用在文件中的实体上,无论屏幕上把零件画得多精细。STL、OBJ 和 3MF 只带来三角面,绘制精细的零件可能对边工具来说过于稠密。如果某个零件同时有 STEP 版本,就导入它。 + +## 抽壳实体 + +盒子、杯子、壳体和盖子都有一个共同点:内部是空的,壁厚均匀。这正是 {{ui:editor.tool.hollow}} 做的事。 + +1. 选中实体并点击 {{ui:editor.tool.hollow}},或右键点击实体并从菜单中选择。 +2. 设置 {{ui:shell.wall}}。 +3. 在 {{ui:shell.openings}} 下打开要保持开口的各个面:{{ui:shell.side.top}}、{{ui:shell.side.bottom}}、{{ui:shell.side.front}}、{{ui:shell.side.back}}、{{ui:shell.side.left}} 或 {{ui:shell.side.right}},想开几个都行——只开 {{ui:shell.side.front}} 会做出抽屉槽,开 {{ui:shell.side.left}} 和 {{ui:shell.side.right}} 则做成通道。一个面都不开时,实体四周封闭,中间留有空腔。{{ui:shell.side.closed}} 一键关掉所有面。面板打开时 {{ui:shell.side.top}} 已经处于打开状态;再点击它就会把顶部重新封上。四周封闭的实体从外面看没有变化:剖视图能显示空腔。 +4. 选择 {{ui:shell.edges}} 是 {{ui:shell.edges.round}} 还是 {{ui:shell.edges.sharp}}。 +5. 点击 {{ui:shell.apply}}。 + +![抽壳面板,包含壁厚、每个保持开口的面各自的开关,以及内壁的边。](shot:hollow-panel) + +壁向内部生长。外部保持不变。 + +{{ui:shell.edges}} 只在内壁分开的地方才有影响——实体上的台阶处或开口周围。普通长方体空腔的角在两种设置下都是尖的。想要圆润的内壁,先对实体的外边倒圆(见上文),再抽壳:内壁会按半径减去壁厚来跟随。如果圆润的内壁无法生成,例如轮廓由大量很短的直线段组成时(比如描摹的图形),layerling 会改用尖锐的内角来构建同样的抽壳实体。 + +![结果:壁厚 3 mm、顶部开口的壳体。](shot:hollow-result) + +![同一个盒子,只打开前面:一个抽屉槽。](shot:hollow-sides) + +每个开口面都要求实体在该侧的最边缘有一块平面。因此球体和自由曲面形状不能这样抽壳。如果壁厚对实体来说太厚,layerling 会提示并要求更小的值。上下边也做了圆角的长方体就是这种情况:它的壁厚必须明显小于那个圆角,或者先把圆角设为 0。 + +带凹槽的实体——比如把长方体与一个抬高的孔分组,做出不通透的孔——也能抽壳,顶部开口:凹槽周围的壁同样会被抽空,于是外壁与凹槽之间留下一圈顶部开口的空腔,凹槽底面之下还有一层薄空腔。 + +**以尖端收尾的实体,**例如圆锥或旋转出的三角形,顶部没有可以保持开口的平面。全封闭空腔在这里也行不通,因为尖端无法向内偏移:即使壁厚只有 1 mm,也会提示无法使用这样的壁厚。改为在旋转之前把壁画进轮廓:复制轮廓,将副本等比缩小,把它放到大轮廓中间并用它切掉大轮廓,再整体旋转(见“草图”章节的“旋转”一节)。两条轮廓之间的距离就是壁厚。 + +如果之后调整已抽壳实体的尺寸,layerling 会立即按新尺寸重新抽壳。壁厚保持你选择的厚度,圆形实体也一样。圆柱体若某一方向拉得比另一方向多,就会变成椭圆。 + +> **提示:** 使用 0.4 mm 喷嘴时,1.2 到 2 mm 的壁厚是个不错的起点:够薄以节省材料,够厚以保证零件结实。 + +## 删除面 + +挡路的圆角、位置不对的孔、不再需要的凸台:{{ui:editor.tool.deleteFace}} 能把它从实体上去掉,而无需重建实体。 + +1. 选中实体并点击 {{ui:editor.tool.deleteFace}},或右键点击实体并从菜单中选择。 +2. 点击要删除对象的每一个面:圆角的面、孔的壁面、凸台的侧面和顶面。选中的面会亮起;再点一次可取消。面板会统计面的数量。 +3. 点击 {{ui:deleteFace.apply}} 或按 [[Delete]]。[[Esc]] 关闭工具,不做任何更改。 + +被删面周围的面会延伸,直到补上缺口。顶部边做了倒圆的长方体会恢复锋利的边,孔被填上,凸台消失。实体保持精确,因此还能再做圆角和倒角,STEP 导出也会保留真实的曲面。[[Ctrl]]+[[Z]] 一步撤销删除。它也会与圆角、倒角一起列在 {{ui:edge.featureHistory}} 下,在那里可用 {{ui:edge.revertAction}} 撤销;它没有 {{ui:edge.editAction}}。对分组而言,结果是一个实体,与边处理相同。 + +选中要删除对象的每一个面,而且只选这些面。如果周围的面无法补上缺口,layerling 会提示,且不做任何更改:例如长方体的一个主侧面,没有能顶替它的相邻面。只删除凹槽的底面,会让它变成通透的孔,因为凹槽的壁会一直延伸到另一侧。 + +{{ui:editor.tool.deleteFace}} 需要精确的面:它适用于以 STEP 导入的零件和 layerling 的形状。凡是 layerling 以网格保存的都没有精确面:导入的 STL、OBJ 或 3MF,分割、包裹或简化过的实体,或者非常精细的形状,例如很长的文字。能导入 STEP 时就导入 STEP。对精细的导入零件,少数几个面也可能超出 CAD 内核的处理能力:45 秒后删除会被中止,且不做任何更改。如果实体在边处理之后调整了尺寸,同时保留了边的尺寸,那么在新尺寸下它没有精确的面,直到撤销这次尺寸调整。 diff --git a/docs/guide/zh-cn/07-sketches.md b/docs/guide/zh-cn/07-sketches.md new file mode 100644 index 00000000..faa82889 --- /dev/null +++ b/docs/guide/zh-cn/07-sketches.md @@ -0,0 +1,173 @@ +--- +title: "草图:从轮廓到实体" +summary: 画出平面轮廓,给角点做圆角或倒角,再把它拉伸或旋转成实体。 +--- + +并非所有东西都能用基本形状拼出来。像支架、齿形或花瓶这类有自己轮廓的零件,要先画出**轮廓**,再由它做出实体。草图模式就是干这个的。 + +## 开始草图 + +在顶部从 {{ui:editor.modeGeometry}} 切换到 {{ui:editor.modeSketch}}。功能区的 {{ui:sketch.group.create}} 组里并排有三个按钮,决定轮廓要变成什么: + +- **{{ui:sketch.extrude}}:**轮廓向上拉起,像饼干模具。 +- **{{ui:sketch.revolve}}:**轮廓绕一条轴旋转,如同车床。花瓶、杯子、圆锥和所有圆形的东西都这样做。 +- **{{ui:sketch.sweep}}:**轮廓沿一条路径拉伸:拐弯的线缆槽、导管、绕在某个形状上的环。见下面的沿路径扫掠。 + +编辑器随后显示一张带网格的图板。那就是你的绘图面。 + +## 绘制 + +草图模式的功能区分成几个区域: + +- **绘制:**{{ui:sketch.line}} 画直线段:依次点击各个点;按住 [[Shift]] 时新线按 15° 步距吸附,水平和垂直也包括在内。新线的长度和角度显示在指针旁。也可以键入长度,见[用数字画线](#lines-by-numbers)。{{ui:sketch.arc}} 通过三个点画真正的圆弧:先点击它的两个端点,再点圆弧经过的第三个点;在第三次点击之前,预览跟随指针,提示信息会说出半径。端点若点在与已有点重合的位置,就会连接到它,因此圆弧可以封闭轮廓。[[Esc]] 放弃已点击的点并回到 {{ui:sketch.select}}。之后圆弧就是由点和曲线组成的普通几何图形:像其他线条一样移动、剪切或擦除。{{ui:sketch.bezier}} 用它的手柄塑形:点击一个点,并沿线条应继续的方向拖动,就像 Illustrator 或 Inkscape 里的钢笔工具。拖得越远,弯曲越强;拖向新点的那一段在拖动时就跟着弯曲,因此能直接看到结果。放置点时拖动会让曲线弯曲;如果你来自 Tinkercad,只想点几个点,就用 {{ui:sketch.smooth}}。{{ui:sketch.smooth}} 在你点击的各点之间铺出一条流畅的路径。要封闭轮廓,最后再点击第一个点。要不封闭轮廓而结束连续画线,保持指针不动点右键,或双击最后一个点。 +- **形状:**{{ui:sketch.addShape}} 提供现成的轮廓:{{ui:sketch.rectangle}}、{{ui:sketch.circle}}、{{ui:sketch.ellipse}}、{{ui:sketch.halfCircle}}、{{ui:sketch.pieSlice}}、{{ui:sketch.boltCircle}}(带孔的圆盘)、{{ui:sketch.triangle}}、{{ui:sketch.hexagon}}、{{ui:sketch.polygon}} 和 {{ui:sketch.star}}。点击其中一个即可放到草图原点,也可以从菜单把它拖到想要的位置。在菜单底部,{{ui:sketch.polygonSides}} 设置多边形的边数和星形的角数,{{ui:sketch.starInner}} 设置星形的凹谷向中心伸入多深(外半径的 10% 到 90%);两者都作用于你下一个添加的形状。和所有草图形状一样,之后它们就是普通的角点,可以逐个移动、做圆角或倒角。 +- **重叠:**把两个闭合轮廓叠在一起,它们仍是两个实体,在 3D 编辑器中合并;重叠部分不算孔。只有完全位于另一个轮廓内部的轮廓才会形成孔。移动不会在交叉处连接线条,所以可以再把形状拉开。不过,如果你画一条线穿过其他线,layerling 会在每个交叉处放一个点。 +- **选择:**{{ui:sketch.select}} 移动点和线。在闭合轮廓内部点击会选中整个轮廓,可以直接拖动或调整大小;在孔的内部点击则选中孔。选择框有八个手柄:角上的手柄同时改变宽度和高度,按住 [[Shift]] 时保持比例。边上的手柄只改变一个方向。出现的栏里的 {{ui:sketch.keepProportions}} 无需 [[Shift]] 也能保持比例:这时角上和边上的手柄都会按同样比例拉伸,键入宽度或高度也会同时改变另一个。layerling 会记住这个开关。旁边的 {{ui:sketch.lockOutline}} 锁定选中的轮廓,就像 3D 编辑器里锁定实体一样([[L]] 效果相同):它不能再被移动、调整大小、旋转或修改,线条变淡,选择框失去手柄。线条仍然可以从它的角点开始。{{ui:sketch.unlockOutline}} 或再按 [[L]] 可解锁。选择框上方的圆形手柄让整个选择绕其中点旋转:手柄上方的数字显示角度,按住 [[Shift]] 时按 15° 步进。每按一次 [[R]],整个闭合轮廓旋转 45°。点击宽度或高度胶囊框可键入新尺寸,也可以输入算式(“60+12.5”)或百分比(“150%”)。按住 [[Shift]] 时,点击一个点或一条线会将它加入或移出选择,这样就能选中多个一起移动。在空白处拖出选框,可选中框内所有内容。线条也能拖动(它随两端移动;若它属于某个选择,则整个选择一起移动)。方向键按一个网格步距移动选择,同时按 [[Shift]] 则步距更大;拖动时按住 [[Shift]] 可让移动保持在一个轴上。{{ui:sketch.refine}}:点击一段线条添加点,点击一个点则删除它。此外还有 {{ui:sketch.erase}}(点击一个点或一条线就删除它,拖出选框经过多个则删除框内所有内容,已有选中项时该按钮删除所选内容)以及插入模板图片({{ui:sketch.addImage}})。删除一个点时,layerling 会把它的两个相邻点连接起来,使轮廓保持闭合。要补上缺口,例如擦掉六边形的一条边之后,把一个开放端点拖到另一个上:它会吸附过去,两点合为一点,轮廓便重新闭合。在交叉处,例如一条线穿过一个圆的地方,直通的两侧会相连:弧接弧、线接线,圆仍保持圆形。如果只想去掉圆的一小段,比如做一个圆角,就用橡皮精确点击两点之间的那段弧;其余部分保留。 +- **剪贴板:**{{ui:editor.tool.copy}}、{{ui:editor.tool.paste}}、{{ui:editor.tool.duplicate}} 和 {{ui:editor.tool.delete}} 作用于选中的点、线和图片,与 3D 编辑器一样;[[Ctrl]]+[[X]] 为剪切。粘贴和复制的几何图形会落在原图形旁边,相隔 10 mm,位于不接触任何现有线条的空位,因此绝不会与已有内容连在一起。它保持选中,可以直接拖到位。 +- **历史记录:**{{ui:sketch.undo}} 和 {{ui:sketch.redo}}。 +- **视图:**用中键平移,或按住 [[Shift]] 或 [[Ctrl]] 加右键拖动,与 3D 编辑器一样。[[Home]] 让整个草图适合视图,[[F]] 缩放到选择(没有选中项时缩放到整个草图),[[+]] 和 [[−]] 放大缩小,与 3D 编辑器一样。侧栏上的 {{ui:camera.tapeTools}} 测量两点之间的距离。一选中某个东西,草图就会显示尺寸:一条线的长度,或某个点上与之相交各线的长度。当这些尺寸碍事时,例如在塑造曲线时,侧栏上的 {{ui:sketch.showMeasurements}} 按钮可以隐藏和显示它们;卷尺仍然可用。在直线上可以点击尺寸胶囊框,键入以毫米计的长度;[[Enter]] 应用,[[Esc]] 取消。线条保持方向,起点不动,另一端的线条跟随移动。若选中的是一个端点,则该端点移动。[[Alt]]+[[Enter]] 使线条以中点为心向两侧伸缩。在曲线上,胶囊框只显示长度。 + +只有**闭合**的轮廓才能生成实体。 + +![一个 L 形轮廓。在左上角选中的角点处,两条线的长度以毫米显示,它们之间的角度以度显示。](shot:sketch-outline) + +按 [[1]] 到 [[4]] 选择绘图工具,顺序与工具栏一致:{{ui:sketch.line}}、{{ui:sketch.bezier}}、{{ui:sketch.smooth}} 和 {{ui:sketch.refine}}。在没有画线时它们有效;正在画线时,数字是线的长度(见下文)。 + +## 用数字画线 + +用 {{ui:sketch.line}} 或 {{ui:sketch.smooth}} 定下第一个点后,直接键入数字:线旁会打开两个字段,{{ui:sketch.typedLength}} 以毫米计,{{ui:sketch.typedAngle}} 以度计。[[<]] 或 [[Tab]] 切换到角度,所以 “50<30” 得到一条长 50 mm、角度 30° 的线,与 AutoCAD 一样。[[Enter]] 定下该点,随即可以键入下一条线;[[Esc]] 关闭字段但不结束连续画线。 + +角度从右侧起逆时针计算:0° 向右,90° 向上,180° 向左,270° 向下。留空则线条跟随指针,因此只给出长度,用鼠标指示方向。两个字段里都能输入 “40+12.5” 这样的算式。如果该点会落在平台之外,字段会提示并等待另一个值。 + +## 让直边弯曲 + +选中一条直线,点击出现的栏里的 {{ui:sketch.curveLine}}:这条边弯成曲线,与 Tinkercad 一样,并显示两个手柄。拖动手柄来塑造曲线;手柄拉得越远,弯曲越强。{{ui:sketch.straightenLine}} 让这条边重新变直。选中的点可以用 {{ui:sketch.smooth}} 变成圆滑的:它获得自己的手柄,相邻的线变成曲线。点击一个手柄,它会亮起:此时方向键按一个网格步距移动它,配合 [[Shift]] 步距更大,因此可以精确设置曲线。 + +![L 形轮廓的底边弯成曲线,两个手柄位于两端。](shot:sketch-curve) + +## 读取和键入角度 + +点击**两条直线**相交的角点:在长度旁边,layerling 以小圆弧显示它们之间的**角度**,单位为度。在闭合轮廓上,这是形状内侧的角度,所以凹口读到的是大于 180° 的值。点击该数值并键入新角度。两条线中的一条随即绕角点转动并保持长度,另一条留在原处。转动的线以虚线绘制;[[Tab]] 切换到另一条,[[Enter]] 应用,[[Esc]] 取消。转动线远端连着的东西随之移动。 + +移动一个点会改变三个角度:该点本身,以及它两条线远端相邻的两个角。因此 layerling 也显示那两个角,每一个都可以点击并键入。这样就能在选中会随之移动的左上点的情况下,把左下角设为例如 75.5°。这里也能做运算,例如 “90-14.5”。 + +曲线交汇处,或超过两条线交汇的角点,不显示角度。侧栏上的 {{ui:sketch.showMeasurements}} 按钮会连同长度一起隐藏角度。 + +## 圆角与倒角 + +点击一个角点,选择 {{ui:sketch.filletCorner}} 或 {{ui:sketch.chamferCorner}}。会出现一个小字段,用于 {{ui:sketch.filletRadius}} 或 {{ui:sketch.chamferDistance}}。输入尺寸并用对勾确认。这适用于两条直线之间的角。 + +也可以一次处理多个角:按住 [[Shift]] 逐个点击选中,或框选它们,然后从出现的栏里选择 {{ui:sketch.filletCorner}} 或 {{ui:sketch.chamferCorner}}。它们都得到相同的半径或距离。若两个选中的角共用一条边,每个角最多占这条边的 45%,这样四角都做圆角的长方形每个角看起来都一样。不是两条直线之间夹角的点会被略过,提示信息会说明略过了多少个。框住整个形状,或在形状内部点击,会同时选中它的角点和线条,此时栏里在角工具旁边会为所有选中的线提供 {{ui:sketch.curveLine}} 和 {{ui:sketch.straightenLine}}。 + +![左上角的角已做成半径 12 mm 的圆角。](shot:sketch-fillet) + +## 镜像 + +选中点和线(点击、[[Shift]] 加点击,或框选),然后点击栏里的 {{ui:sketch.mirror}}。然后选择轴:{{ui:sketch.mirrorLeftRight}} 沿穿过平台中点的垂直轴镜像,{{ui:sketch.mirrorTopBottom}} 沿水平轴镜像,{{ui:sketch.mirrorAcrossLine}} 沿你接下来点击的草图中的一条直线镜像。副本加到另一侧,原图形保留;两者没有任何关联,因此可以各自修改。位于轴上的点是共用的,因此两端落在轴上的半个轮廓会变成一个闭合轮廓:画出半个支架,选中、镜像,然后生成实体。构造线很适合做轴。[[Esc]] 取消。 + +## 构造线 + +构造线帮助你放置点,而不成为实体的一部分。它以虚线绘制,永远不算轮廓:想拉出形状多远都可以,实体不会因此变大。 + +- 在 {{ui:sketch.group.draw}} 组里打开 {{ui:sketch.construction}}。之后新画的线,包括按尺寸键入的线,都是构造线。再按该按钮切回普通线。 +- 已经画好的线,点击它并选择 {{ui:sketch.makeConstruction}} 即可变成构造线。{{ui:sketch.makeSolid}} 让它恢复为普通线。 +- 新点会吸附到构造线与其他线的交叉处(会显示蓝色圆环),也会吸附到构造线的端点。这样无需计算,就能把角点放在中点、距某条边固定距离处或交叉处。 +- 新点还会吸附到草图中每条直线的中点、每个圆和圆角的中心,以及下方显示实体的各边中点(#624)。正在拖动的点会忽略它自己线条的中点。 +- {{ui:sketch.group.draw}} 组里的 {{ui:sketch.fromMiddle}} 从线的中点开始画线:先点击中点,再点击端点,线条会向另一侧延伸同样的长度。中点会成为独立的一个点。再按该按钮可画普通线。 +- 构造线穿过轮廓时不会把它切开。旋转时它也可以位于轴的右侧。 + +## 用它生成实体 + +点击 {{ui:sketch.finishSketch}}。轮廓作为实体立在工作平面上。在它的设置里,可以像其他形状一样修改高度、颜色和其他一切。调整它的大小时,layerling 片刻之后会从草图重建它,草图也随之变大。因此它仍是精确实体,可以倒角和圆角,下次编辑时草图的尺寸就是实体的尺寸。 + +如果工作平面位于实体的某个侧面上,你就按看那一面的方向来画:草图里的上方就是完成实体上的上方。草图视图中实体淡淡的轮廓显示它所在的位置。如果工作平面切过实体,草图视图改为显示那个切面的轮廓,因此抽壳实体看起来像一个环,你可以让草图与它的壁对齐。你设置或拖动的点靠近这些轮廓的角点时,会精确吸附到角点上;会出现一个小蓝环。这样就能把其他实体的边带入草图中,即使工作平面并不恰好落在这些边上。要描摹已有的模型,请打开 {{ui:sketch.showPartEdges}}(左侧视图按钮中的图层按钮):之后实体的所有边都会画在草图平面上,细而淡,仿佛能看穿它们,无论它们位于什么高度。竖直的平面,例如设在正面的平面,就会以这种方式显示正视图。这个选择会保存在浏览器中。 + +![轮廓已变成实体。角已经做成圆角。](shot:sketch-result) + +用 {{ui:inspector.editSketch}} 可以随时回到草图进行修改。双击实体也可以,与 Tinkercad 一样(锁定的实体不会打开);设置里的 {{ui:workspace.doubleClickOpensSketch}} 可以关闭这一功能。不过,你已经对实体做过的边缘处理会丢失,因为边是重新生成的。 + +包含多个轮廓的草图生成一个实体,重叠的轮廓在其中合并。若想让每个轮廓各自独立,选中实体并点击 {{ui:inspector.separateParts}}:每个外侧轮廓连同其中的孔成为独立实体,并保持实体的高度、颜色和位置。每个部件都有自己的草图可编辑,构造线也在其中,因此可以逐个抬高或降低各个部件,之后再合并或切除它们。边缘处理会阻止此操作,之后被拉伸过的实体也不行:那样它会作为网格拆开。 + +**用同一张草图做另一种实体:**草图顶部的标记说明它会变成什么,{{ui:sketch.modeBadgeExtrude}}、{{ui:sketch.modeBadgeRevolve}} 或 {{ui:sketch.modeBadgeSweep}}。点击它并选另一个,编辑已有实体时也可以:导入的 SVG 本来是拉伸的,切换到 {{ui:sketch.modeBadgeRevolve}} 就变成花瓶或旋钮。跨越轴的轮廓会向左移动,直到右边缘落在轴上,于是 SVG 的半个横截面就绕它的直边旋转;[[Ctrl]]+[[Z]] 可撤销这次移动。完成时,新实体接替旧实体的位置、名称和颜色,底部高度相同。边缘处理会消失,这与每次编辑草图一样。 + +### 旋转 + +旋转时,把半个横截面画在草图中所示**轴的左侧**。旁边可以看到旋转的 3D 预览。它立刻显示实体将会是什么样子。轮廓必须闭合,或者把开放线条建成描边,见下文。最后点击 {{ui:sketch.finishRevolve}}。设计中的其他实体以正面显示,与轮廓采用同一视图,轴位于中间:把轮廓画在它们旁边或上方。实体立在你在草图中画它的位置,穿过草图中央的水平线是地面:画在它上方的轮廓得到的实体立得更高,其最低点就是实体的底部。 + +旋转实体和拉伸实体一样是精确实体:可以倒角和圆角,也可以抽壳,做成杯子或花瓶。用旧版 layerling 旋转出的实体是网格;打开 {{ui:inspector.editSketch}} 再完成一次,即可让它变精确。跨越轴的轮廓无法精确构建,和以前一样会变成网格。 + +**一根连续的条:{{ui:prop.pitch}}。**旋转会把轮廓变成闭合的环。选中旋转实体,在属性面板中给它一个大于 0 的 {{ui:prop.pitch}},即每圈上升的距离,轮廓就会改为盘成螺旋:一根连续的条,像线轴上的耗材或弹簧。{{ui:prop.sweep}} 则变成 {{ui:prop.turns}},最大 200;负数向左旋。相邻圈距小于轮廓高度时会熔成一个实体,因此细螺距的实心芯也能做。螺旋以网格构建,因此圆角、倒角和抽壳对它无效;圈数多时把 {{ui:prop.sides}} 设低。螺距为 0 又变回环。 + +## 沿路径扫掠 + +{{ui:sketch.sweep}} 把轮廓沿路径拉伸:拐弯的线缆槽、导管、皮带周围的护罩、绕六边形的环。它在 {{ui:sketch.group.create}} 组里,位于 {{ui:sketch.extrude}} 和 {{ui:sketch.revolve}} 旁边。 + +在同一张图板上画两样东西: + +- **横截面**照常作为闭合轮廓。按从路径起点沿路径看过去的样子来画:横向是草图的左右,向上就是完成实体的上方。空心截面,比如槽或管,是轮廓里再套一个轮廓。截面以路径为中心,实体以截面的最低点立在草图平面上。 + +- **路径**作为 {{ui:sketch.construction}}:打开它,画出线或曲线,构成一条链,开放或闭合(闭合链得到环)。路径平躺在草图平面内。 + +把截面画在路径应当开始的端点附近;路径从离它最近的端点开始。然后点击 {{ui:sketch.finishSweep}}。直线段的拐角会变成斜接,曲线保持平滑,截面全程保持竖直。实体和拉伸的一样精确:圆角、倒角和 STEP 导出都能用。如果缺少闭合轮廓或路径,或者有多条彼此分离的路径,layerling 会提示。用 {{ui:inspector.editSketch}} 可以回到草图修改截面或路径。 + +## 按描边生成 + +通常,闭合轮廓内部的区域成为实体。用 {{ui:sketch.group.finish}} 区域里的 {{ui:sketch.stroke}},改为构建线条本身,宽度由你设置。在面板中勾选 {{ui:sketch.strokeOn}};草图立刻显示结果。 + +- **闭合轮廓**变成一个边框。{{ui:sketch.strokeAlign}} 说明壁落在哪里:{{ui:sketch.strokeAlign.center}} 在画的线上,{{ui:sketch.strokeAlign.inside}} 在其内侧,{{ui:sketch.strokeAlign.outside}} 在其外侧。外侧对齐在留公差时很方便:画出孔的轮廓,比如燕尾,给它 0.2 mm 的外侧描边,就得到了打印所需的间隙。 +- **开放线条**变成一条带子,以线为中心。{{ui:sketch.strokeCap}} 决定端头的样子:{{ui:sketch.strokeCap.flat}}、{{ui:sketch.strokeCap.square}}(长出半个宽度)或 {{ui:sketch.strokeCap.round}}。 +- {{ui:sketch.strokeJoin}} 对两者都适用:{{ui:sketch.strokeJoin.miter}}、{{ui:sketch.strokeJoin.round}} 或 {{ui:sketch.strokeJoin.bevel}}。 + +草图保留所画的线。再次打开后可以继续修改线条和描边;取消勾选,区域又会重新生成。曲线会为此拆成短的直线段。 + +在旋转中,描边是一层薄壁:把花瓶或杯子的壁画成轴左侧的**一条开放线**,勾选 {{ui:sketch.stroke}} 并设置宽度,旋转就会把这条带子转出来。越过轴的部分会在轴处被切掉。 + +## 填充与剪影 + +不用打开草图也能设置描边:在草图实体的属性里,在 {{ui:prop.sketchFill}} 下选择 {{ui:prop.sketchFill.area}}、{{ui:prop.sketchFill.outside}}、{{ui:prop.sketchFill.inside}} 或 {{ui:prop.sketchFill.center}},并设置 {{ui:prop.sketchLineWidth}} 和 {{ui:sketch.strokeJoin}}。实体会立刻在原位重建。这些对应 Tinkercad 导入 SVG 的填充模式:默认、外线和内线。{{ui:prop.sketchFill.grow}} 保持区域填充,并向四周扩展一个线宽,角可以是尖角、圆角或斜角:多色打印时标志下方的一层底色,仅用外侧描边只会得到一个环。{{ui:prop.sketchFill.shrink}} 相反:区域保持填充,边缘向四周内缩一个线宽,孔也算在内(孔会变大)。在同一草图的副本上两者都用,可以做配合:孔保持画的尺寸,穿过它的零件用 {{ui:prop.sketchFill.shrink}} 缩 0.5 mm,或者在同一轮廓切出的形状里做一层壁。宽度超过轮廓允许的范围就什么都不剩。在草图的描边面板里,这两个选项位于 {{ui:sketch.strokeAlign}} 下。 + +{{ui:prop.sketchSilhouette}} 略过所有位于其他轮廓内部的轮廓:孔以及孔里的东西。只保留外侧轮廓。与 {{ui:prop.sketchFill.outside}} 一起就能做出饼干模具:把同一个 SVG 导入两次,一次用剪影作为底部的面,一次用剪影加外侧 1 到 2 mm 描边作为壁。在草图模式下,这个开关也在 {{ui:sketch.stroke}} 面板里。 + +实体重建时,边上的圆角和倒角会消失,与编辑草图时一样。 + +## 斜壁,用于印章 + +拉伸的草图是垂直的壁。印章、压花模或冲头需要斜壁,外侧和内侧都要,且壁厚处处相同。layerling 的拉伸没有拔模角,但对于简单的轮廓,可以用 {{ui:inspector.taper}} 达到目的。一种可行的做法: + +1. 画出带所需孔的轮廓并生成实体。复制该实体([[Ctrl]]+[[D]])。 +2. 在第一个实体上打开 {{ui:prop.sketchSilhouette}},让孔被填上,再用 {{ui:inspector.taper}} 让底部比顶部宽。 +3. 在副本上再次打开它的草图,删除外侧轮廓,只留下孔的轮廓。完成草图,把实体切换为 {{ui:inspector.hole}},再用 {{ui:inspector.taper}} 让底部比顶部窄。 +4. 把孔移到第一个实体中原来孔的位置,并将两者分组。 + +现在外侧和内侧的壁都倾斜了。锥变会缩放整个轮廓,所以对简单形状是精确的(可以选择尺寸让壁平行),对文字之类的细节只是近似。 + +## 用图片作模板 + +用 {{ui:sketch.addImage}} 把照片或图样放到草图下面,照着描。可以设置它的大小、不透明度和位置。图片放好后,用 [[L]] 锁定它,以免绘图时不小心移动。锁定的图片不会挡路:点击会穿过它,因此能选中它上面的线和点,也能在上面框选。要再次选中它,例如解锁,请 [[Alt]]+点击它。如果右边缘的设置挡住了图片,抓住标题栏把它们拖开;双击可重新停靠。 + +在 {{ui:sketch.imageAlign}} 下,可以校准拍歪的照片: + +- **{{ui:sketch.imageRotation}}:**绕图片中心旋转,可用框上方的圆形手柄,或输入以度计的数字。按住 [[Shift]] 时手柄按 15° 步距吸附。 +- **{{ui:sketch.centreImageX}}** 和 **{{ui:sketch.centreImageY}}:**把图片中心放到 X = 0 或 Y = 0。对旋转来说,X = 0 就是轴,图片因此关于轴对称。 +- **{{ui:sketch.calibrateImage}}:**在图片中点击距离已知的两点,比如尺子的两端或已知直径,然后键入实际距离。图片会等比缩放,使该距离正确;第一个点留在原处。 +- **{{ui:sketch.cropImage}}:**框上的手柄此时裁剪图片而不是缩放;裁掉的部分仍被保存,可用 {{ui:sketch.uncropImage}} 或再次向外拉手柄恢复。 + +这四项都只影响参考图,绝不会影响草图。 + +## 草图模式下的按键 + +| 按键 | 效果 | +| --- | --- | +| [[Esc]] | 放下工具(回到 {{ui:sketch.select}}),然后清除选择 | +| [[Delete]] | 删除选中的元素 | +| [[Ctrl]]+[[C]] | 复制选中的内容 | +| [[Ctrl]]+[[X]] | 剪切选中的内容 | +| [[Ctrl]]+[[V]] | 粘贴 | +| [[Ctrl]]+[[D]] | 复制选中的内容(副本) | +| [[Ctrl]]+[[Z]] | 撤销 | +| [[Shift]] | 画线时:按 15° 步距吸附;拖动时:让移动保持在一个轴上 | +| 数字、[[<]]、[[Tab]]、[[Enter]] | 画线时:键入并设置下一条线的长度与角度 | +| [[R]] | 让闭合草图旋转 45° | +| [[L]] | 锁定或解锁选中的轮廓,或模板图片 | + +> **提示:**尽量少画点。点少而位置恰当的轮廓,做出来的实体比一堆杂乱的点更平滑。 diff --git a/docs/guide/zh-cn/08-text.md b/docs/guide/zh-cn/08-text.md new file mode 100644 index 00000000..46c6ac8a --- /dev/null +++ b/docs/guide/zh-cn/08-text.md @@ -0,0 +1,165 @@ +--- +title: 文字与弧形文字 +summary: 用八种字体或你自己的字体创建凸起或凹刻的文字,还可以让它沿圆弧排列,例如硬币、盖子或戒指上的文字。 +--- + +## 添加文字 + +在形状库中选择 {{ui:shape.text}} 并放置。在右侧的 {{ui:prop.text}} 字段中,输入要显示的内容。下方是各项设置: + +- **{{ui:prop.font}}:** 提供八种字体:Multilanguage、Sans、Serif、Script、Monospace、Rounded、Stencil(用直线构成的字母)和 Japanese(Zen Maru Gothic)。新文字默认使用 Sans。每种字体都包含 ä、ö、ü、é 等带重音的字母和 € 符号,也包含假名、常用汉字以及姓名中许多生僻字,例如 澤、槇 和 檜:日文姓名在每种字体和名牌上都能正常显示。首次用到日文字符时才会下载(生僻汉字位于第二个文件,只有文字中用到时才下载),因此这类文字会短暂显示为问号。之后它们会保存在电脑上,从那时起日文离线也能使用。你自己的字体会显示在最上面,见下文[你自己的字体](#your-own-fonts)。 +- **{{ui:nameTag.letterSize}}:** 从上方看字母的大小;{{ui:prop.height}} 决定字母的厚度。 +- **{{ui:prop.height}}:** 文字高出表面的距离。 +- **{{ui:prop.bevel}}:** 将字母边缘做成圆角,看起来更柔和。用 {{ui:prop.segments}} 决定分成多少段。 +- **{{ui:nameTag.letterEdge}}:** 对字母的顶边做圆角或倒角,就像名牌上那样:{{ui:nameTag.edge.none}}、{{ui:nameTag.edge.round}} 或 {{ui:nameTag.edge.chamfer}},并设置 {{ui:nameTag.letterEdgeSize}}(初始为 0.4 mm,最大不超过文字高度)。它比 {{ui:prop.bevel}} 影响更远,但只到笔画宽度允许的范围:当笔画比尺寸的两倍还窄时,边缘会终止于一个更窄的顶面。底面保持平整,因此单个字母可以之后再粘上去。选择边处理时,它会取代 {{ui:prop.bevel}}。 +- **尺寸:** 与任何形状一样设置这一行的长度和宽度。拖动手柄或输入尺寸。 +- **{{ui:prop.textSpacing}}:** 在字体原有间距之上增加的字母间距,以字母大小的百分比表示:0 表示保持字体原本的间距,大于 0 时字母分得更开,小于 0 时(最低 -50)更紧凑,你自己的字体常常需要这样。字母大小不变,外框随这一行变化,直线文字和弧形文字都是如此。阿拉伯文和希伯来文的字母相互连写,不应用此间距。 +- **{{ui:prop.textStretch}}:** 初始为关闭:字母保持原有比例并位于外框中间,因此把外框拉得比文字所需更宽或更深时,外框会比字母大。开启后,字母会在两个方向上拉伸以填满整个外框:大写字母可以变矮或变窄,与 Tinkercad 中一样。它适用于直线文字;弧形文字有自己的字母大小。 + +文字最初是一个实体。如果想单独处理每个字母,点击 {{ui:inspector.separateParts}}。之后每个字母都是独立的形状。 + +文字的边也可以倒角或加圆角,直线文字和弧形文字都可以,见[断开边缘与抽壳实体](chapter:edges-and-hollowing)。请使用 0.2 至 0.5 mm 这样的小尺寸,因为字母的笔画很窄。 + +## 你自己的字体 + +除了八种内置字体,你还可以使用任何自己的字体:电脑上的字体文件,或者在 Chrome 和 Edge 中直接使用电脑上已安装的字体。在 {{ui:prop.font}} 底部选择 {{ui:font.manage}},会打开 {{ui:font.title}} 窗口。 + +- **{{ui:font.addFile}}** 可接受 TrueType 文件(`.ttf`)、OpenType 文件(`.otf`)或 WOFF 文件(`.woff`)。也可以直接把文件拖进窗口。 +- **在 Windows 上**,已安装的字体放在 Fonts 文件夹(`C:\Windows\Fonts`)中,浏览器的文件对话框会隐藏它。改为在资源管理器中打开该文件夹,把字体拖到 {{ui:font.title}} 窗口。仅为当前用户安装的字体位于 `%LOCALAPPDATA%\Microsoft\Windows\Fonts`,文件对话框会显示这个位置。在 Mac 上,字体位于 `/Library/Fonts` 和 `~/Library/Fonts`。 +- **{{ui:font.fromSystem}}** 会列出电脑上已安装的字体。首次使用时,浏览器会询问是否允许 layerling 读取这些字体。用搜索框可以快速找到字体,点击即可选用。 + +如果已选中文字,它会立即使用新字体。否则该字体会出现在 {{ui:prop.font}} 下的 {{ui:font.customGroup}} 分组中,窗口里的 {{ui:font.use}} 可将其应用到选中的文字上。自己的字体与内置字体的工作方式相同:弧形文字、边缘倒角和圆角以及 STEP 导出都照常可用。字体缺少的字母会从 Sans 中取用。 + +### 阿拉伯文与希伯来文 + +阿拉伯文、波斯文、乌尔都文和希伯来文从右向左书写:第一个字母在最右边;在“Name عربي”这样的混合文字中,只有阿拉伯文单词反向排列,数字保持正常方向。阿拉伯字母按书写规则与相邻字母连写,lam-alef 会形成连字。这需要包含这些字母的字体;内置字体没有。添加一种自己的字体,例如 Windows 上的 Arial、Tahoma 或 Segoe UI,或者 Noto Naskh Arabic、Noto Sans Arabic、Amiri 这样的免费字体。元音符号会落在所属的字母上。弧形文字、轮廓、剪影、分层和名牌都能像处理其他文字一样处理它。 + +### 各浏览器支持的功能 + +| 浏览器 | 选择字体文件 | 使用电脑上的字体 | +| --- | --- | --- | +| 电脑上的 Chrome 和 Edge,以及安装版 layerling 应用 | 支持 | 支持,浏览器询问后即可 | +| Firefox | 支持 | 不支持 | +| Mac 上的 Safari | 支持 | 不支持 | +| 平板和手机 | 支持,从设备文件中选择 | 不支持 | + +网页不能随意读取已安装的字体。只有 Chrome 和 Edge 具备这项权限,而且仅限于安全页面,即通过 `https` 访问,例如 layerling.com。当 layerling 通过 `http` 运行时,例如运行在你自己的服务器上或作为家庭网络中的 Docker 安装,{{ui:font.fromSystem}} 不会出现;这时请从资源管理器把字体拖过来。在其他浏览器中,从字体文件夹选择字体文件,效果相同。如果你在 Chrome 或 Edge 中拒绝了询问,可以在网站设置中重新允许,入口位于地址栏左侧的挂锁图标后面。 + +layerling 无法读取 WOFF2 文件(几乎总能找到 TTF 或 OTF 版本)、字体集合(`.ttc`,一个文件里含多种字体)或彩色 emoji 字体。对于超大的字体,例如中文字体,layerling 只取前 8000 个字符。可变字体会按其默认设置读取,通常是常规字重。 + +有些字体,尤其是手写体和可变字体,用相互重叠的笔画绘制字母。layerling 在读取字体时会把它们合并成一个干净的轮廓,让实体保持可打印。这样得到的字母由许多很短的直线段而不是曲线构成;肉眼看不出来。 + +### 字体保存在哪里 + +你自己的字体保存在**这台电脑的这个浏览器中**。其他浏览器或其他电脑在你也添加之前不会知道它。清除浏览器的网站数据也会清除这些字体。在 {{ui:font.title}} 窗口中,垃圾桶图标会把字体从浏览器中移除。你的设计不会因此丢失任何东西,下一节会说明原因。 + +### 传递使用了自定义字体的设计 + +设计**不会保存字体文件**,只保存其文字所用字母的轮廓,历史记录中较早步骤里的文字也是如此。如果文字是“Hello”,随设计一起传递的只有 H、e、l 和 o。设计以任何方式保存都是如此:保存在浏览器中、你自己的服务器上、`.lyl` 文件中,以及 {{ui:myShapes.title}} 中。 + +因此: + +- **设计在任何地方都能正确打开**,包括没有该字体的电脑。文字看起来一样,可以移动、旋转、缩放和加圆角。 +- **新字母需要字体。** 如果使用者在没有该字体的情况下输入了设计未携带的字母,layerling 会用 Sans 绘制它。此时在 {{ui:prop.font}} 下,字体会标记为 {{ui:font.fromDesign}}。添加字体文件后,所有字母都会恢复。 +- **导出内容只包含几何体。** STL、3MF、OBJ、STEP 和 SVG 只包含实体和轮廓,不含字体。 +- **较旧的 layerling 版本**尚不认识自定义字体,会用 Multilanguage 绘制这类文字。 + +**许可:** 字体受版权保护,其许可条款规定了你可以如何使用。PDF 文件从字体中携带的正是内嵌的字母轮廓,大多数许可允许这样做。但有些商业字体连传递单个字母都禁止。在传递或发布使用自定义字体的设计之前,请检查字体的许可。Google Fonts 等免费字体(大多采用 SIL Open Font License)可以放心传递。对于打印出来的零件或导出的 STL 则无所谓:它们不再包含字体,只有几何体。 + +## 凸起或凹刻 + +- **凸起:** 将文字放在表面上,并与实体分组。它会长出来形成浮雕。 +- **凹刻:** 将文字切换为 {{ui:inspector.hole}},让它略微伸入表面,再与实体分组。字母就被刻进去了。 + +要在侧面放置文字,先把工作平面放到该面上,见[视图与工作平面](chapter:view-and-workplane)。 + +## 轮廓、剪影与加宽 + +文字不必做成实心字母。属性中的 {{ui:prop.textFill}} 提供了与 Tinkercad 相同的选项: + +- **{{ui:prop.textFill.filled}}:** 字母保持原样。 +- **{{ui:prop.textFill.outline}}:** 沿字母轮廓画线,一半在内、一半在外。 +- **{{ui:prop.textFill.outer}}:** 沿字母外侧画线。 +- **{{ui:prop.textFill.inner}}:** 沿字母内侧画线。 + +选择线条后,列表正下方会出现两项设置:{{ui:prop.sketchLineWidth}} 设置线条的粗细,{{ui:sketch.strokeJoin}} 设置线条如何绕过拐角({{ui:sketch.strokeJoin.round}}、{{ui:sketch.strokeJoin.bevel}} 或 {{ui:sketch.strokeJoin.miter}})。较少用的设置位于 {{ui:inspector.more}} 下:{{ui:prop.sketchSilhouette}} 会略去 O、A 或 e 中的孔,{{ui:prop.textWider}} 让字母保持实心,并沿四周按线宽加粗;相互接触的字母会连成一体。 + +使用外侧线、居中线条或“加宽”时,文字的外框会变大,而字母大小保持不变。{{ui:prop.bevel}} 和 {{ui:prop.segments}} 仅适用于实心字母。 + +## 分层与名牌 + +用于多色打印的名牌是分层的文字:最上面是字母,下面是用第二种颜色、略宽一些的同样文字,最底层是第三种颜色、不带孔的底板。layerling 一键即可生成: + +- **新建名牌:** 在形状库中选择 {{ui:shape.nameTag}} 并放置。它显示“Name”,白色字母配红色边框和深色底板。 +- **从文字生成:** 选中文字,点击其设置顶部的 {{ui:nameTag.makeLayers}}。 + +名牌的所有设置都在设置顶部的 {{ui:nameTag.title}} 卡片中: + +- **{{ui:prop.text}}** 和 **{{ui:prop.font}}**,也包括自己的字体。名牌会随文字增长。 +- **{{ui:nameTag.letterSize}}:** 大写字母的高度,单位为 mm。所有层都会跟随并保持对齐。 +- **{{ui:nameTag.layers}}:** 每层一行,从上到下排列。每行包含颜色(点击色块)、该层比字母宽出多少、高度以及 {{ui:nameTag.noHoles}}(用于填平 O、A 等字母中的孔)。{{ui:nameTag.corners}} 设置较宽的层如何绕过字母的拐角:{{ui:nameTag.corner.round}}、{{ui:nameTag.corner.bevel}} 或 {{ui:nameTag.corner.miter}}。最上面一行就是字母本身。**+** 在底部添加一层,**–** 移除最底层。名牌可有两到六层。 +- **{{ui:nameTag.keyring}}:** 在底层加上一个末端为圆形的直舌片,并开一个钥匙圈孔;舌片会随孔一起变大。默认的 3 mm 孔会生成一个宽 6.5 mm、伸出 6.75 mm 的舌片,孔边缘距底层边缘 2 mm。选择 {{ui:nameTag.keyringDiameter}} 和 {{ui:nameTag.keyringSide}}:{{ui:nameTag.side.left}}、{{ui:nameTag.side.right}} 或 {{ui:nameTag.side.top}}。{{ui:nameTag.side.free}} 会把孔从名牌上取下,在旁边放一个独立的 {{ui:nameTag.keyringTab}},颜色和高度与底层相同:这是一个普通形状,你可以用手柄移动和旋转它到名牌需要的任何位置。放好之后,其面板中的 {{ui:nameTag.keyringTabFix}} 会把它并入最近的名牌,并保持在当前位置:孔会穿过它到达的每一层,耳片并入底层,而且文字或尺寸变化时,两者都会保持在该字母的拐角处。{{ui:nameTag.side.free}} 会把舌片重新放回原来的位置,以便再次移动。孔会穿过它接触的每一层,改变文字、字母大小或字体时舌片也会跟着移动。{{ui:nameTag.keyringAlong}} 让舌片沿所在边上下移动(在顶边上则是左右移动),直到将要离开该边的位置;0 表示中间。当边的中点正好遇到空隙时(例如 J 旁边),可以用它把舌片移到字母伸出的部位。 +- **{{ui:nameTag.letterEdge}}:** 对顶层的字母顶边做圆角或倒角,就像打印出的名牌那样收边:{{ui:nameTag.edge.none}}、{{ui:nameTag.edge.round}} 或 {{ui:nameTag.edge.chamfer}},并设置 {{ui:nameTag.letterEdgeSize}}(初始为 0.4 mm,最大不超过层高)。它适用于所有字体和文字。该边是字母网格的一部分,因此边工具会把这样的文字当作网格处理,对如此精细的文字来说负担很重;请改为在这里选择边处理。 + +每次更改都会立即显示。名牌是一个捆绑体:它作为一个整体移动,而每一层仍是各自独立、各具颜色的实体,切片软件进行多色打印正需要如此。要对某一层的边做圆角或倒角,点击 {{ui:group.editBundle}} 并选择该层,见[断开边缘与抽壳实体](chapter:edges-and-hollowing)。 + +### 一次生成多个名牌 + +在 {{ui:textLayers.names}} 中输入姓名,每行一个,最多一百个。下方的按钮会显示将生成多少个名牌,例如“生成 12 个名牌”。每个名牌使用相同的层、字母大小和钥匙圈孔,并且是独立的对象;它们从第一个下方开始按行排列,间距 5 mm。普通文字在其设置靠下的位置也有姓名列表。 + +## 图标牌 + +图标牌是同样的名牌,只是用 SVG 图标代替字母:一颗心、一朵云、俱乐部的标志。最上面是图标,下面是用第二种颜色、略宽一些的相同轮廓,最底层是不带孔的底板。 + +- **新建图标牌:** 在形状库中选择 {{ui:shape.iconTag}}。会打开一个小窗口:点击 {{ui:iconTag.browse}},选择 SVG、PNG 或 JPG 文件,检查图片,输入图标的 {{ui:iconTag.width}},然后点击 {{ui:iconTag.ok}}。图标牌会立在平台中央,分层与新名牌相同。 +- **从草图实体生成:** 导入的 SVG 或你自己绘制的草图,其设置顶部有 {{ui:nameTag.makeLayers}}。 + +设置顶部的 {{ui:iconTag.title}} 卡片包含: + +- **{{ui:iconTag.replace}}:** 用另一个文件(SVG、PNG 或 JPG)的图标替换到图标牌上;分层和宽度保持不变。 +- **{{ui:iconTag.iconWidth}}:** 顶部图标的宽度,单位为 mm。所有层都会跟随并保持对齐。 +- **{{ui:nameTag.layers}}:** 各行与名牌相同——颜色、宽出多少、{{ui:nameTag.corners}}、高度和 {{ui:nameTag.noHoles}},以及 **+** 和 **–**,两到六层。最上面一行就是图标本身。 +- **{{ui:nameTag.keyring}}:** 与名牌相同:穿过每一层的钥匙圈孔,底层在图标之外有一个末端为圆形的舌片。{{ui:nameTag.keyringDiameter}} 和 {{ui:nameTag.keyringSide}} 选择它的大小和位置;{{ui:nameTag.side.free}} 会生成独立的舌片,与名牌上一样。舌片是按图标轮廓生成的,因此对于轮廓非常参差的图标,请检查它与底板相接的位置。{{ui:nameTag.keyringAlong}} 让舌片沿所在边移动,与名牌上相同。 +- **{{ui:iconTag.count}}:** 想要多少个图标牌,1 到 100。{{ui:iconTag.fill}} 会根据设置中所选打印机的平台计算数量,小标志可以铺满一整个平台。下方的按钮会生成它们,间距 5 mm,以平台中央为中心排列;第一个就是图标牌本身。 + +SVG 需要闭合轮廓;只有开放线条的图形无法成为图标牌。填充为线条的草图实体会保留线条:线条围出的区域就是图标。 + +**图片(PNG 或 JPG)** 会被描摹成轮廓,预览中会显示该轮廓。在 {{ui:iconTag.part}} 下选择是 {{ui:iconTag.part.dark}} 还是 {{ui:iconTag.part.light}} 成为图标;初始为非背景的部分。透明像素永远不属于图标。只包含一张图片的 SVG(例如 Inkscape 保存导入的位图时)也以同样方式描摹。轮廓会跟随像素,因此小图片的边缘会比较粗糙:几百像素以上的图片效果最好。{{ui:iconTag.replace}} 会取图片中非背景的部分。 + +## 二维码 + +二维码把文字或网址变成手机摄像头可读取的图案:招牌上指向你店铺的链接、杯垫上的 Wi-Fi 名称、钥匙牌上的电话号码。 + +在形状库中选择 {{ui:shape.qrCode}}。会打开一个窗口,光标已经在文本字段中: + +- **{{ui:qrCode.text}}:** 二维码的内容。Enter 生成二维码,Shift+Enter 换行。字段下方会显示已用掉多少容量;变音符号和其他特殊字母占两个字节。文字过长时,字段会给出提示。 +- **{{ui:qrCode.errorCorrection}}:** L、M、Q 或 H。级别越高,二维码局部弄脏或刮花时仍可读取(L 约 7 %,M 15 %,Q 25 %,H 30 %),但同样的文字需要更多模块,因此每个模块会更小。初始选择 M。 +- **{{ui:qrCode.style}}:** {{ui:qrCode.style.code}} 只生成二维码本身,高 4 mm。{{ui:qrCode.style.raised}} 把它以 1 mm 的高度放在 3 mm 厚的白色底板上,作为双色捆绑体,这样多色打印会把二维码印成深色、底板印成浅色。{{ui:qrCode.style.engraved}} 把二维码刻入底板 1 mm 深。 +- **{{ui:qrCode.sizeBy}}:** 输入整个二维码的 {{ui:qrCode.sizeBy.width}}(初始为 40 mm)或单个模块的尺寸;另一个数值会显示在下方。模块小于 0.8 mm 时会给出警告。这只是针对 0.4 mm 喷嘴的经验法则,并非保证:打印机、材料、颜色和手机都会有影响。 +- **{{ui:qrCode.quietZone}}:** 扫描器需要二维码四周有一圈四个模块宽的空边。在底板上,这圈空边是底板的一部分;只有底板放在更大的浅色表面上时才可关闭。单独的二维码自身没有空边:请在其四周留出空间。 +- **高度:** 二维码的高度,或者在底板上为二维码高度或雕刻深度,以及底板厚度。 + +预览会显示二维码构建后的样子。{{ui:qrCode.ok}} 会把它放到平台中央。 + +二维码与其他实体一样:移动、旋转、缩放(保持宽度和深度相同,否则二维码会被拉伸)、分组,或者把它设为孔并与你自己的零件分组,从而在那里刻出二维码。缩放会缩放整个二维码;每个模块始终保持正方形。 + +设置顶部的 {{ui:qrCode.title}} 卡片中保存着文本。修改后点击 {{ui:qrCode.regenerate}}:二维码会在原处重新生成,宽度保持当前值。纠错级别、空边和构建方式保持原先的选择;如需其他选择,请从形状库新建二维码。 + +打印前用手机扫描一次,打印后再扫描一次。深色配浅色最易读取;深色底板上的浅色二维码并非所有手机都能读取。 + +## 弧形文字 + +文字不一定非要排成直线,也可以沿硬币、盖子或戒指的边缘排列。为此提供了 {{ui:prop.textCurved}} 设置。 + +![文字沿圆周排列。所有字母都立在同一条基线上。](shot:curved-text) + +开启后,文字会沿圆周排列。所有字母都立在同一条基线上,与普通文字一样均匀。共有四项设置: + +- **{{ui:prop.textRadius}}**(5 至 500 mm):字母基线所在圆的半径。 +- **{{ui:nameTag.letterSize}}:** 字母的高度。它不再取决于形状的宽度。 +- **{{ui:prop.textInward}}:** 把文字从圆的顶部移到圆的底部。此时字母的顶部朝向圆心。 +- **{{ui:prop.textFlipped}}:** 只把字母翻转过来,让你可以从另一侧阅读。文字在圆上的位置不变。 + +**圆心就是形状的中心。** 因此对齐照常有效:如果把文字与圆柱体或圆环居中对齐,它会正好同心。拉动手柄时,半径和字母大小一起增大,因此文字不会变形。 + +> **提示:** 在圆的顶部,字母立在基线外侧;使用 {{ui:prop.textInward}} 时它们立在基线内侧,顶部朝向圆心。要让文字正好落在圆盘上,半径加上字母大小应小于圆盘的半径。 diff --git a/docs/guide/zh-cn/09-threads-and-mechanics.md b/docs/guide/zh-cn/09-threads-and-mechanics.md new file mode 100644 index 00000000..ced12430 --- /dev/null +++ b/docs/guide/zh-cn/09-threads-and-mechanics.md @@ -0,0 +1,171 @@ +--- +title: 螺纹、齿轮和其他零件 +summary: 相互配合的螺钉、螺母与螺纹孔,以及齿轮、弹簧、弯管、燕尾、泪滴孔、沉孔和锥形沉孔。 +--- + +除了基本形状,形状库里还有一些自己拼起来会很麻烦的零件。它们之后都可以在设置中修改。 + +## 螺纹 + +在形状库中选择 {{ui:shape.thread}}。在 {{ui:inspector.threadRole}} 下决定它的类型: + +- **{{ui:thread.rod}}:** 带螺纹的圆柱体,例如没有头的螺钉。 +- **{{ui:thread.screw}}:** 带头部。你可以选择 {{ui:inspector.threadHead}}:{{ui:thread.headCylinder}}、{{ui:thread.headCountersunk}} 或 {{ui:thread.headHex}}。 +- **{{ui:thread.nut}}:** 配套的螺母。 +- **{{ui:thread.bore}}:** 螺纹孔。它属于孔。把它拖进零件,将两者分组,零件就有内螺纹。 + +![一个带圆柱头的螺钉。右侧:类型和头部形状,往下是规格、螺距和牙型。](shot:thread-screw) + +在 {{ui:prop.threadSize}} 下从列表中选择规格:公制从 M2 到 M24,英制 UNC 和 UNF 从 No. 4 到 1 英寸,以及管螺纹 G1/16 到 G4。如果选择 {{ui:thread.customSize}},就自行设置 {{ui:prop.diameter}} 和 {{ui:prop.pitch}}。对于英制或 G 规格,该字段要求填写 {{ui:prop.threadsPerInch}},而不是以毫米计的螺距。 + +列表按系列对规格分组,字段下方的一行会给出所选规格的系列,并附上日常生活中熟悉的例子: + +- **M,公制粗牙:** 符合 ISO 261 的 ISO 公制粗牙螺纹,与标准螺钉和螺母相同。 +- **UNC,美制英寸粗牙:** 相机和三脚架螺钉为 1/4"-20 UNC(ISO 1222),较大的三脚架云台使用 3/8"-16 UNC。 +- **UNF,美制英寸细牙:** 与 UNC 相同的直径,螺距更细(ASME B1.1)。 +- **G,管螺纹:** 淋浴软管用 G1/2 连接,洗衣机进水管用 G3/4。花园水龙头末端为 G3/4,较小的水龙头为 G1/2;快接软管系统的水龙头接头就拧在这里。 + +G 规格是符合 ISO 228-1 的平行惠氏管螺纹,常见于水、燃气、液压和气动接头。规格指的是管子,而不是螺纹:G1 在螺纹处测得 33.249 mm。选择 G 规格会把牙型设为 {{ui:thread.profileWhitworth}},选择公制或英制规格则设回 {{ui:thread.profileV}}。自己选定的 {{ui:thread.profileTrapezoidal}} 或 {{ui:thread.profileRound}} 牙型会保留。标准只定义螺纹,所以 G 规格的螺钉头和螺母会得到与你自行设置直径时相同的比例。锥形管螺纹 R、Rc 和 Rp 不包括在内。 + +更多设置: + +- **{{ui:prop.threadHand}}:** {{ui:thread.right}} 或 {{ui:thread.left}}。 +- **{{ui:prop.threadProfile}}:** {{ui:thread.profileV}} 是公制和英制螺纹的标准牙型,{{ui:thread.profileWhitworth}} 是 G 管螺纹的牙型:55°,牙顶和牙底为圆角。{{ui:thread.profileTrapezoidal}} 和 {{ui:thread.profileRound}} 的牙顶和牙底是平的。这种牙型通常打印更可靠,因为不会产生细薄的牙尖。 +- **{{ui:thread.profileCustom}}:** 自行塑造的梯形,带有等宽的平牙顶和平牙底。{{ui:prop.threadFlankAngle}} 是一颗牙两个牙侧之间的夹角:60° 是尖锐的 V 形螺纹,30° 是梯形螺纹;在 90° 或更小时,任何牙侧都不会比 45° 更平,因此螺纹无需支撑即可打印。{{ui:prop.threadDepth}} 和 {{ui:prop.threadCoreDiameter}} 是同一个尺寸的两种说法:芯径等于直径减去两倍深度,改动其中一个就会改变另一个。新的自定义牙型从 60° 的 V 形螺纹深度开始。深度有限制,取决于角度和螺距:不得浅于螺距的十分之一,不得深于直径的 40%,也不得深到两个牙侧占据超过十分之九的螺距。如果改变螺距,深度按比例跟随;如果缩放螺纹,深度也同样跟随。间隙和倒角的作用与其他牙型相同。通过 MCP 桥接时,牙型为 `custom`,并带 `threadFlankAngle` 和 `threadDepth`。 +- **{{ui:prop.clearance}}:** 对于螺母和螺纹孔,这是确保打印出的一对零件真能转动起来的余量。打印机越粗,这一对需要的间隙越大。它是整个直径上的额外余量,而 V 形螺纹牙侧之间的缝隙大约只有它的一半,所以打印件需要比想象中更大的值:新螺母从 0.4 mm 开始,0.3 偏紧,0.5 偏松。先打印一对测试件。螺纹杆和螺钉在这里有自己的间隙,会让螺栓的直径相应变细。它设为 0。余量加在哪一侧取决于你如何配对: + - **打印的螺钉配打印的螺母:** 螺钉保持 0,把余量给螺母(它初始的 0.4 mm)。 + - **真实螺钉配打印螺母或螺纹孔:** 打印的一侧承担全部余量,所以螺母保留 0.4 mm。如果螺钉晃动,值得试试更紧的 0.3 mm。 + - **打印的螺钉配真实螺母:** 真实螺母没有间隙,所以螺钉必须更细:这里用 0.3 到 0.4 mm,与打印螺母本来会有的量相当。 +- **{{ui:prop.axialClearance}}:** 对于螺母和螺纹孔,这是在 {{ui:prop.clearance}} 之外沿轴向的活动量。螺母的每颗牙都会变薄这么多,直径保持不变。原因在于:{{ui:prop.clearance}} 只作用于直径,把 V 形螺纹的牙侧张开到其数值的约 0.58 倍。想要牙侧之间留出空隙的人只能把直径开大,代价是左右晃动。沿轴向的活动量把两者分开。它设为 0,所以已保存的螺纹不会改变;最大可到螺距的五分之一,因为超过这个值螺母的牙就不剩什么了。该字段只对螺母和螺纹孔存在;螺纹杆和螺钉保留自己的间隙。更多内容见下文“3D 打印用的螺纹”。 +- **{{ui:prop.threadChamferTop}}、{{ui:prop.threadChamferBottom}}、{{ui:prop.headChamfer}} 和 {{ui:prop.rimChamfer}}:** 两端的倒角,让螺纹起始干净,头部没有锐边。螺纹杆、螺母或螺纹孔的每一端都有自己的倒角,所以顶端可以长、底端可以短或没有。螺钉只在尖端有一个,标为 {{ui:prop.chamfer}}。在螺母或螺纹孔上,倒角是孔口超出外径的扩张量;锥面以 45 度一直延伸到螺纹芯部,因此外径处不会留下台阶。 + +在 {{ui:thread.rod}} 和 {{ui:thread.bore}} 之间切换螺纹会保留其长度。螺母和螺钉则从各自的标准尺寸开始。 +- **{{ui:prop.quality}}:** 螺纹计算的精细程度。越高越精确,但越慢。 + +打印螺纹是另一个话题。在打印大零件之前,先做一对螺钉和螺母作为测试,并根据你的打印机调整间隙。 + +## 3D 打印用的螺纹 + +打印出的螺纹需要在两处留出空隙,它们的作用不同: + +- **直径上的间隙({{ui:prop.clearance}}):** 让螺母变宽。于是螺钉每侧有该值一半的空隙,0.4 mm 时每侧 0.2 mm。螺纹转动轻松,但螺钉会左右晃动。 +- **沿轴向的活动量({{ui:prop.axialClearance}}):** 让螺母的牙变薄。螺钉在未拧紧时可以沿轴向前后移动这个量。它不会额外增加侧向的空隙。 + +两者合起来形成牙侧之间的缝隙:约为直径间隙的 0.58 倍再加上沿轴向的活动量。以 0.3 mm 的缝隙为例:以前需要在直径上留 0.5 mm,也就是每侧 0.25 mm 的空隙。现在直径上 0.2 mm(每侧 0.1 mm)加上轴向 0.2 mm 就够了,缝隙为 0.32 mm。 + +**需要知道的后果** + +- **螺钉沿轴向有活动量。** 没有负载时,它可以前后移动这个量。对于紧固件、盖子和外壳,这无所谓;对于需要精确定位的丝杠就有影响,所以那里要留小或设为 0。 +- **螺母的牙会变薄。** 在 1.75 mm 螺距下取 0.3 mm,每颗牙在中间几乎薄了三分之一,强度明显下降。重载零件请改用更粗的螺纹。 +- **计算量更大。** 牙形会增加额外的点,所以螺纹的三角形更多,计算稍慢。 +- **惠氏牙型在 STEP 导出中没有真正的圆弧。** 带轴向活动量的 {{ui:thread.profileWhitworth}} 螺纹,在边缘工具和 STEP 导出中会变成由直线段拼成的牙形,而不是真正的圆弧。设为 0 时一切保持原样。 + +**提示** + +1. **先做一对测试件。** 一个螺钉和一个螺母,各只有 4 到 6 mm 高,几分钟就能打完。并排打印三对活动量不同的零件,挑出转动轻松且不晃动的那一对。 +2. **从常用的数值开始。** 直径间隙 0.2 到 0.3 mm,沿轴向活动量 0.2 mm。如果螺钉左右晃动,减小直径间隙;如果卡住,增大沿轴向活动量。如果不想用沿轴向活动量,就照旧在直径上取 0.4 mm。 +3. **沿轴向的活动量应至少为一个层高。** 低于一层的量打印机无法分辨。层高 0.2 mm 时,0.2 mm 是不错的起点;层高 0.1 mm 时,少一些就够。 +4. **竖直打印螺钉和螺母。** 轴线朝上,每一圈都落在完整的层里,牙侧才会干净。平放时牙侧会下垂。 +5. **细螺距很难。** 螺距低于约 1 mm 时,螺纹圈常常粘在一起。较粗的螺纹,或牙顶平的 {{ui:thread.profileTrapezoidal}} 牙型,比细 V 形螺纹打印更可靠。 +6. **避免细薄的牙尖。** V 形螺纹的牙尖很窄,打印机的喷嘴宽度几乎覆盖不到。{{ui:thread.profileTrapezoidal}} 和 {{ui:thread.profileRound}} 牙型的牙更平。 +7. **去毛刺并磨合。** 最初的几圈常常发涩,因为牙侧上残留着打印的小凸起。来回转几次就会顺畅。起始处的倒角有助于拧入。 +8. **换了打印机或耗材。** 活动量取决于打印机、材料和喷嘴。更换其中任何一个后,请重新打印测试件。 + +边缘工具会把螺纹当作精确实体。你可以在螺纹已就位的情况下,对承载它的零件倒角或圆角,也可以处理螺钉头的边缘,参见[断开边与抽壳](chapter:edges-and-hollowing)。计算螺纹的边需要一些时间:M6 几秒钟,G1/2 管螺纹约半分钟。给螺钉头断边最快的方法仍然是属性里的头部倒角。 + +## 齿轮 + +{{ui:shape.gear}} 有 {{ui:gear.spur}}、{{ui:gear.helical}}、{{ui:gear.herringbone}} 和 {{ui:gear.bevel}},还有 {{ui:gear.internal}} 和 {{ui:gear.rack}}(见下文)。新齿轮在 {{ui:prop.gearProfile}} 下为 {{ui:gear.profileInvolute}}:带有渐开线牙侧的齿,与齿轮生成器和工程中的用法一致。这样的齿能彼此平顺地滚动。你设置 {{ui:prop.teeth}} 的齿数(6 到 500)和 {{ui:prop.gearModule}},尺寸随之确定:外径为模数 ×(齿数 + 2),分度圆为模数 × 齿数。新齿轮从模数 2 开始。两个齿轮啮合的条件是模数相同、{{ui:prop.gearPressureAngle}} 相同(通常为 20°),并且中心距为(齿数 + 齿数)× 模数 / 2。同时选中两个齿轮,属性面板会给出该中心距以及当前的中心距。如果齿轮应保持在原位,它还会给出使它们在此处啮合的模数,{{ui:inspector.gearPairFitApply}} 一步即可让两个齿轮都采用该模数;每个齿轮的齿数、高度和中心孔保持不变。如果此时一齿对着另一齿而不是齿槽,就把其中一个齿轮转半个齿,即 180° 除以其齿数。{{ui:prop.gearBacklash}} 会从齿上削去一点,避免打印出的一对零件卡死。该值针对这一对齿轮,每个齿轮承担一半;0.2 mm 是不错的起点,0 则得到精确的齿轮。在基圆以下,牙侧笔直向下延伸到齿根,不像刀具加工那样有根切。这适合打印,但齿数低于约 17 的很小齿轮可能会在齿根处轻微摩擦。 + +斜齿轮增加了 {{ui:prop.helixAngle}}。使用渐开线齿时,它是分度圆上的真实螺旋角:两个斜齿轮啮合的条件是模数相同、角度相同,一个为正、一个为负。{{ui:gear.herringbone}} 是两半旋向相反的斜齿轮:齿沿一个方向延伸到一半高度,然后反向回来,像箭头一样。这对 3D 打印有两个好处:齿轮会在轴上自行对中,而且没有轴向推力,因为两半的力相互抵消。相比之下,斜齿轮会沿其轴线向侧面推。你像设置斜齿轮那样设置 {{ui:prop.helixAngle}} 和 {{ui:prop.helixQuality}};角度对每一半都适用。两个人字齿轮啮合的条件是模数相同、角度相同且符号相反,一个为正、一个为负。中间没有铣削人字齿轮那样的退刀槽:两半无台阶地相接。边缘工具和 STEP 导出把人字齿轮当作三角形网格,而不是精确实体。 + +锥齿轮采用渐开线齿,并让齿向顶部逐渐变小。这是一种近似,不是精确计算出的锥齿轮副。 + +{{ui:gear.profileRound}} 是由圆弧构成的圆形齿,类似 Tinkercad 的 Useful gear:齿顶与齿槽无棱角地相接。小齿轮这样打印更宽容,转动也更轻松,在旋钮上齿还能带来舒适的握感。圆齿同样由 {{ui:prop.teeth}}、{{ui:prop.gearModule}} 和 {{ui:prop.gearBacklash}} 设定;它们没有压力角。它们比渐开线齿矮,所以外径为模数 ×(齿数 + 1.2)。相同模数的圆齿齿轮可以啮合,中心距与渐开线齿轮相同;与渐开线齿轮则配不上。 + +{{ui:gear.profileSimple}} 是目前所有齿轮都用的直齿。在那里手动设置 {{ui:prop.toothSize}} 和 {{ui:prop.toothWidth}}。旧设计会一直保留它们,直到你更改齿形。三种齿形都有 {{ui:prop.centerHole}}。 + +{{ui:gear.internal}} 的齿朝内:一个较小的齿轮在其中运行的外齿圈,就像行星齿轮组的外轮。它像渐开线或圆齿齿轮那样通过 {{ui:prop.teeth}}、{{ui:prop.gearModule}} 和 {{ui:prop.gearBacklash}} 设置,另外还有 {{ui:prop.gearRim}},即齿外侧的轮缘。其外径为模数 ×(齿数 + 2.5)加上两倍轮缘;圆齿则为模数 ×(齿数 + 1.7)。相同模数的齿轮在其中运行的条件是,其中心距齿圈中心(齿圈齿数 − 其齿数)× 模数 / 2;同时选中两者,属性面板会给出该距离。对于行星齿轮组,齿圈齿数 = 太阳轮齿数 + 2 × 行星轮齿数,例如 30 = 12 + 2 × 9。齿圈没有中心孔,它本身就是环。齿数在 26 到 33 之间时,其齿顶最多短四分之一个模数,因为否则会在基圆处形成极小的棱边;啮合不受影响。 + +{{ui:gear.rack}} 是半径无穷大的齿轮:一根沿一侧带齿的条,使用渐开线齿时牙侧是压力角下的直线。其宽度(沿 X)为齿数 × 齿距,齿距为 π × 模数,所以同一模数的齿条可以首尾相接,每一端都落在齿槽里。其长度(沿 Y)是条的厚度,可自由设置,只要齿和半毫米的条能放得下。齿朝前,即朝向主视图的观察者;根据需要转动齿条。相同模数的齿轮在其上滚动的条件是,其中心位于节线前方齿数 × 模数 / 2 处;节线在齿顶后方一个模数处,圆齿则为 0.6 个模数。齿圈和齿条有渐开线和圆齿两种,没有简单齿;切换齿轮类型会保留模数。 + +边缘工具和 STEP 导出把每个齿轮当作其精确实体,渐开线牙侧是平滑曲线。椭圆形轮廓上的斜齿轮仍是三角形网格,从约 31 齿起的渐开线斜齿轮也是如此。小齿限制了边能圆角到什么程度:对于简单齿的齿轮,直径 30 mm、12 齿时,两齿之间齿根处的平面只有约 0.65 mm 宽,所以给每条边倒圆最多到约 0.5 mm;锥齿轮顶部更小,最多约 0.4 mm。斜齿轮的齿是倾斜的,这会在其斜边上收窄那个平面:螺旋角相对于齿轮高度越大,能容纳的圆角越小。两个平端面的边可以倒圆,但只给这些边倒角会在 CAD 内核中失败;请改为倒圆,或以更小的尺寸(例如 0.2 mm)给所有边一起倒角。 + +## 弹簧 + +{{ui:shape.spring}} 有 {{ui:prop.turns}} 和 {{ui:prop.wire}}。它们与高度一起决定弹簧的软硬。{{ui:prop.springHand}} 决定线材的走向:{{ui:spring.right}} 像常见的压簧,或 {{ui:spring.left}}。 + +边缘工具和 STEP 导出把弹簧当作其精确实体:沿螺旋线的圆线材,两端切平。例如,你可以给这两个线材端头倒圆或倒角。 + +## 弯管 + +一个 {{ui:shape.bentTube}} 最多由十二段组成:一段直管,接着一个弯。每一段你设置 {{ui:prop.bentTubeSegmentLength}}、{{ui:prop.bentTubeBendAngle}}、{{ui:prop.bentTubeBendRadius}} 和 {{ui:prop.bentTubeRoll}}。正在编辑的段会在管上以橙色高亮,方便你跟上顺序。滚转角为 0° 时在工作平面内弯曲,90° 时管子向上弯。轮廓可以是圆形、方形、六边形或八边形,内部同样如此,也可以完全实心。如果管子撞到自己,layerling 会提醒你。 + +## 放样 + +{{ui:shape.loft}} 把底部的一个轮廓与顶部另一个轮廓连接起来,就像 Fusion 里的放样:从一种直径到另一种直径的软管接头、把方形风扇接到圆管上、向上逐渐变圆的支架。每一端你选择 {{ui:prop.loftBottomOutline}} 和 {{ui:prop.loftTopOutline}}:{{ui:loft.round}}、带 {{ui:prop.loftBottomCorner}} 的 {{ui:loft.rectangle}},或带角数的 {{ui:loft.polygon}},再加上每一端的宽度、长度和高度。{{ui:prop.loftOffsetX}} 和 {{ui:prop.loftOffsetZ}} 把顶端向侧面移动,形成倾斜过渡;底端保持在原处。 + +{{ui:prop.loftWall}} 把实体变成上下开口的管。两端开口的横向尺寸都比外形小一个壁厚;壁倾斜处会略薄一些。把框架拖大,两端也随之扩大,而圆角半径和壁厚保持不变。 + +{{ui:prop.loftSmooth}} 让过渡变得平滑。为 0 时,侧面从底部到顶部笔直延伸,像圆锥一样。为 100 时,两侧从两端笔直出发,在中间沿 S 曲线改变尺寸:软管接头从窄管平滑地扩到宽管,而不是像漏斗那样直斜。中间的数值在两者之间混合。平滑过渡可与 {{ui:prop.loftWall}}、扭转、倾斜和侧向偏移一起使用;带壁的管两端仍保持开口。它和直边放样一样是精确实体,所以其边可以倒角和倒圆,但它由多个截面构成,计算会稍慢。 + +{{ui:prop.loftTwist}} 在上升过程中让截面绕竖直轴均匀旋转,任一方向最多 360°;侧面于是盘旋而上。{{ui:prop.loftTiltX}} 和 {{ui:prop.loftTiltZ}} 让顶端倾斜,最多 45°:正值会抬高其前缘或右侧。中间的截面按各自份额倾斜,所以壁面平滑地过渡到斜面上。最高点保持在设定高度。如果之后高度变得太小,使倾斜端会伸到平台以下,倾斜会退让到刚好放得下。沿路径弯曲(例如管道弯头)不是放样能做的。 + +放样是精确实体,扭转和倾斜后也是:其边可以倒角和倒圆,STEP 导出会保留它。照常添加带螺钉孔的法兰,然后分组。 + +## Gridfinity + +{{ui:shape.gridfinity}} 形状用来制作 Zack Freedman 的开放式收纳系统的零件:42 mm 网格上的收纳盒,放在底板里,并且可以彼此堆叠。尺寸遵循已发布的 Gridfinity 规范,所以 layerling 做的收纳盒能装进其他生成器做的底板,反之亦然。在 {{ui:prop.gridfinityType}} 下选择: + +- **{{ui:gridfinity.bin}}:** 每个网格单元下方都有支脚的收纳盒。{{ui:prop.gridfinityUnitsX}} 和 {{ui:prop.gridfinityUnitsZ}} 按 42 mm 的网格单元计数(收纳盒小 0.5 mm,一个单元为 41.5 mm);{{ui:prop.gridfinityUnitsY}} 按 7 mm 的高度单元计数,最多 20。壁顶的 {{ui:prop.gridfinityLip}} 托住下一个收纳盒的支脚,并使收纳盒增高 4.4 mm:3 单元带卡边的收纳盒高 25.4 mm。启用 {{ui:prop.gridfinityMagnets}} 后,每个支脚的每个角都会得到一个用于 6 × 2 mm 磁铁的孔。 +- **{{ui:gridfinity.baseplate}}:** 收纳盒所站的底板,高 5 mm,每个网格单元有一个插槽。它是没有底面、没有磁铁孔的开放框架。 + +尺寸始终是整数网格单元(或下文半尺寸网格的 21 mm 单元),最大 6 × 6(252 mm,适合 256 mm 的打印床);拖动手柄会吸附到最近的单元。壁厚(0.95 mm)、底面(1.2 mm)和磁铁孔深度(2.4 mm)不在规范中;壁厚和孔深固定,底面可以抬高(见下文)。规范中的 M3 螺钉孔不会做出。卡边顶部是尖的,与规范画法一致;如果你的打印机打出来有毛边,用边缘工具倒圆或倒角。收纳盒和底板是精确实体,所以圆角、倒角和 STEP 导出都能用。要给收纳盒分格,把薄长方体作为隔墙分组进去:让它们立在底面上,即高 5.95 mm 处(或抬高的底面上),对于带卡边的收纳盒,顶部至少保持在每个高度单元 7 mm 下方 0.5 mm 处,从收纳盒底面量起(3 单元为 20.5 mm),因为下一个收纳盒的支脚会向下伸入收纳盒 0.35 mm。打印收纳盒和底板时无需支撑,按它们在打印床上的姿态直立打印。 + +收纳盒也可以做在半尺寸网格上:开启 {{ui:prop.gridfinityHalfGrid}},此时 {{ui:prop.gridfinityUnitsX}} 和 {{ui:prop.gridfinityUnitsZ}} 按 21 mm 的单元计数,最多 12(与 6 单元相同的 251.5 mm)。每个单元都有自己的支脚,顶部宽 20.5 mm,带有规范中的台阶,四个这样的支脚站在普通底板的一个插槽里,所以 1½ 或 2½ 单元的收纳盒能与整数单元的并排使用。开启 {{ui:prop.gridfinityHalfGrid}} 时收纳盒保持其轮廓(2 单元变成 4 个单元);关闭时,奇数个单元会向上取整为整数单元。卡边照旧跟随收纳盒的轮廓。启用 {{ui:prop.gridfinityMagnets}} 后,每个支脚得到一个孔,从其中点向位于 42 mm 网格上的那个单元角偏移两个方向各 2.5 mm,从收纳盒左后角算起:当该角位于网格的一个角上时,这些孔会与其他生成器做的带磁铁底板的孔对齐;奇数单元的收纳盒还可以转 180°,让这个角位于右前方的网格角上。底板仍保持 42 mm 网格。半尺寸网格不属于规范。 + +高度为 3 个单元或以上的收纳盒可以沿内壁设置标签台:以任意组合开启 {{ui:prop.gridfinityLabelBack}}、{{ui:prop.gridfinityLabelFront}}、{{ui:prop.gridfinityLabelLeft}} 或 {{ui:prop.gridfinityLabelRight}}。每个开启的标签台都有自己的 {{ui:prop.gridfinityLabelWidth}}、{{ui:prop.gridfinityLabelLength}},较短的标签台还有 {{ui:prop.gridfinityLabelOffset}};它们下方的拐角设置适用于所有标签台。标签台顶部平整,可贴标签,前部有 1.2 mm 的下垂条,底面以 36 度上升。其顶部位于每个高度单元 7 mm 下方 0.85 mm 处,从收纳盒底面量起(3 单元为 20.15 mm),所以堆叠在卡边上的收纳盒支脚与其保持 0.5 mm 的间隙。低于 3 单元的收纳盒不显示标签台;回到 3 单元时它们会恢复。标签台不属于规范。 + +{{ui:prop.gridfinityLabelWidth}} 是标签台伸入收纳盒的深度:14 mm,3 单元的收纳盒中最多 17.2 mm(抬高底面时更少),在 1 单元深、2 mm 拐角的收纳盒中两个相对的标签台为 16.8 mm。{{ui:prop.gridfinityLabelLength}} 为 0 时,标签台从一面墙延伸到另一面墙。较短的标签台(至少 10 mm)会显示 {{ui:prop.gridfinityLabelOffset}},把它从所在墙的中间移开:在主视图所示的后墙和前墙上向右移,在侧墙上向前移。如果一端距墙在 1 mm 以内(带堆叠卡边时为 1.8 mm,因为卡边的支撑在那里向内倾斜),或者停在该墙的标签台上,就会继续延伸进去,两个在拐角相遇的标签台会合为一个。当标签台与墙或另一个标签台相接且有余地时,拐角会倒圆或倒角:在 {{ui:prop.gridfinityLabelCorner}} 下选择 {{ui:gridfinity.labelRound}} 或 {{ui:gridfinity.labelChamfer}},并用 {{ui:prop.gridfinityLabelCornerSize}} 设置尺寸(2 mm;0 保持尖锐)。选择 {{ui:gridfinity.labelRound}} 时,较短标签台自由端的前角也会倒圆,尺寸相同,但最多为标签台宽度的一半。 + +收纳盒还可以沿任意内壁设置取物口,让细小零件能沿曲面被推出,而不必在底面与墙相接处抠出来:以任意组合开启 {{ui:prop.gridfinityScoopBack}}、{{ui:prop.gridfinityScoopFront}}、{{ui:prop.gridfinityScoopLeft}} 或 {{ui:prop.gridfinityScoopRight}}。底面沿四分之一圆升入墙内,从一面墙延伸到另一面墙,相邻墙上的两个取物口在拐角处相接。带取物口的收纳盒,其每条底面边也会按 2.8 mm(内角半径)倒圆,取物口就是所在墙上这处圆角的放大。一旦开启取物口,开关下方会出现 {{ui:prop.gridfinityScoopRadius}},并作用于所有取物口:在你设置之前,它是从底面到卡边支撑离开墙面处这段高度的一半,即每个高度单元 7 mm 下方 1.65 mm 处,从收纳盒底面量起(带卡边的 3 单元收纳盒为 6.7 mm,抬高底面时更少);没有卡边的收纳盒则一直到顶部。它至少为 3.5 mm,并至少比该高度小 0.5 mm,在收纳盒横向至少留下 2 mm 的底面,无论是两个相对的取物口之间,还是取物口与其对面的墙之间。1 单元高的收纳盒没有空间做取物口,也不显示相关开关;到 2 单元时会恢复。取物口同样不属于规范。 + +收纳盒还可以有抬高的底面,作为可切出形状的实心坯料:{{ui:prop.gridfinityFloorHeight}} 设置底面的高度,从收纳盒底面量起(在你设置之前为 5.95 mm,即支脚上的 1.2 mm 底面),收纳盒到该高度为止都是实心。带卡边时,它最多升到卡边支撑离开墙面处,即每个高度单元 7 mm 下方 1.65 mm(3 单元为 19.35 mm),这样卡边保持完整,堆叠其上的收纳盒支脚保持 1.3 mm 的间隙;没有卡边时,它可升到顶部,收纳盒成为一个实心块。把工具形状的孔分组进去,深度随你需要。取物口从抬高的底面开始,标签台伸入收纳盒的深度会减小,使其底面仍止于底面之上;一旦底面让它们没有空间,相关开关就会消失(带卡边的 3 单元收纳盒中,取物口在高于 15.35 mm 时消失,标签台在高于 15.54 mm 时消失),降低底面后又会恢复。带卡边的 1 单元高收纳盒没有空间抬高底面,也不显示该字段。抬高底面同样不属于规范。 + +收纳盒还可以分成隔间,而无需把隔墙分组进去:在 {{ui:inspector.gridfinityCompartments}} 下,就在 {{ui:inspector.properties}} 下方,{{ui:prop.gridfinityCompartmentsX}} 和 {{ui:prop.gridfinityCompartmentsZ}} 设置数量,每个方向每个网格单元最多 4 个(半尺寸网格的每个单元 2 个),总共最多 40 个。隔板贯穿整个高度,从底面(或抬高的底面)一直到每个高度单元 7 mm 下方 0.85 mm 处,标签台也止于那里,所以堆叠在卡边上的收纳盒照常安放。隔板要求收纳盒至少有 2 个高度单元,且底面至少低于其顶部 3 mm;空间不足时收纳盒会在没有隔板的情况下构建,等又有空间时它们会恢复。{{ui:prop.gridfinityDividerThickness}} 在设置前为 1.2 mm,范围为 0.8 到 3 mm。隔板初始均匀分布。要移动某一块,在 {{ui:prop.gridfinityDividerAcross}} 或 {{ui:prop.gridfinityDividerDeep}} 下选择它(从左或从后计数),并设置其 {{ui:prop.gridfinityDividerPosition}},从左墙或后墙内侧量到隔板中间;每个隔间至少保持 6 mm 宽。一旦移动过隔板,调整收纳盒尺寸时,该方向的隔板会以毫米为单位保持位置;重新设置隔间数量会让该方向的隔板再次均匀分布。每个隔间都有收纳盒的内角,按 2.8 mm 倒圆,其底面边也按 2.8 mm 倒圆,无论有没有取物口。取物口会在每个隔间重复:后墙上有取物口时,每个隔间的后侧都有一个,靠着墙或隔板。在狭窄的隔间里,半径会减小,以保留 2 mm 的平整底面;如果隔间窄到连 3.5 mm 都放不下,该方向的取物口就会消失;{{ui:prop.gridfinityScoopRadius}} 下方的提示会说明。隔板同样不属于规范。 + +带隔板的收纳盒可以在每个隔间里设置标签台,而不是沿墙的标签台:沿墙的标签台是给没有隔间的收纳盒用的,当收纳盒重新变成一个隔间时,它们的开关会恢复。在高度为 3 个单元或以上的收纳盒中,用 {{ui:prop.gridfinityCompartmentRow}} 和 {{ui:prop.gridfinityCompartmentColumn}} 选择一个隔间(各自在多于一个时显示),并在 {{ui:prop.gridfinityCompartmentLabel}} 下选择其标签台所靠的一侧,即收纳盒的墙或某块隔板;只有当该侧的标签台仍能让隔间保持开口时,才会提供这一侧。{{ui:prop.gridfinityCompartmentLabelLength}} 的范围是 10 到 100;如果标签台会短于 4 mm,就不做,并在其下方提示说明。较短的标签台会显示 {{ui:prop.gridfinityLabelOffset}}:在后侧或前侧时为 {{ui:gridfinity.alignLeft}}、{{ui:gridfinity.alignMiddle}} 或 {{ui:gridfinity.alignRight}},在左侧或右侧时为 {{ui:gridfinity.alignBack}}、{{ui:gridfinity.alignMiddle}} 或 {{ui:gridfinity.alignFront}}。{{ui:prop.gridfinityLabelWidth}} 在设置前为 14 mm,在狭窄隔间中更小,而且标签台绝不会伸到把隔间封死:其前方至少保持 6 mm 开口。这些标签台的剖面与沿墙的标签台相同,{{ui:inspector.properties}} 下的 {{ui:prop.gridfinityLabelCorner}} 和 {{ui:prop.gridfinityLabelCornerSize}} 也适用于它们。 + +## 铰链 + +{{ui:shape.hinge}} 一次打印成型,之后可以活动(打印即组装):两片叶片平摊在平台上,中间沿一根轴交替排列铰链节。销属于后片,并带间隙穿过前片的铰链节。你设置 {{ui:prop.hingeLength}}、{{ui:prop.hingeOpenWidth}} 和 {{ui:prop.hingeKnuckleDiameter}},还有 {{ui:prop.hingeKnuckles}} 的数量(奇数,这样销两端都被固定)、{{ui:prop.hingePinDiameter}} 和 {{ui:prop.hingeLeafThickness}}。 + +{{ui:prop.hingeClearance}} 是活动部件之间的间隙:销周围、铰链节之间以及叶片前方。0.4 mm 时,调校良好的打印机通常轻轻一扭就能松开;如果部件粘在一起,就加大;如果晃得太厉害,就减小。按平台上的姿态平放打印铰链,不要支撑。如果你更想用自己的销,例如一段耗材或铁丝,在小铰链上它比打印的销更光滑,就开启 {{ui:prop.hingePinless}}:打印的销被略去,孔径等于销直径加间隙,贯穿每个铰链节,包括两端。用 {{ui:prop.hingeAngle}} 你让第二片绕销折起,把铰链摆成设计中的姿态:0° 平躺如打印时,180° 为闭合。铰链节保持原位,铰链仍是一体;在就地打印前记得设回 0°。你可以给叶片加孔,或把它们分组进更大的零件,例如盖子。 + +## 滚花 + +{{ui:shape.knurl}} 是布满四周沟槽的圆形握持面,用于旋钮、拨轮和工具手柄。在 {{ui:prop.knurlPattern}} 下选择 {{ui:knurl.straight}}(沿轴线的沟槽,像控制旋钮)、{{ui:knurl.diamond}}(两排斜向沟槽交叉成小菱形),或 {{ui:knurl.round}}(沿轴线的沟槽和凸脊形成柔和的圆弧波纹,握感舒适而没有锐利的棱)。圆形沟槽保持浅于半个齿距,否则凸脊会在根部鼓起;深度过大会自动退让。你设置 {{ui:prop.diameter}} 和 {{ui:prop.height}}、{{ui:prop.knurlCount}} 的数量和 {{ui:prop.knurlDepth}};交叉滚花还要设置相对轴线的 {{ui:prop.knurlAngle}}。{{ui:prop.knurlChamfer}} 以 45 度断开两端,像车削的旋钮;0 则保持尖锐。 + +直纹和圆形滚花是精确实体,所以其边可以断开和倒圆。交叉滚花仍是网格,因为作为精确实体,30 条沟槽要计算将近一分钟。要给轴上的旋钮用,把滚花与一个孔分组,例如设为螺纹孔的 {{ui:shape.thread}}。浅于 0.4 mm 的沟槽几乎没有打印机能够干净地打出,而且 layerling 不会让它们沿握持面间隔小于 0.8 mm:细的握持面得到的沟槽更少。 + +## 燕尾 + +{{ui:shape.dovetail}} 是一种两个零件相互锁住、只能从侧面滑入的接头。你设置宽端的宽度、{{ui:prop.dovetailNeckWidth}} 以及燕尾的长度。为另一侧复制燕尾,并把副本设为孔:{{ui:prop.dovetailClearance}} 随后提供一点间隙,使接头打印后不会卡死。 + +> **提示:** 分组时,螺纹孔会切入与其重叠的零件。所以把它稍微放入材料中,而不是只接触表面。 + +## 泪滴孔 + +侧放的孔打印时顶部会形成一段桥,桥会下垂。因此 {{ui:shape.teardrop}} 顶部有一个尖角:每一层都落在下一层上,孔无需支撑就能打得足够圆。把 {{ui:prop.teardropDiameter}} 设为孔的尺寸,M3 螺钉约为 3.4 mm,并让 {{ui:prop.teardropLength}} 足够长,以穿透零件。{{ui:prop.teardropTipAngle}} 为 90°,所以牙侧在 45° 相接。大多数打印机都能干净地处理;更平的尖端需要更多高度,更陡的尖端则更省高度。 + +把泪滴孔设为孔,并与零件分组。其长度沿深度方向,尖端朝上。要在另一个方向开孔,就让它绕竖直轴旋转 90°。 + +侧放的**螺纹孔**同样会在顶部下垂。给它配一个自己的泪滴孔:添加一个 {{ui:shape.teardrop}} 孔,其 {{ui:prop.teardropDiameter}} 为螺纹芯部,即齿让出的直径(M10 约为 8.4 mm),长度与螺纹孔相同,然后同时选中两者。点击 {{ui:editor.tool.align}},让它们在中间对齐——泪滴孔的中心是其圆部的中心,而不是带尖端的外框中心,所以两个圆彼此重合——再把两者与零件分组。螺纹照常切出,尖端打开孔的顶部,因此无需支撑即可打印。 + +## 沉孔与锥形沉孔 + +螺钉头常常不应该凸出。{{ui:shape.counterbore}} 为内六角螺钉(DIN 912)切出圆形的沉孔,{{ui:shape.countersink}} 为沉头螺钉(DIN 7991)切出锥形沉孔。两者都以头部一端朝上:{{ui:prop.screwHoleHead}} 是沉孔或锥面的直径,{{ui:prop.screwHoleShaft}} 是其下方的孔,{{ui:prop.screwHoleLength}} 是总长度。沉孔上你设置 {{ui:prop.screwHoleHeadDepth}},锥形沉孔上设置 {{ui:prop.screwHoleAngle}}(90° 适合沉头螺钉)。默认值适合 M3 螺钉。 + +{{ui:shape.doubleCountersink}} 是两面都倒角的孔,用于正面和背面都要整洁的板件。它在形状库里没有单独的条目:取用 {{ui:shape.countersink}},并在其属性中开启 {{ui:prop.screwHoleBothSides}}(本身就是双面锥形沉孔的实体已显示该开关开启):两端各有一个锥面张开到 {{ui:prop.screwHoleHead}},中间是 {{ui:prop.screwHoleShaft}}。你照旧设置 {{ui:prop.screwHoleAngle}} 和 {{ui:prop.screwHoleLength}}。如果孔太短,容不下两个完整的锥面,它们会以该角度在中间相接,杆部会比你设置的更宽:10 mm 的头部、6 mm 的杆部、90° 和 2 mm 的长度会形成两个从 10 mm 收窄到 8 mm 的锥面。作为孔,它像其他孔一样被推穿零件。 + +把形状设为孔,并与零件分组。让它的顶端略高于头部应贴合的表面,使沉孔开口干净。要给六角螺母做沉孔,就用六边的 {{ui:shape.polygon}} 作为孔。 diff --git a/docs/guide/zh-cn/10-measuring-and-notes.md b/docs/guide/zh-cn/10-measuring-and-notes.md new file mode 100644 index 00000000..e255cdce --- /dev/null +++ b/docs/guide/zh-cn/10-measuring-and-notes.md @@ -0,0 +1,79 @@ +--- +title: 测量与备注 +summary: 卷尺、标尺与角尺,到原点的距离,附着在零件上的备注,以及可供吸附的参考点。 +--- + +要精确地做出一个零件,就必须测量。layerling 为此提供了几种工具,它们都不会出现在导出文件里。零件内部的壁厚和间隙,最好在[剖视图](chapter:view-and-workplane)中用 {{ui:camera.sectionMeasure}} 测量。 + +## 卷尺 + +卷尺位于左边缘相机栏的下端({{ui:camera.tapeTools}})。它测量角、边和面之间的距离。单击它会展开五个按钮。如果它们挡住了你想测量的地方,就抓住左侧的握柄,把它们拖到工作平面上的任意位置;双击握柄即可归位: + +![卷尺及其按钮:添加测量、移动测量点、删除测量、整条边、删除全部测量。](shot:tape-menu) + +1. **{{ui:camera.addMeasurement}}:** 单击一个点,拖到下一个点再单击,距离就会标注出来。在相对的边或面上,当指针靠近时,第二个点会以直角吸附到第一个点——或者按住 [[Shift]] 时,可落在该边或该面上的任意位置。在同一面内或工作平面上,[[Shift]] 会让测量沿主轴保持笔直。 +2. **{{ui:camera.moveMeasurement}}:** 抓住这些点移动,数字会跟着变化。 +3. **{{ui:camera.deleteMeasurement}}:** 之后单击某条测量即可删除它。**{{ui:camera.addMeasurement}}** 处于激活状态时,按住 [[Shift]] 或 [[Ctrl]](Mac 上为 [[Cmd]])单击测量点或测量线,就能直接删除,无需切换模式。 +4. **{{ui:camera.tapeWholeEdges}}:** 单击一条边会测量它的全长,例如一个圆的周长。关闭此项后,单击会在边上放置一个点,第二个点可以放到任意位置,于是你能测量直径或任何其他距离。按住 [[Alt]] 可让该开关对这一次单击取反。在圆上,当指针靠近时,与第一个点相对的点会自动吸附,而且点落在真实圆周上,因此直径是精确的。 +5. **{{ui:camera.deleteAllMeasurements}}:** 一次删除所有测量。由于无法撤销,layerling 会先询问;没有测量时则无事可做。 +6. **{{ui:camera.tapeMarkMiddle}}:** 每条测量的数字下方都有一个小十字准线按钮。它会在测量的正中放置一个[参考点](#reference-points):单击圆形边(例如孔的边缘)后,放在该圆的圆心——导入的网格也一样,那里没有别的东西标出孔心——对于直径或任何直线测量,则放在其中点。之后拖动形状时,它会以自身中心吸附到该点。已经存在的点不会重复创建。卷尺吸附参考点就像吸附角一样,因此你可以从圆心或线段中点开始测量:先标记,再单击该点。 + +按 [[Esc]] 退出测量模式。 + +## 标尺 + +从形状库中取出{{ui:shape.ruler}}。它纯粹是测量工具:不会出现在任何导出中,也不能分组或剪切。对于每个接触或与标尺重叠的实体,它会在视图中直接以浮动数字显示其范围。你可以就地修改该数字,实体随之改变。浮动的加号会创建被测形状的副本。它印制的刻度是毫米;把单位切换为英寸后(右下角的开关),刻度就是英寸,每十六分之一英寸一条线,整英寸处标有数字。 + +## 角尺 + +有时在直角方向测量更方便。单击相机栏中的 {{ui:camera.cornerRulerTool}},再单击工作平面。一把两臂成直角、带类似直角尺刻度线的角尺便会放置在那里。它同样没有自己的实体。单击实体角附近,它的角就会精确吸附到那里。 + +角尺平放在工作平面上。如果该平面位于某个实体的侧面上,角尺也平放在那个侧面上,参见[视图与工作平面](chapter:view-and-workplane)。在竖直墙面上标注尺寸就是这么做的:把工作平面放到墙上,将角尺放在左上角,然后连续单击握柄,直到两臂指向右和下。 + +- **拖动握柄**可移动它。 +- **短促地单击握柄**使它旋转 90°。 +- **旁边的 ×** 可移除它。 +- **握柄左侧的小按钮**切换测量基准:实体的外侧(端点,带线条的图标)或它的中间(中点,十字准线)。每个绿色数字旁边都有一个同类小开关,只设置该数字:对竖立的圆柱体,两臂方向取中间、高度取底部;对横躺的圆柱体,横向取中间、沿轴向取一端。当三者再次一致时,握柄处的按钮会显示这个共同的模式。 + +如果实体位于某条臂上,角尺会自动显示它们的尺寸。这只在基板上有效,在实体侧面上无效。 + +选中一个实体后,角尺会用绿色显示它距角点的远近,包括沿两条臂的方向和高度。单击绿色数字输入距离,实体就会精确移到那里。选中多个实体时,它们被当作一个整体:标尺测量它们共同的外轮廓,输入数值会让它们一起移动,而彼此的相对位置不变。 + +绿色数字的引导线沿地面(即角尺所在的平面)延伸到实体下方或旁边的点;高度则有自己的箭头。每个数字的开关位于数字的边框内。两臂和刻度是空间中的线条:挡在它们前面的实体会遮住它们,就像真实的角尺会被遮住一样。握柄下方的眼睛图标可切换这一点:眼睛带斜线时,实体遮挡角尺(初始状态);眼睛打开时,角尺始终显示在所有东西之上。当实体挡在两臂前面时,臂上的数字会淡出。 + +使用中点模式时,绿色数字量到实体的中间,高度也一样。这样你可以把球体的中心正好放在距某条边 15 mm 的位置,而不用减去半径。在墙面上把孔放在距左边 40 mm、距顶部 190 mm 处,可以这样做:选中孔,切换到中点,输入 40 和 190。此时高度从墙面起向外计算。 + +卷尺和角尺在你进入草图再回到 3D 视图的过程中都会留在原处。它们不随设计保存,也不进入历史记录,重新加载页面后就会消失。 + +## 到原点的距离与移动时的距离 + +在设置中的 {{ui:workspace.appearance}} 下,有两个用于实时尺寸的开关: + +- {{ui:workspace.showMoveDimensions}} 显示拖动时移动了多少。 +- {{ui:workspace.showOriginDimensions}} 显示所选对象到平台原点的距离,选中多个实体时同样有效。 + +启用 {{ui:workspace.dimensionsAlwaysVisible}} 后,尺寸会一直可见。 + +## 备注 + +备注记录几何本身说不出来的事:“这颗螺钉紧了 0.3 mm”“盖子还要打印”“尺寸来自 Peter”。用 {{ui:editor.tool.note}} 或按 [[N]] 键放置一条。 + +- 如果把备注放在**实体上**,它会跟着实体移动。 +- 如果放在**旁边**,它会留在工作平面上({{ui:note.free}})。 +- {{ui:note.detach}} 会把附着的备注从实体上解下。 +- {{ui:editor.tool.group}} 会把附着的备注收进分组;{{ui:editor.tool.ungroup}} 会把它交给下面可见的部件,包括其中的分组。用 {{ui:group.edit}} 打开分组时,备注随其下方部件移动,再用 {{ui:group.done}} 回到分组中;取消则恢复原样。 +- 如果它依附的实体被删除,或者它下方不再有可见实体,备注会留在原处,即工作平面上。 +- 拖动图钉可移动备注。单击图钉会把卡片收起,只留下那个小数字;再单击一次可重新展开。单击文字即可编辑。 +- 书写时,[[Enter]] 保存文字,[[Esc]] 恢复到你开始之前的样子;[[Shift]]+[[Enter]] 换行。 + +备注会保存在设计中,不出现在任何导出里,可用 {{ui:visibility.notes}} 显示或隐藏(位于 {{ui:editor.visibilityOptions}} 中,眼睛图标旁的箭头)。 + +## 参考点 + +参考点是空间中的一个纯标记,就像车间里的铅笔记号或放样点:它不属于任何实体,永远不会被打印,其他东西会吸附到它上面。右键单击实体,选择 {{ui:contextMenu.markCenter}}、{{ui:contextMenu.markCorners}} 或 {{ui:contextMenu.markMidpoints}}:点会出现在实体的顶面上(如果选中了多个,则出现在整个选择的顶面上)。 + +- 拖动点可移动它,或单击它查看坐标并输入新坐标;坐标使用你设定的单位。如果卡片挡住了东西,可以抓住它的标题单独拖开:其他卡片留在原处,双击标题即可归位。你最后碰过的卡片显示在其他卡片前面。卡片中的 **Delete all**,或右键菜单(实体的,或 3D 视图中空白处的)中的 **Delete all reference points**,会一次删除所有点。{{ui:common.delete}} 删除它。 +- 卷尺也能标记点:{{ui:camera.tapeMarkMiddle}},即测量下方的十字准线按钮,会在测量中间放置一个点,例如圆孔的中心。它也能从一个点开始测量:卷尺吸附参考点就像吸附角一样。 +- 拖动形状时,它的边和中心会吸附到点,就像吸附到其他形状一样({{ui:workspace.objectSnap}})。角尺也会吸附到点。 +- 点保存在设计中,不出现在任何导出里,并随备注一起由 {{ui:visibility.notes}} 显示或隐藏。 +- AI 可以用 `layerling_add_reference_points`、`layerling_list_reference_points` 和 `layerling_remove_reference_points` 标记、列出和移除它们。 diff --git a/docs/guide/zh-cn/11-printing.md b/docs/guide/zh-cn/11-printing.md new file mode 100644 index 00000000..417e9a9f --- /dev/null +++ b/docs/guide/zh-cn/11-printing.md @@ -0,0 +1,57 @@ +--- +title: 为 3D 打印做准备 +summary: 选择自己的打印机,在部件放不下时收到警告,并正确摆放部件。 +--- + +## 选择打印机 + +打开设置(功能区里的齿轮图标,{{ui:editor.workspaceSettings}}),切换到 {{ui:workspace.workplane}} 区域。在 {{ui:workspace.printer}} 下,可以从 220 多种常见型号的列表中选择自己的打印机,包括 Bambu Lab、Prusa、Creality、Anycubic、Elegoo 等众多品牌。 + +![已选择打印机的工作平面设置。打印床尺寸和最大打印高度来自切片软件配置。](shot:settings-workplane) + +会有三件事发生: + +- 工作平面采用打印床的尺寸。 +- 工作平面的角落会显示打印机名称及其构建体积。如果这些文字碍事,可以用 {{ui:workspace.showPlateLabels}} 将其关闭,该开关在 {{ui:workspace.workplane}} 下;位于左前方的设计名称也一样。 +- 部件放不下时,layerling 会**警告**。 + +打印机配置来自 OrcaSlicer,因此与你的切片软件所知的完全相同。如果不想使用打印机,选择 {{ui:workspace.printerNone}}。也可以手动设置工作平面的尺寸。 + +## 部件放不下时 + +伸出打印平台边缘的实体会被标记。消息会说明是哪几侧超出、超出多少。部件**过高**时同样如此:高度从最低的实体算起,与切片软件放下模型的方式一致。 + +![长方体比 Bambu Lab A1 mini 的打印床更宽。底部的消息给出了超出多少。](shot:printer-overhang) + +警告不会阻止你继续工作。它只是一个提示,免得你到了切片软件里才发现部件太大。太大的部件通常可以分割:用 {{ui:editor.tool.split}} 切成两半,分别打印。 + +如果有意把部件停在平台旁边,点击消息中的小叉。警告随即对这些实体消失。一旦其中一个重新放得下、之后又被你移出去,或者有别的实体伸出,消息就会再次出现。隐藏的实体从不计入,所以把停放的部件隐藏起来同样有效。 + +## 正确摆放部件 + +部件在平台上的摆放方式决定其强度和外观。{{ui:editor.group.arrange}} 区域中的两个工具可以帮忙: + +- {{ui:editor.tool.layFlat}}:点击一个面,部件就以该面朝下摆放。一键找到最佳打印方向。 +- {{ui:editor.tool.dropToWorkplane}}([[D]]):当部件悬在空中时,将其放到工作平面上。 + +关于方向,有几条经验法则: + +- 大平面朝下。这样粘得最牢。 +- 细长且受力的部件,摆放时不要让层纹与受力方向垂直。层间结合是最弱的方向。 +- 避免超过 45° 的悬垂,或者在切片软件中为其添加支撑。 + +## 查找悬垂 + +在眼睛图标旁的下拉菜单({{ui:editor.group.visibility}})中,**显示悬垂**会开启悬垂标记。所有向下倾斜超过 45° 的面都会显示红白斜线——这些地方打印机需要支撑。贴在平台上的面不会被标记。这样在设计时就能看出球体、拱形或水平孔能否不加支撑打印;[泪滴孔](chapter:threads-and-mechanics)正是为此而生。转动部件,或用 {{ui:editor.tool.layFlat}} 让它以另一个面朝下,斜线会立即随之更新。 + +打印机能够应付多陡的倾斜,在设置的 {{ui:workspace.appearance}} 下设置:从 30°(谨慎)到 70°(适合散热良好的打印机)。搭在另一个实体上的面仍会被标记——layerling 只看面本身。 + +## 壁厚、间隙与倒角 + +- 壁至少要有两条挤出线宽,即 0.4 mm 喷嘴对应 0.8 mm。结实的部件需要 1.2 至 2 mm。 +- 两个部件互相配合的地方需要间隙:通常为 0.2 至 0.4 mm,视打印机而定。打印大件之前,先做一对小测试件。 +- 很多人会给贴着平台的底边倒一个小角。这样可以防止首层外扩(“象脚”)。 + +## 准备就绪时 + +点击 {{ui:editor.export}},然后选择 **STL** 或 **3MF**。STL 是最简单的格式。3MF 会保留各个实体的名称和颜色,因此在多色打印时很方便。导出窗口还会显示该部件按实体打印需要多少克、多少米耗材。更多内容见[文件与保存](chapter:files-and-saving)。 diff --git a/docs/guide/zh-cn/12-files-and-saving.md b/docs/guide/zh-cn/12-files-and-saving.md new file mode 100644 index 00000000..c5b0d8b4 --- /dev/null +++ b/docs/guide/zh-cn/12-files-and-saving.md @@ -0,0 +1,106 @@ +--- +title: 文件、保存与分享 +summary: 设计存放在哪里,如何备份,layerling 能导入和导出哪些格式,以及在自己的共享服务器上能做什么。 +--- + +## 设计保存在哪里 + +layerling 把所有内容保存在你电脑的浏览器里。没有账号,也不会上传任何内容。每次改动都会自动保存。起始页上的预览图,显示的是你用 {{ui:editor.homeDashboard}} 返回时所看到的最后一个画面。几天后在同一个浏览器里打开 layerling,一切都在。 + +如果从一个没有任何内容的设计返回起始页,layerling 会问是否保留它。{{ui:confirm.yes}} 或 [[Enter]] 保留,{{ui:confirm.no}} 移除,这样空设计不会越堆越多。对于服务器共享文件夹里的设计,{{ui:confirm.no}} 会把文件从服务器上删除,所有使用它的人都会失去这个文件。 + +这有个缺点:清除浏览器存储或换到另一台电脑的人会丢失设计。**所以要把重要的工作备份成文件。** + +## 设计的文件夹 + +设计多达几十个时,单一列表就不够用了。在起始页上,{{ui:shared.newFolder}} 会为本浏览器的设计新建一个文件夹;点击文件夹即可打开。文件夹里可以再放文件夹。 + +- **移入文件夹:** 把设计拖到文件夹上,或在设计菜单里选择 {{ui:shared.moveTo}},菜单会列出所有文件夹。打开某个文件夹时新建的设计,以及打开或导入的文件,都会落在该文件夹里。 +- **再移出来:** 文件夹里的第一个磁贴 `..`,以及 {{ui:dashboard.projects}} 下方的那一行,都能返回上一层;也可以把设计拖到它们上面。把一个文件夹拖到另一个文件夹上,就会放进里面。 +- **重命名和删除** 在文件夹的菜单里。删除文件夹不会删除任何设计:里面的内容会上移一层。 +- **搜索** 会查找所有文件夹;找到的设计会显示它所在的文件夹,点击该文件夹即可打开。 + +{{ui:dashboard.backupAll}} 会保留文件夹:设计连同文件夹一起装进备份文件,恢复备份时会把它们放回原处。本浏览器的文件夹与服务器上的文件夹是分开的。卡片图片也会写进文件,所以恢复后马上就能看到。 + +## 备份与转交 + +在起始页上,每个设计都有一个菜单,可以重命名、复制和删除。用 {{ui:dashboard.backupAll}} 可以把所有设计打包成一个文件。旁边的 {{ui:dashboard.restoreBackup}} 位于关于浏览器中保存的设计的提示里(在新电脑上、还没有设计时也会出现),可以把它们恢复回来,换一个浏览器或换一台电脑也行;{{ui:dashboard.importGeometry}} 也能打开同一个文件。本浏览器的 {{ui:myShapes.title}} 会随同一个文件一起走,放在 `Custom shapes` 文件夹里,参见[形状](chapter:shapes)。如果把备份恢复到已经有其中一些设计的浏览器,那些设计不会重复添加;提示会说明有多少个已经存在。 + +在编辑器里备份单个设计:{{ui:editor.export}},选择 **LYL** 格式,然后点击 {{ui:export.saveProject}}。LYL 文件是 layerling 自己的设计格式,包含所有内容:形状、分组、草图、CAD 数据、导入的源文件和历史记录,也就是撤销步骤。在 {{ui:export.historyTitle}} 下选择带上前多少步;初始值取自设置(功能区里的齿轮)中 {{ui:workspace.history}} 保留的步数。最后一档 {{ui:export.historyNone}} 只保存设计的当前状态——这是分享不带撤销步骤的文件的办法。导出的是副本,文件名由你在 {{ui:export.fileName}} 中指定;浏览器里的设计仍保留自己的历史记录。旧版本留下的 `.skf` 文件仍可打开,打开后会存成 `.lyl`。 + +**保存到自己的文件夹(Chrome 和 Edge)。** 在这些浏览器里,按钮会打开系统的保存对话框,你可以自己选择文件夹和文件名,也可以替换已有文件。之后按 [[Ctrl]]+[[S]] 会把设计再次保存到同一个文件,不再弹出对话框。用 {{ui:dashboard.importGeometry}} 或导出窗口的打开按钮从 `.lyl` 文件打开的设计,也会保存回该文件。浏览器可能会询问一次修改文件的权限。页面重新加载后,设计会忘记自己的文件,下次 [[Ctrl]]+[[S]] 时会再次询问;对话框会从你上次使用的文件夹开始。Firefox 和 Safari 不允许网页这样写入文件。在那里,文件仍会下载到“下载”文件夹,[[Ctrl]]+[[S]] 会再次下载;Firefox 可以在“设置 > 常规 > 下载”里设为每次都询问文件夹。 + +## 导出 + +点击 {{ui:editor.export}},或按 [[Ctrl]]+[[E]]。 + +![导出窗口,包含 STL、3MF、OBJ、STEP、SVG、PNG、LYL 和 2D 格式。](shot:export-panel) + +顶部是文件名,下面选择格式。有选中项时只导出选中的内容,否则导出整个设计。如果选择漏掉了可见部件,窗口里会明确提示,{{ui:export.selectAll}} 可以一键选中所有可见内容。文件写好后窗口会自动关闭;导出失败时,窗口会保持打开并显示消息。 + +| 格式 | 用途 | 注意事项 | +| --- | --- | --- | +| **STL** | 切片软件和 3D 打印 | 三角网格。最简单、最通用的格式。STL 没有部件之分:重叠的实体会合并成一个网格。要保留为独立部件,请导出 3MF。在 Chrome 和 Edge 中,第一次导出 STL 会询问保存位置,之后该设计再导出 STL 都会写入那个文件,直到你在文件名字段里输入别的名字,或按 {{ui:export.stlSaveAs}}。 | +| **3MF** | 带颜色的切片软件 | 每个实体都保持为独立部件,并带有名称和颜色。重叠的实体只有在颜色相同时才会合并;当一个形状位于另一种颜色的实体内部时(比如板子上的标志),先建的那个会给后建的让出空间。适合 PrusaSlicer、Bambu Studio、OrcaSlicer 和 Cura。Bambu Studio 和 OrcaSlicer 打开时会询问如何把颜色对应到你的耗材,并称该文件“不是来自 Bambu”——这条消息没有影响。 | +| **OBJ** | 建模与交换 | 支持广泛的网格格式。颜色以顶点色保存在同一个文件里,不需要额外的 `.mtl`。Bambu Studio 和 OrcaSlicer 能读取颜色,并像 3MF 那样询问如何对应到耗材;其他程序只能看到形状。与 3MF 一样,重叠的实体只有在颜色相同时才会合并。 | +| **STEP** | 完整的 CAD 程序 | 把长方体、圆柱体、球体和圆锥体保留为精确几何,因此也包括由轮廓生成的形状(星形、心形、椭圆、管、半球、圆弧屋顶、圆角长方体、燕尾、孔等)、弯管、螺纹、弹簧和齿轮,以及圆角和倒角。一次会话中第一次导出 STEP 会加载一次 CAD 内核(约 22 MB)。 | +| **SVG** | 激光切割机和绘图仪 | 以毫米为单位的干净俯视图,包含孔和曲线轮廓。在 {{ui:export.svg.view}} 下,{{ui:export.svg.viewFootprint}} 只输出物体立在工作平面上的轮廓。 | +| **PNG** | 论坛帖子、打印站点、提问 | 当前视图的图片,分辨率为两倍,不含手柄、选择框和尺寸。{{ui:export.png.plate}} 和 {{ui:export.png.transparent}} 在窗口中设置。先旋转和缩放,直到画面合适;这里选中项无关紧要。 | +| **LYL** | layerling 本身 | 可编辑的设计,包含与之相关的所有内容。 | +| **2D** | 工坊、车床和铣床、文档 | 1:1 的图纸,可导出为 PDF 或 SVG:ISO 图纸上的主视图、俯视图和右视图。见下文。 | + +**把 STL 保存到自己的文件夹(Chrome 和 Edge)。** 在这些浏览器里,第一次为某个设计导出 STL 会打开系统的保存对话框,你可以自己选择文件夹和名称,也可以替换已有文件。之后该设计的每次 STL 导出都会写入同一个文件,不再弹出对话框;导出窗口会显示是哪个文件,导出按钮旁的 **另存为…** 可以另选一个。对话框会记住自己的文件夹(与设计用的文件夹分开),这样切片文件可以和切片软件放在一起。页面重新加载后,设计会忘记自己的 STL 文件,下次导出会再次询问。Firefox 和 Safari 仍像以前一样下载文件。 + +没有分组的孔在导出时会从它触及的每个实体上挖掉,与视图显示的一致。所以不必在每次导出前先分组。有选中项时,只有选中的孔才计入。孔不能单独导出;layerling 会提示这一点。 + +STEP 只携带精确的 CAD 实体。无法精确写出的内容,比如作为 STL 导入的网格,会被略过。导出后的消息会列出这些实体并说明原因。给打印机用时,请选择 STL 或 3MF,它们能携带所有内容。 + +### 工坊用图纸 + +选择 **2D** 格式(将鼠标悬停在其上会显示“图纸”),并在文件名下方选择 PDF 或 SVG。有选中项时只绘制选中的内容,否则绘制整个可见设计;没有分组的孔仍会切掉它们触及的部件。 + +layerling 按第一角投影绘制主视图、俯视图和右视图(右视图在主视图左侧,俯视图在主视图下方),使用能容纳的最小 ISO 图幅,从 A4 到 A0,零件需要时可用更大的。比例始终为 1:1。每个视图都标注总宽和总高,看不见的边用虚线表示。与视图方向平行的圆孔会带中心十字和标记(F1、T1、R1),底部的表格列出它们的直径和位置,位置从视图左下角量起。右下角的标题栏包含名称、比例、单位、日期和图号。图纸上的文字跟随界面语言。 + +按 100 % 或“实际大小”打印,否则长度会对不上。图纸不做的事:螺纹、深度、公差和斜向孔都不标注尺寸,尺寸来自作为网格的模型,因此是名义值。过于复杂的零件(超过 100,000 个三角形)或超过 200 个孔会被拒绝并给出消息;这时请少选一些对象。 + +投影基于 WC3D 的 Cadverix-3D 的绘图工作。 + +### 需要多少耗材? + +对 STL、3MF、OBJ 和 STEP,{{ui:export.estimateTitle}} 框会显示所导出内容的体积、重量和 1.75 mm 耗材长度。它的计算方式与文件一致:只算可见实体,减去孔,重叠只算一次。右侧选择耗材——PLA、PETG、ABS、ASA、TPU 或 PA(尼龙)——重量随其密度变化。体积是实体本身的体积。重量和耗材是按带壁和填充的打印做出的粗略估计:在标题下设置 {{ui:export.estimateInfillLabel}}(初始为 15 %)和 {{ui:export.estimateWallsLabel}}(2),框里会说明它计算了什么,以及同一个零件实心时会有多重。真正的数字由切片软件自己的设置决定,所以把它当作参考:适合比较设计,也适合判断线轴够不够用。填充为 100 % 时,框会把零件当作实心计算,这是上限。 + +## 导入 + +用 {{ui:editor.import}} 或 [[Ctrl]]+[[I]] 可以把外部文件带入设计。 + +![导入窗口:打开或插入设计,拖入几何体。](shot:import-panel) + +- **{{ui:import.openProject}}:** layerling 设计(`.lyl`,或更早的 `.skf`)会作为新设计重新打开。 +- **{{ui:import.insertProject}}:** layerling 设计的实体会添加到当前设计中。适合那些需要反复使用的基本形状:建一次、保存,然后每次带进来。 +- **添加几何体:** 把 STL、OBJ、3MF、STEP、SVG、PNG 或 JPG 文件拖到窗口中,或点击选择文件。导入的网格可以旋转、移动、用孔切割,也可以在上面继续建模。SVG 会作为草图实体导入,来自 picsvg.com 或 Inkscape 的“位图描摹”等描摹工具的也一样:它的轮廓变成草图的直线和曲线,高 4 mm,从上方看与图纸方向一致。在属性面板中设置它的 {{ui:prop.sketchFill}}(区域,或向外、向内、居中的描边),{{ui:prop.sketchSilhouette}} 会忽略孔,参见[草图](chapter:sketches)的“填充与剪影”。点本身要在草图模式下修改。如果要按自己的尺寸导入,先在导入窗口的 **SVG 和图片:宽度(mm)** 下输入宽度,与 Tinkercad 一样:图纸会缩放到这个宽度,高度和深度随之缩放,这个字段在这一次导入后就会清空;留空时,SVG 按自身尺寸导入,图片则宽 50 mm。只有超过 2500 条直线和曲线的非常复杂的 SVG 才会作为固定网格导入。PNG 或 JPG 图片会被描摹成轮廓,以同样的方式作为草图实体导入,宽 50 mm,之后可以调整大小:图片中不是背景的部分会保留,背景是占据图片边缘更多的部分。只包含一张图片的 SVG 也按同样方式描摹。无法构成实体的形状,比如自相交或在一点处自接触的轮廓,会被略过,导入后 layerling 会说明有多少个。这时可以在绘图软件里把重叠的部分合并、闭合轮廓,然后重新保存文件。在同一页上绘制的图纸(例如把一个文档的各图层分别导出为文件)会重新对齐,只要在导入前打开导入窗口中的 {{ui:import.keepSvgPage}}:每个都保留自己在页面上的位置,否则每个都会以自身为中心。彩色 OBJ 或 3MF 会按颜色各导入为一个实体,各自在原来的位置。在 OBJ 中,颜色要么在文件本身里(如 layerling 导出的 OBJ),要么在旁边的 `.mtl` 里。把那个文件也一起选中,或者像 Tinkercad 交付 OBJ 那样导入整个 ZIP。3MF 自带颜色,在 Bambu Studio、OrcaSlicer 或 PrusaSlicer 的项目中,每个部件采用其耗材的颜色。包含多个对象的 3MF(例如每盘一个对象的项目)会按对象各导入为一个实体;切片软件中的修改器、负体积和支撑阻挡器会被略过。切片软件里涂在面上的颜色不会被读取。 + +用**较新版本的 layerling**保存的设计,可能包含你这个版本还不认识的内容,比如新形状、新设置或自定义字体。如果 layerling 因此无法打开,消息会写出两个版本号。如果能打开,提示会说明较新的内容在这里可能看起来不同。无论哪种情况,刷新页面都有帮助:layerling.com 总是提供最新版本。安装版应用会在下次启动时获取更新;在自己的服务器上,你需要自行安装更新。 + +模板图片在草图模式下添加,参见[草图](chapter:sketches)。 + +## 简化导入的网格 + +扫描或雕刻得到的网格,三角形数量往往远超其形状所需,而你在移动、切割和保存时,每一个三角形都会被带着走。修改组里的 {{ui:simplify.title}}(或实体的右键菜单里)会把当前网格与你选择保留的三角形比例所留下的结果并排显示;两个视图都会随工作平面的鼠标按键一起旋转和缩放。按百分比或三角形数量设置保留多少,{{ui:simplify.apply}} 会采用更轻的网格。结果是普通网格:对于切割或合并的结果,{{ui:group.edit}} 及其原始部件会被放弃。 + +切割、合并和相交导入的网格是在浏览器里计算的,所以工作区设置限制了这类网格可以有多少个三角形({{ui:workspace.booleanTriangleLimit}})。超过限制的网格不会被处理,消息会写出它的三角形数量;请先简化网格,或者在电脑能承受的情况下提高限制。 + +## 报告问题 + +如果 layerling 做出意外的事,可以保存一份 {{ui:editor.bugReport}}:链接在底部的页脚里,论坛旁边。它是一个 ZIP 文件,因为 GitHub 和许多论坛不接受单独的 .lyl:里面有你的设计(.lyl)和一个简短的文本文件,记录版本、浏览器、屏幕尺寸、最后的消息和任何错误。起始页可以像备份一样打开这个 ZIP,也可以解压后打开其中的 .lyl。里面没有个人信息。把文件附在论坛或 GitHub 的帖子里,这样就能用和你完全一样的设计来追查问题。 + +如果 layerling 因错误而停止,会显示一个带错误消息的窗口,而不是空白页。你可以从中把浏览器最后保存的设计状态存成 .lyl 文件、返回总览,或新建一个设计。窗口中的错误消息和保存的文件在你报告问题时会有帮助。 + +## 服务器上的共享设计 + +当 layerling 运行在你自己的电脑或 Web 服务器上时,它可以提供一个共享文件夹,所有用户都在里面保存设计。在起始页上,它会显示为 {{ui:dashboard.sharedProjects}}。你可以在那里创建文件夹、拖动设计来移动它们,并在整个文件夹中搜索。存放在那里的设计会自动保存回该处。本浏览器中的设计,可以通过把卡片拖到服务器磁贴上来放到服务器上,也可以使用卡片菜单里的 {{ui:dashboard.sendToServer}}。你打开的备份会先落在本浏览器里,和你打开的任何设计一样;再从那里把设计放到服务器上。起始页按文件名显示设计,所以在卡片上或编辑器顶部重命名设计,也会重命名服务器上的文件。删除设计或文件夹会永久删除它,连同本浏览器里的工作副本。保存在服务器上的自定义形状位于其 `Custom shapes` 文件夹中,参见[形状](chapter:shapes)。 + +有两件事能让这更快:起始页上的 {{ui:dashboard.sendAllToServer}} 可以一次性把本浏览器的所有设计放到服务器上;勾选 {{ui:dashboard.newOnServer}} 会让每个新设计都从服务器文件夹开始,因此从第一次修改起就保存在那里。这个勾选状态保存在本浏览器中。无法放上去的设计(比如名字在服务器上已被占用)会留在浏览器里,消息会说明有多少个。 + +这不是同时编辑:每个打开文件的人都在自己的副本上工作。如果别人在此期间改过该文件,layerling 会拒绝覆盖它。 + +在 layerling.com 上,此功能未启用。如何在自己的服务器上设置,见 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.md)。 diff --git a/docs/guide/zh-cn/13-shortcuts.md b/docs/guide/zh-cn/13-shortcuts.md new file mode 100644 index 00000000..ee499985 --- /dev/null +++ b/docs/guide/zh-cn/13-shortcuts.md @@ -0,0 +1,38 @@ +--- +title: 键盘快捷键 +summary: 所有按键一览,直接取自程序,因此列表始终准确。 +--- + +只要工作平面获得焦点,快捷键就会生效。在输入框中输入时,它们不会触发。在 Mac 上,此处列出 [[Ctrl]] 的地方改为 [[Cmd]]。 + +在编辑器中,{{ui:editor.group.help}} 区域里的 {{ui:editor.keyboardShortcuts}} 会以窗口形式打开同一份列表。窗口中的打印机按钮({{ui:shortcuts.print}})可单独打印这份列表,白底黑字,整份列表分三栏排在一张 A4 或 Letter 纸的一面上,便于随手查阅;浏览器的打印对话框也可以把它保存为 PDF。 + +![编辑器中的键盘快捷键窗口。](shot:shortcuts) + +## 命令搜索 + +找不到某个工具?按 [[Ctrl]]+[[K]],或点击 {{ui:editor.group.help}} 区域里的放大镜,然后输入你要找的内容:工具(“圆角”“镜像”)、形状(“圆柱体”)或命令(“导出”“撤销”)。用方向键移动,按 [[Enter]],或点击相应条目。 + +- 搜索同时认识英文和德文写法,并忽略大小写和变音符号:“aushoehlen” 能找到 {{ui:editor.tool.hollow}}。 +- 每条结果都会显示等效的按键,以及它所在的功能区区域,方便你记住它的位置。 +- 置灰的条目目前无法执行,多半是因为没有选中任何东西。它们仍留在列表中,这样搜索依然能告诉你工具在哪里。 + +你正在阅读的这份指南也有搜索框,位于每一页的顶部:输入一两个词,它就会列出同时包含这些词的章节,并标出匹配的词。点击其中一条,或按 [[Enter]] 跳到第一条,即可直接前往。 +- 形状的名称会把该形状添加到工作平面,就像在形状菜单中点击它一样。 +- 搜索框为空时,搜索会把最近用过的命令列在顶部。 +- 设计中的实体名称可以找到并选中该实体,在设计包含许多部件时很有用。实体只在你开始输入后才会出现。 +- 它在草图模式下同样可用,支持草图工具。 + +## 交互式帮助 + +找不到关于某个按钮或输入框的说明在哪?让程序带你过去。点击 {{ui:editor.group.help}} 区域里的问号,或按 [[Shift]]+[[F1]]。指针会变成问号,它下面的任何内容都会被框出。 + +- 点击按钮、输入框、开关、控制柄、功能区的某个组或窗口的标题栏。它**不会**执行原本的功能。取而代之的是打开一个小窗口,其中包含该元素的名称、本指南中相关部分的简短摘要、最多还有两处提到它的位置,以及 {{ui:interactiveHelp.open}}。 +- 帮助针对的是你指向的元素,而不是它周围的整个窗口。没有自己名称的元素会使用离它最近的有名元素;在窗口内部,则回退到该窗口的问号。 +- {{ui:interactiveHelp.open}} 会在新标签页中打开指南的对应章节。该章节会以彩色框出,从标题一直到末尾,让你看清它的起止位置。 +- 如果指南中没有关于该元素的内容,窗口会说明这一点,并提供 {{ui:interactiveHelp.search}}。 +- 按 [[Esc]] 或再次点击问号即可退出该模式。触摸屏上没有悬停:轻点元素会直接打开窗口。 + +与其他窗口一样,该窗口可通过标题栏移动。程序根据元素名称——按钮上的标签、输入框的名称——找到对应章节,因为本指南中的每个按钮都按程序里的叫法书写。它会用你当前使用的语言,在指南每页顶部搜索框所用的同一套搜索中查找,并且完全在你的浏览器中运行。 + +{{shortcuts}} diff --git a/docs/guide/zh-cn/14-ai-with-mcp.md b/docs/guide/zh-cn/14-ai-with-mcp.md new file mode 100644 index 00000000..a0b20d19 --- /dev/null +++ b/docs/guide/zh-cn/14-ai-with-mcp.md @@ -0,0 +1,118 @@ +--- +title: 用 AI 搭建(MCP) +summary: Gemini、Claude 或 Codex 等 AI 助手如何在已打开的编辑器中创建和修改形状、对它们分组,并为视图拍照。 +--- + +layerling 自带一个 MCP 服务器。MCP 是一项标准,AI 助手可通过它使用其他程序中的工具。借助它,Gemini、Claude 或 Codex 等 AI 客户端能看到一个已打开的编辑器标签页并在其中工作:创建形状、修改尺寸、分组、切割、给边做圆角、读取场景并为视图拍照。你描述零件,AI 负责搭建,你在旁边观看,随时可以接手。 + +AI 客户端与编辑器之间的桥梁**在你的电脑上本地运行**。但要注意:AI 读取的内容,也就是场景和视图图片,会像其他任何输入一样发送给你的 AI 服务商。 + +> **重要:** MCP 桥梁只存在于你在自己电脑上启动的开发服务器中。在 layerling.com 以及使用静态托管的安装中,它是关闭的。你自己托管的副本(例如 NAS 上的 Docker 镜像)可以用访问令牌开启它;参见下文“NAS 或服务器上的副本”。 + +## 设置 + +1. 从 [GitHub](https://github.com/henmedia/layerling) 获取 layerling,并在项目文件夹中用 `npm run dev` 启动。必须安装 Node.js。在 Windows 上,README 里的快速开始命令会帮你装好。 +2. 打开一个编辑器标签页,例如 `http://127.0.0.1:3000/?editor=1`。也可以交给 AI:没有编辑器打开时,第一个需要编辑器的工具会启动你的浏览器并打开编辑器,然后等待它连接。这适用于你自己电脑上的 layerling;NAS 或服务器上的副本需要你手动打开编辑器。把 `LAYERLING_MCP_OPEN_EDITOR=0` 设给 MCP 服务器即可关闭这一行为。 +3. 把你的 AI 客户端连接到 MCP 服务器。客户端会用 `node scripts/layerling-mcp-server.mjs` 自行启动它。 + +### Claude Code + +无需安装:项目自带一个 `.mcp.json` 来注册服务器,以及 `.claude/skills/layerling-mcp-skill` 下的技能。在 Claude Code 中打开 layerling 文件夹,然后这样提问,例如:“用 layerling MCP 工具列出我打开的编辑器并检查场景。” + +### Claude Desktop + +Claude Desktop 不读取项目文件。要在它自己的配置中输入服务器。可以使用项目中的 `docs/mcp/claude-desktop-config.example.json` 作为模板,把脚本路径换成你电脑上的绝对路径。然后重启 Claude Desktop。 + +### Codex + +把 `docs/skills/layerling-mcp-skill` 中的技能复制到 Codex 的技能文件夹,参照 `docs/mcp/codex-config.example.toml` 在 Codex 配置中输入服务器,然后重启 Codex。 + +### Gemini & Antigravity + +Antigravity 会自动发现 `.agents/skills/layerling-mcp-skill` 中的工作区技能。对于 Gemini CLI,把 `docs/skills/layerling-mcp-skill` 中的技能复制到全局技能文件夹(`~/.gemini/skills/`),参照 `docs/mcp/gemini-config.example.json` 把服务器加入设置,然后重启客户端。 + +各客户端的详细说明见 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.md#layerling-mcp-skill)。 + +## NAS 或服务器上的副本 + +你自己托管的副本可以让 AI 客户端通过网络驱动其已打开的编辑器。它默认关闭,因为任何能驱动桥梁的人都能读取并修改已打开的设计。在服务器上,把 `LAYERLING_MCP_REMOTE` 设为 `true`,把 `LAYERLING_MCP_TOKEN` 设为至少 16 个字符的密钥(Docker 镜像写在 compose 文件的 `environment:` 下;无需重新构建)。打开该副本的一个编辑器标签页并保持打开,然后把地址和同一个令牌交给 MCP 客户端:`LAYERLING_URL=http://nas:3000` 和 `LAYERLING_MCP_TOKEN=`。 + +只有持有令牌的客户端才能列出或驱动编辑器。编辑器页面不需要令牌,但只有在仅限你所在网络使用的地址或名称下才计入(IP 地址、不含点的名称,或以 `.local` 或 `.lan` 结尾的名称);反向代理后面的真实域名要写入 `LAYERLING_MCP_ALLOWED_HOSTS`。请仅在可信网络中使用,跨网络时使用 HTTPS。详情见 README。 + +## AI 能做什么 + +AI 使用与你相同的功能,走的是与你在编辑器中的操作相同的路径。layerling 的新功能会立即拥有对应的 MCP 动作。工具如下: + +| 工具 | 作用 | +| --- | --- | +| `layerling_list_editors` | 列出已打开的编辑器标签页 | +| `layerling_open_editor` | 在你的默认浏览器中打开新的编辑器标签页,并等待它连接(仅限你自己的电脑) | +| `layerling_read_scene` | 读取场景、选择、单位以及所有对象的精确尺寸 | +| `layerling_list_objects` | 列出所有对象及其尺寸、位置、旋转和 id | +| `layerling_select_objects` | 选择对象 | +| `layerling_delete_objects` | 删除对象 | +| `layerling_create_shape` | 创建形状:长方体、圆柱体、文字(也支持弯曲)、螺纹、齿轮、草图实体以及其他所有形状 | +| `layerling_import_file` | 像导入窗口一样导入文件:彩色 OBJ 或 3MF 按颜色各成一个实体,含多个对象的 3MF 按对象各成一个实体 | +| `layerling_add_font` | 为文字添加自己的字体,支持 TrueType、OpenType 或 WOFF 文件;字体保存在浏览器中,设计只保留用到的字母 | +| `layerling_list_fonts` | 列出内置字体和自己的字体,含 id 和名称 | +| `layerling_import_mesh` | 把三角网格带入设计 | +| `layerling_update_object` | 修改尺寸、位置、颜色、名称、实体或孔,以及构成形状的其他一切,包括文字的字母边缘 | +| `layerling_align_objects` | 让对象彼此对齐 | +| `layerling_scale_objects` | 按百分比缩放对象,可整体缩放或各自在原位缩放 | +| `layerling_lay_flat` | 让对象的一个面贴在平台上 | +| `layerling_place_on_face` | 把对象放到另一个对象的某个面上,斜面也可以,如同 C 键 | +| `layerling_perforate_face` | 在平面上切出孔阵列;孔仍作为孔与实体分组在一起 | +| `layerling_sweep_sketch` | 沿一条由点构成的路径拉出矩形或圆形截面,成为一个精确实体;闭合路径会形成圆环 | +| `layerling_push_face` | 把平面推出,或在其中挖出凹槽,可设置距边缘的内缩和圆角半径;新部分是一个与实体分组的草图实体 | +| `layerling_mate_faces` | 把一个对象的面贴到另一个对象的面,可面对面或齐平 | +| `layerling_open_group` | 打开分组,以便逐个修改其部件,打开的分组内也可再打开分组 | +| `layerling_close_group` | 再次关闭分组(“完成”)或取消 | +| `layerling_group_objects` | 对对象分组 | +| `layerling_ungroup_objects` | 解散分组 | +| `layerling_boolean_cut` | 用孔切割实体 | +| `layerling_intersect_objects` | 只保留对象共有的部分(交集) | +| `layerling_separate_parts` | 把形状分离成松散的部件,把草图实体按轮廓分离为每个轮廓一个实体 | +| `layerling_split_objects` | 用一个平面把实体或孔切成两半 | +| `layerling_list_edges` | 列出一个对象真实的 CAD 边 | +| `layerling_apply_edge_treatment` | 对选定的边做倒角或圆角 | +| `layerling_hollow_object` | 用均匀的壁抽壳实体 | +| `layerling_list_faces` | 列出精确实体的面 | +| `layerling_delete_faces` | 删除面并闭合缺口 | +| `layerling_array_objects` | 按行或沿圆周复制 | +| `layerling_bundle_objects` | 像 Ctrl+B 一样捆绑对象:它们一起移动,保留各自颜色和类型,导出时分开输出 | +| `layerling_layer_text` | 把文字变成用于多色打印的分层堆叠(字母、更宽的边沿、无孔底板),或重新构建堆叠,可加钥匙孔、设置每层圆角和圆角或倒角的字母边缘;给出名称列表时,每个名称生成一个名牌 | +| `layerling_layer_icon` | 把 SVG 图标(文件文本或拉伸的草图实体)变成用于多色打印的分层图标牌——图标、更宽的边沿、无孔底板——或用新的宽度或层数重新构建;给出数量时用副本铺满底板 | +| `layerling_create_qr_code` | 从文字或网址生成二维码,如同形状库中的 {{ui:shape.qrCode}}——可仅二维码、在底板上凸起或雕刻,可设置纠错级别、宽度、高度、静区,也可按需作为孔;模块小于 0.8 mm 时会发出警告 | +| `layerling_measure_section` | 在吸附到轮廓的两点之间的剖切平面上测量——壁厚、间隙、配合 | +| `layerling_show_overhangs` | 开启或关闭悬垂剖面线,设置角度,并报告每个实体需要支撑的面积 | +| `layerling_estimate_print` | 估算选中项或整个设计的体积、重量和耗材:既给出实体件的数值,也按与导出窗口相同的壁和填充给出粗略估计 | +| `layerling_add_reference_points` | 标记参考点——可位于对象的中心、角或边中点,也可位于精确位置——形状会吸附到这些点 | +| `layerling_list_reference_points` | 列出参考点及其 id 和位置 | +| `layerling_remove_reference_points` | 按 id 删除参考点,或删除全部 | +| `layerling_inspect_errors` | 显示最后一条消息和最后一个错误,以及本次会话的消息和错误 | +| `layerling_wrap_around_cylinder` | 把平躺的实体(例如 SVG 或文字)包裹到圆柱上,可向外,也可向内作为雕刻 | +| `layerling_simplify_mesh` | 减少导入网格的三角面数,可缩减到百分比比例或指定三角面数量 | +| `layerling_save_custom_shape` | 把实体保存为自定义形状,可存到服务器或浏览器,以便插入其他设计 | +| `layerling_list_custom_shapes` | 列出服务器和浏览器中的自定义形状 | +| `layerling_insert_custom_shape` | 把自定义形状插入当前设计,可指定 x/z 位置 | +| `layerling_delete_custom_shape` | 移除自定义形状;已插入的实体保留 | +| `layerling_show_workplane` | 隐藏和显示带网格的平台,例如为了拍摄底部图片(仅改变视图) | +| `layerling_set_section_view` | 沿一个平面把视图剖开以便查看内部(仅改变视图,不会真正切开任何东西) | +| `layerling_saved_view` | 把当前视图保存在按键 7、8、9 或 0 下,并可回到该视图,如同 Shift+按键和单独按该键(仅改变视图) | +| `layerling_clear_history` | 永久删除所有撤销步骤,如同历史记录视图的“删除历史记录”按钮;需要 `confirm: true` | +| `layerling_set_history_view` | 回看项目更早的状态,如同历史记录视图(实际设计不受影响;会改动设计的工具会等到它关闭) | +| `layerling_restore_from_history` | 把对象(也包括分组内的部件)从更早的状态作为副本带回设计,如同历史记录视图的“带入设计”——撤销会一次性撤回这一步 | +| `layerling_export_section_svg` | 以 1:1 的 SVG 返回剖切平面上的轮廓,所用实体与导出相同 | +| `layerling_export_drawing` | 制作“2D”导出的工作图:在 ISO 图纸上以 1:1 绘制三个视图,标注总体尺寸并列出圆孔表格,可输出 SVG 文本或 PDF | +| `layerling_export_mesh` | 按导出窗口写出 STL、3MF、OBJ 或 SVG(顶视图或轮廓)文件,所用实体相同;可写到这台电脑上的路径,或写成 base64 | +| `layerling_save_project` | 把整个可编辑设计保存为 .lyl 文件,写到运行 MCP 服务器的电脑上的路径,不弹出对话框;只有给出 `overwrite` 才会替换已有文件,写入会经过临时文件,编辑器中 Ctrl+S 的目标保持不变 | +| `layerling_set_workplane` | 把工作平面放到实体的某个面上或放回基板,并隐藏或显示它 | +| `layerling_capture_image` | 拍摄视图图片:正面、顶部、侧面、从角上斜看等 | + +这样 AI 就能自我检查:它创建一个东西,拍张照片,看一看再改进。 + +## 示例 + +你说:“给我做一个直径 60 mm、高 40 mm、壁厚 2.5 mm、顶部开口的圆盒,再加一个平的盖子,上面用弧形排列写出‘Tea’。”AI 会创建圆柱体、把其中一个抽壳、把弯曲的文字放到盖子上,最后拍几张照片看看是否合适。 + +> **提示:** 给 AI 具体的尺寸,并告诉它零件的用途(“用于 12 mm 圆杆的支架,适配 Bambu Lab A1”)。这样它做出的决定更合理。还要看着它搭建:你随时可以接手,因为用的是同一个编辑器。 diff --git a/docs/guide/zh-cn/15-offline-and-install.md b/docs/guide/zh-cn/15-offline-and-install.md new file mode 100644 index 00000000..9b8fd1fa --- /dev/null +++ b/docs/guide/zh-cn/15-offline-and-install.md @@ -0,0 +1,50 @@ +--- +title: 安装为应用、离线使用与自托管 +summary: 像普通程序一样启动 layerling,即使没有网络也可以,以及在自家电脑上运行它的方法。 +--- + +## 安装为应用 + +layerling 可以像普通程序一样安装。安装后它会有自己的图标和窗口,没有地址栏。首次访问之后,即使**没有网络**也能启动。你的设计保存在自己的电脑上。值得安装:应用启动更快,因为不必每次都重新加载;它无需联网即可使用,还能减轻服务器负担。你不会有任何损失,layerling 仍会在有新版本时通知你。 + +如果你的浏览器支持,起始页上会出现带 {{ui:installHint.install}} 的提示。否则: + +- **Chrome 和 Edge:** 点击地址栏右侧的安装图标,或在浏览器菜单中选择“安装为应用”。 +- **Mac 上的 Safari:** “文件”菜单 →“添加到程序坞”。 +- **iPhone 和 iPad 上的 Safari:** 分享图标 →“添加到主屏幕”。 +- **Firefox:** 无法安装应用。layerling 仍可在其标签页中离线启动。 + +起始页上的提示可用 {{ui:installHint.dismiss}} 关闭。在 Chrome 或 Edge 中再次启动已安装的应用时,会把已打开的窗口带到前台,而不是再开一个。 + +在电脑上,Chrome 或 Edge 中安装的 layerling 还会注册为 `.lyl` 文件的程序:在文件管理器中双击设计,即可在 layerling 中打开,[[Ctrl]]+[[S]] 会保存回该文件。在 Android 上这行不通,那里的浏览器不为已安装的 Web 应用提供文件关联;请在起始页用 {{ui:dashboard.importGeometry}} 打开设计。 + +## 更新 + +当有新版本时,layerling 会在起始页显示。通过 {{ui:dashboard.updateBannerLink}} 可以查看变更内容。版本号位于右下角。重新加载页面后便使用新版本。 + +在 layerling.com 和其他 Web 服务器上,已打开的页面会自行发现更新。它会不时向服务器询问版本,当你回到该标签页时也会询问;如果它需要的某个程序文件消失了,则立即询问。若期间安装了新内容,右下角的卡片会提示并列出新内容。{{ui:newVersion.reload}} 会先把当前打开的设计写入浏览器,然后重新加载页面;设计会按你离开时的样子恢复。{{ui:newVersion.later}} 会让卡片推迟 15 分钟。请尽快重新加载:停留在旧版本的页面可能加载新版本中不匹配的部分。这种情况已经发生时也会出现同一张卡片:CAD 工作进程只在首次需要时加载,它们会说明自己来自哪个构建;如果不是页面自身的构建——更新之后,或使用了旧版本的存储副本——卡片会要求重新加载,以免两者互相误解。 + +layerling 在多个标签页中打开时,它们会互相照应:如果另一个标签页已在运行较新版本,旧标签页底部会出现提示,请你重新加载它。如果同一个设计在两个标签页中打开,两者都会警告,因为它们会自动保存并相互覆盖。如果已有一个标签页打开,你又在另一个标签页中打开 layerling,新标签页会建议在旧标签页中继续,并主动提出关闭自己。如果你确实想要两个标签页,比如并排查看两个设计,请在那里点击 {{ui:tabs.keepHere}}。本指南也会在单独的标签页中打开:当 layerling 在旁边打开时,其右上角的按钮显示为“返回编辑器”,点击会关闭指南,而不是再开一个编辑器。 + +## 语言与外观 + +在右上角从语言列表中选择语言。旁边的配色方案提供 {{ui:theme.short.system}}(跟随操作系统)、{{ui:theme.short.light}}、{{ui:theme.short.dark}} 和 {{ui:theme.short.graphite}},一种中性的深灰色。 + +## 自行运行 + +layerling 是自由软件(AGPL-3.0),可以运行在你自己的电脑或服务器上,例如工坊、俱乐部或学校。有几种方式,见 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.zh-cn.md#快速上手): + +- **Windows 快速开始:** 在 PowerShell 中输入一行命令即可安装全部内容,并在桌面放置快捷方式。当 layerling 已在运行时,再次双击不会启动第二个服务器,只会打开页面。 +- **Docker:** 适用于 NAS 设备和家用服务器,无需安装 Node.js。每个版本都提供现成镜像 `henmedia/layerling`(Docker Hub,也在 `ghcr.io/henmedia/layerling`),支持 amd64 和 arm64;`docker run -d -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails henmedia/layerling:latest` 可启动它,在 NAS 上可在容器管理器的镜像仓库中搜索。卷 `layerling-thumbnails` 能让起始页的预览图在更新后保留;没有它,每次重新创建容器后预览图都会缺失,直到你打开相应设计。 +- **静态导出:** 结果是普通文件,任何 Web 服务器都能提供。它们应位于地址根目录(`https://layerling.example.com/` 或 `http://192.168.0.5:8080/`),不能放在子文件夹中,也不能从磁盘直接打开;具体步骤见 README。如果 `index.html` 旁边有可写文件夹 `store`,并且服务器装有 PHP,它还会成为设计的共享存储。 + +用于 AI 助手的 MCP 桥接只存在于开发服务器中,见[用 AI 构建](chapter:ai-with-mcp)。 + +## 帮助与反馈 + +- 在编辑器中,{{ui:editor.group.help}} 区域包含 {{ui:editor.guide}},其中有最重要的操作和[键盘快捷键](chapter:shortcuts)总览。快速指南的每一节都有一个问号,点击可跳转到此处对应的章节。 + +![编辑器中的快速指南。顶部列出他人的视频,每一节都带有问号。](shot:quick-guide) + +- 欢迎在[论坛](https://forum.drucktipps3d.de/forum/board/127-layerling/)和 [GitHub](https://github.com/henmedia/layerling/discussions) 上提出问题、愿望和错误报告。 +- 哪个版本有哪些变化,见发行说明,位于起始页和编辑器的底部。 diff --git a/docs/guide/zh-cn/16-videos.md b/docs/guide/zh-cn/16-videos.md new file mode 100644 index 00000000..6c6d3b59 --- /dev/null +++ b/docs/guide/zh-cn/16-videos.md @@ -0,0 +1,20 @@ +--- +title: 关于 layerling 的视频 +summary: 其他人制作的关于 layerling 的视频。 +--- + +## 其他创作者制作 + +这些视频并非来自本项目。链接会在新标签页中打开 YouTube;在你点击之前,不会从那里加载任何内容。 + +- [I'm 100% In on Layerling - The Next Big Free CAD](https://youtu.be/IO7S-7bxS5o) – Printology(英语)。一位 Tinkercad 用户的首次试用:layerling 在哪些方面比 Tinkercad 做得更好、哪些地方仍需完善,以及现在是否值得切换过来。 +- [10 Things Layerling Can Do That Tinkercad Can't!](https://youtu.be/cx0OVHgUsJM) – Print N Repeat(英语)。该频道的第二个视频:layerling 能做而 Tinkercad 做不到的十件事。 +- [Layerling la nueva herramienta gratuita de modelado 3D, más completo que Tinkercad](https://youtu.be/-EEt0RSINoY) – Fulcro 1900(西班牙语)。一条关于 layerling 的视频:这款新的免费 3D 建模工具比 Tinkercad 更完整。 +- [Layerling - Tussen Tinkercad en Fusion 360 in, en Helemaal Gratis!](https://youtu.be/X-UuvsfDI-s) – Werkplaats Marc(荷兰语)。面向 Tinkercad 用户的 layerling 初探:抽壳、圆角、孔阵列、带间隙的螺纹、自定义字体和打印机配置,并分别打印了有间隙和无间隙的螺栓来展示差异。 +- [Layerling](https://www.youtube.com/playlist?list=PLYqVFeqYBrPE) – TECHNOBENTO(英语)。一个关于 layerling 的播放列表,目前包含“A new way to sketch in Layerling”。 +- [The PERFECT FREE CAD Program Between Tinkercad and Fusion 360!](https://youtu.be/GIoG-IHPXyg) – Print N Repeat(英语)。一条关于 layerling 的视频:它是介于 Tinkercad 和 Fusion 360 之间的免费 CAD 程序。 +- [Layerling Tutorials](https://www.youtube.com/playlist?list=PLZ-ZWS0D1JIk) – HL ModTech(英语)。一位 Tinkercad 用户的播放列表,目前包含约 23 分钟的 layerling 概览(在浏览器中免费使用、对 Tinkercad 加以扩展的 CAD)、对其功能的深入介绍,以及关于打印螺纹的简短更新。 +- [Layerling – Playlist](https://www.youtube.com/playlist?list=PLCsBmX2kOGWs) – Making Layers(英语)。一个关于 layerling 的系列,目前包含“Tinkercad alternative / upgrade? Introducing Layerling!”——面向从 Tinkercad 转来的用户的概览,以及讲解草图工具的“Layerling Sketch Tools!”。 +- [Tinkercad Too Basic? Fusion 360 Too Much? Meet Layerling for 3D Printing](https://youtu.be/kzV7fQ3rXhw) – 3D Jesus | 3D Printing & Design(英语)。在完全没有手册的情况下首次试用 layerling:圆角与倒角、抽壳、螺纹、草图、旋转实体、阵列、导入和打印机配置。 + +你知道其他视频,或者自己也做了一个?在[讨论区](https://github.com/henmedia/layerling/discussions)告诉我们,它就会被添加到这里。 diff --git a/docs/guide/zh-cn/17-tablet-and-touch.md b/docs/guide/zh-cn/17-tablet-and-touch.md new file mode 100644 index 00000000..8ce2ab34 --- /dev/null +++ b/docs/guide/zh-cn/17-tablet-and-touch.md @@ -0,0 +1,52 @@ +--- +title: 平板与触控 +summary: 用手指或触控笔操作:选择多个实体、转动与缩放视图、长按菜单,以及在 iPad 上需要知道的事项。 +--- + +## 手指与触控笔 + +layerling 可在平板的浏览器中运行,也可从主屏幕作为应用运行。手指的作用相当于鼠标左键。平板没有的三样东西——鼠标右键、Shift 键和滚轮——各有自己的替代方式: + +| 你想要 | 在平板上 | +| --- | --- | +| 选择一个实体 | 点击它。 | +| 选择多个实体 | 手指按住不动半秒,选择 {{ui:contextMenu.selectMultiple}},然后逐个点击实体。再次点击已选中的实体会将其取消。 | +| 全选实体 | 在空白处按住手指不动半秒,选择 {{ui:contextMenu.selectAll}}。 | +| 打开右键菜单 | 在实体上或空白处按住手指不动半秒。 | +| 移动实体 | 拖动它。 | +| 调整实体大小、旋转或抬高 | 拖动它的控制柄,即周围的小方块和箭头。手指在稍偏一点的位置也能抓住它们。 | +| 转动视图 | 在空白处用一根手指,或拖动视图立方体。 | +| 缩放视图 | 两根手指:张开靠近,捏合远离。 | +| 移动视图 | 两根手指并拢滑动。 | +| 清除选择 | 点击空白处。但在 {{ui:camera.touchRotate}} 开启时不行,那时单指用于转动视图;而在 {{ui:contextMenu.selectMultiple}} 中,第一次点击空白处只会结束该模式并保持选择不变,下一次点击才会清除。 | + +## 选择多个实体 + +没有 Shift 键时,长按菜单中的 {{ui:contextMenu.selectMultiple}} 起到电脑上 Shift+点击的作用。开启期间会有提示说明,每次点击实体会将其加入选择或从中移除。点击空白处,或在键盘上按 [[Esc]],会结束该模式并保持选择不变。与此同时,手指在空白处仍可转动视图。随后 {{ui:editor.tool.group}}、{{ui:editor.tool.align}} 或移动操作会作用于你选中的所有实体。 + +同一菜单中还有 {{ui:contextMenu.carry}},即触屏上的 [[C]] 键。选中项随后会跟随手指越过其他实体的各个面;点击一下即可将其放到你点击的那个面上,斜面也可以,而且第一次点击就足够。也可以搜索“set down”或“cruise”找到该菜单项(命令搜索,键盘上为 [[Ctrl]]+[[K]])。 + +## 转动与缩放视图 + +在空白处用一根手指转动视图,两根手指缩放并移动视图。从实体上开始的手指操作的是实体,而不是视图。如果你更希望它转动视图,请在相机栏中开启 {{ui:camera.touchRotate}}:此后无论从何处开始,单指都会转动视图而不是选择。该开关仅在带触摸屏的设备上显示。 + +左上角的视图立方体在拖动时会转动视图,点击它的某个侧面、角或边会跳到该视图。参见[视图与工作平面](chapter:view-and-workplane)。 + +## 控制柄、小点与触控笔 + +指尖会遮住它所瞄准的东西。layerling 允许手指比鼠标指针伸得更远一点去够控制柄、点、线和边,但触控笔更精细。这适用于平板识别为笔的笔,例如 Apple Pencil 或 S Pen。带橡胶笔尖的普通触控笔会被屏幕当作手指,并不比手指更精细,所以只能像手指一样使用。在 iPad 上悬停于屏幕上方的 Apple Pencil 稍后还会在一个小气泡中显示控件的名称,就像鼠标指针的提示框那样。 + +如果实体在儿童或匆忙的手触碰时会被挪动,请在设置中开启 {{ui:workspace.selectBeforeMoving}}:这样必须先选中实体,只有下一次拖动才会移动它。 + +## 在 iPad 或 iPhone 上 + +- **将其安装为应用。** 在 Safari 中点击分享图标,选择“添加到主屏幕”。应用会在自己的窗口中打开,没有地址栏,并且无需连接即可使用,参见[离线与安装](chapter:offline-and-install)。 +- **你的设计保存在浏览器中。** 没有账户,也不会上传任何内容。Safari 有一条自己的防跟踪规则:如果七天内在 Safari 中没有访问过某个网站,它会删除该网站存储的内容。添加到主屏幕的 Web 应用不受该规则限制,WebKit 的文档如此说明。这也是更充分的理由去使用主屏幕上的应用,并备份重要作品:起始页上的 {{ui:dashboard.backupAll}} 会把所有设计打包成一个文件。 +- **文件。** Safari 只允许页面通过下载来写入文件,所以 {{ui:editor.export}} 会把文件放进“文件”应用的“下载”中,键盘上的 [[Ctrl]]+[[S]] 会再次下载它;参见[文件与保存](chapter:files-and-saving)。 +- **无需键盘。** 每个工具在功能区中都有按钮,数字输入框会调出屏幕键盘。iPad 上的键盘还会带来[键盘快捷键](chapter:shortcuts)。 + +## 带儿童的课堂 + +手指与橡胶笔尖的触控笔在这里用法相同。有两项设置能让课堂更轻松:{{ui:workspace.selectBeforeMoving}} 让触摸不会意外移动实体,{{ui:camera.touchRotate}} 让单指始终转动视图。功能区“帮助”组中的问号按钮会开启 {{ui:interactiveHelp.title}}:此时点击任何按钮、输入框或控制柄都会给出说明,再次点击该按钮或按 [[Esc]] 即可退出。 + +要让整个班级使用,请在设置中开启 {{ui:workspace.simpleMode}}。功能区随后只保留课堂上用到的工具(复制、粘贴、复制副本、删除、撤销、分组、镜像、倒角、圆角、抽壳、对齐、导出),形状库只保留一个短列表,按钮更大,起始页只显示设计,别无其他:没有新闻、没有欢迎文字、没有帮助按钮,也没有指向 layerling 之外的链接。开启只需点击一下;关闭则要按住随后取代它的那个按钮两秒钟。以 `?mode=simple` 结尾的链接会为打开它的设备开启该模式,`?mode=full` 会再次关闭。在服务器上运行 layerling 的人可以用 `LAYERLING_SIMPLE_MODE=true` 让所有人一开始就处于该模式,或用 `always` 为所有人固定下来,这样程序就没有退出的开关;参见 README。 diff --git a/docs/guide/zh-tw/01-getting-started.md b/docs/guide/zh-tw/01-getting-started.md new file mode 100644 index 00000000..db404866 --- /dev/null +++ b/docs/guide/zh-tw/01-getting-started.md @@ -0,0 +1,114 @@ +--- +title: 快速上手 +summary: 五分鐘內從一張空白頁面做出第一個 3D 列印零件,不需帳號,也不必安裝任何東西。 +--- + +layerling 是一款直接在瀏覽器中執行的 3D 列印設計程式。你用簡單的形狀搭出零件,在上面挖孔,把邊緣修圓,再交給切片軟體。不必安裝,也不必註冊。你完成的設計留在自己的電腦上。 + +![layerling 的起始頁:最上方是「建立新的 3D 設計」,下方是你的設計與快速指南。](shot:start-page) + +## 建立設計 + +開啟 [layerling.com](https://layerling.com/)。在起始頁點擊 {{ui:dashboard.createDesign}}。編輯器會開啟一個空白的工作平面,也就是所有東西成形所在的網格。 + +如果你已經有想接著做的檔案,請用 {{ui:dashboard.importGeometry}}。它支援 layerling 設計(`.lyl`),也支援 STL、OBJ、3MF、STEP 或 SVG 檔案。 + +你所有的設計之後都會出現在起始頁,並附有預覽圖。這些設計存放在瀏覽器的儲存空間,每次變更後自動儲存,所以沒有儲存按鈕。**layerling 不對存放在瀏覽器裡的設計負責。** 瀏覽器可能故障,瀏覽器更新也可能帶來問題,所以請不時用起始頁的 {{ui:dashboard.backupAll}} 備份設計,或把它們存成檔案。備份可以用 {{ui:dashboard.restoreBackup}} 還原。如何把設計打包成檔案並轉交他人,見[檔案與儲存](chapter:files-and-saving)。 + +## 編輯器一覽 + +![編輯器的工作平面上有兩個形狀。上方是功能區,左側是相機控制,右側是所選形狀的設定。](shot:editor-overview) + +- **上方**是功能區。它依任務分類:{{ui:editor.group.clipboard}}、{{ui:editor.group.history}}、{{ui:editor.group.shapes}}、{{ui:editor.group.visibility}}、{{ui:editor.group.combine}}、{{ui:editor.group.modify}}、{{ui:editor.group.arrange}}、{{ui:editor.group.manage}} 和 {{ui:editor.group.help}}。將滑鼠移到圖示上就能看到名稱。凡是看到小問號的地方,例如形狀的設定裡、形狀庫中或工具面板裡,它都會直接帶你到本指南對應的章節。 +- **中間**是工作平面。你在這裡放置形狀、把它們拉成想要的樣子,並看到結果。 +- **右側**會顯示所選形狀的設定:顏色、尺寸、位置,以及構成該形狀的其他內容。輸入數字比拖曳更精確。 +- **左側**是相機控制,上方是視圖立方體。它們帶你在場景中移動,詳見[視圖與工作平面](chapter:view-and-workplane)。 +- **最上方**可以切換 {{ui:editor.modeGeometry}} 與 {{ui:editor.modeSketch}}、重新命名設計,並選擇語言與配色方案。 + +## 工作區周圍的按鈕 + +將滑鼠移到按鈕上就能看到名稱。如果不確定某個按鈕的作用,先點擊 {{ui:interactiveHelp.title}}(位於 {{ui:editor.group.help}} 區域,[[Shift]]+[[F1]]),再點那個按鈕。以下是詢問度最高的幾個。 + +### 貼上 + +{{ui:editor.tool.paste}}([[Ctrl]]+[[V]])會把用 {{ui:editor.tool.copy}} 複製的內容加入設計。{{ui:common.duplicate}} 則一步完成複製與貼上。 + +### 刪除 + +{{ui:common.delete}}([[Delete]])會移除所選形狀。{{ui:editor.tool.undo}} 可以把它們找回來。 + +### 取消群組 + +{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])會把所選群組重新拆成組成它的那些形狀。 + +### 工作區設定 + +{{ui:editor.workspaceSettings}} 會開啟工作區的設定:單位、平台大小、印表機、網格、顏色、光源等。詳見[視圖與工作平面](chapter:view-and-workplane)。 + +### 主題 + +最上方的 {{ui:common.theme}} 決定 layerling 的外觀:跟隨系統、淺色、深色或石墨色。 + +### 重新命名設計 + +{{ui:editor.renameProject}}:最上方名稱旁邊的鉛筆圖示。輸入新名稱並按 [[Enter]]。 + +### 設計名稱 + +設計的名稱({{ui:confirm.projectName}})位於最上方。點擊它、輸入,按 [[Enter]] 即可保留該名稱。 + +### 顯示選項 + +{{ui:editor.visibilityOptions}},也就是眼睛圖示旁的箭頭,裡面是你可以顯示或隱藏的內容:物件清單、你隱藏的所有東西、備註,以及列印的懸垂。詳見[選取與排列](chapter:select-and-arrange)。 + +### 隱藏所選 + +{{ui:editor.tool.hideSelected}}([[Ctrl]]+[[H]])會隱藏所選形狀。它們仍留在設計與物件清單中;{{ui:editor.visibilityOptions}} 可以讓它們重新顯示。 + +### 搜尋命令 + +{{ui:palette.open}}:輸入你要找的東西,一個工具、一個形狀或一項設定,然後點擊結果。 + +### 隱藏相機控制 + +{{ui:camera.hide}} 會收起左側的相機控制,讓工作區更寬敞;{{ui:camera.show}} 會把它們叫回來。 + +### 吸附網格 + +屬性面板底部的 {{ui:inspector.snapGrid}} 是移動與調整尺寸時吸附的步距。旁邊的小開關 **mm | in** 用來切換單位。詳見[視圖與工作平面](chapter:view-and-workplane)。 + +### 單位:公釐或英吋 + +{{ui:inspector.snapGrid}} 旁的開關 **mm | in** 會為這份設計更改單位、平台網格與吸附步距。 + +### 頁尾 + +視窗底部:{{ui:dashboard.sponsor}} 通往可以贊助本專案的頁面;{{ui:dashboard.userGuide}} 開啟本指南;{{ui:dashboard.forum}} 通往提問、分享想法與回報錯誤的地方(GitHub 上的討論區,德語使用者則是 drucktipps3d 論壇);{{ui:editor.bugReport}} 會產生一份回報錯誤用的 ZIP;{{ui:dashboard.projectOnGitHub}} 通往 GitHub 上的專案,版本號則會開啟版本說明。法律聲明與隱私權政策的連結,屬於你所使用的那份 layerling 的營運者。 + +## 你的第一個零件 + +以下用一個帶孔的立方體作範例。 + +1. 點擊功能區中的 {{ui:editor.addShape}},然後選 {{ui:shape.box}}。形狀會跟著滑鼠指標移動。在工作平面上點一下就能放下。 +2. 在右側設定尺寸,例如長 40 mm、寬 40 mm、高 20 mm。 +3. 用同樣的方式在中央放一個 {{ui:shape.cylinder}},直徑 14 mm、高 30 mm。它要比立方體高,才能貫穿整個立方體。 +4. 選取圓柱體,點擊右側的 {{ui:inspector.hole}}。它會變成半透明:實體變成了一個挖除材料的工具。 +5. 同時選取兩個形狀,點擊 {{ui:editor.tool.group}}。立方展現了一個孔。 + +![圓柱體是孔,並從立方體頂部突出來。](shot:hole-before) + +![群組之後,立方體上有了一個孔。](shot:hole-after) + +孔、槽與凹槽就是這樣做出來的。[實體與孔](chapter:solids-and-holes)一章有詳細說明。 + +## 上次造訪後的新內容 + +更新之後再次開啟 layerling 時,起始頁上會有一張卡片列出你上次造訪以來新增的內容:從那時起的每個版本,最新的排在最上面。隔了很久才回來,就在卡片裡向下捲動。在這些版本下方,{{ui:whatsNew.earlier}} 會把上次造訪之前的版本也加進來。用 {{ui:whatsNew.dismiss}} 關掉它,它就會一直消失到下次更新。起始頁頁尾的 {{ui:whatsNew.footerLink}} 隨時可以再次顯示最新的新增內容。瀏覽器會記住你上次看到的版本,關於你的任何資訊都不會離開瀏覽器。 + +在自己電腦或伺服器上執行的 layerling 副本中,「有可用更新」的提示會有一個按鈕 {{ui:update.previewShow}},讓你在安裝前先看這次更新帶來什麼。只有在你按下按鈕時,清單才會從 GitHub 取得。 + +## 從設計到列印 + +零件做好後,點擊 {{ui:editor.export}},選擇 STL 或 3MF 並下載檔案。用你的切片軟體開啟它,例如 Bambu Studio、PrusaSlicer、OrcaSlicer 或 Cura。如果在設定中選好印表機,你在建模時就能看出零件是否放得下列印床。詳見[列印](chapter:printing)。 + +> **提示:** 如果你來自 Tinkercad,會很快上手:平台、形狀、實體與孔、群組、對齊與鏡像的用法幾乎相同。新的東西主要是倒角與圓角、抽殼、螺紋與草圖。 diff --git a/docs/guide/zh-tw/02-view-and-workplane.md b/docs/guide/zh-tw/02-view-and-workplane.md new file mode 100644 index 00000000..8e54aa2e --- /dev/null +++ b/docs/guide/zh-tw/02-view-and-workplane.md @@ -0,0 +1,195 @@ +--- +title: 檢視與工作平面 +summary: 在場景中移動、正對著觀察,以及把新形狀放到任何你喜歡的表面上。 +--- + +## 移動檢視 + +使用滑鼠: + +| 操作 | 效果 | +| --- | --- | +| 按住右鍵拖曳 | 旋轉檢視 | +| 點擊右鍵 | 在實體上開啟常用指令選單:複製、設為孔或實體、群組、隱藏、鎖定、刪除等;在空白處則為「貼上」與「全選」 | +| 按住中鍵拖曳 | 平移檢視 | +| 滑鼠滾輪 | 放大與縮小 | +| 按住 [[Ctrl]] / [[Cmd]] 並以左鍵拖曳 | 也可平移檢視(在 MacBook 觸控式軌跡板上:按住 [[Cmd]],按下並拖曳) | + +滾輪縮放的速度在設定的 {{ui:workspace.appearance}} 下用 {{ui:workspace.zoomSpeed}} 設定:滑桿範圍 1 到 14,初始值為 5。它只影響滾輪與觸控式軌跡板:按鈕與 [[+]]、[[−]] 鍵一律以相同的小步距縮放。滑鼠滾輪的一格在任何瀏覽器中的縮放幅度都相同,觸控式軌跡板則依你滑過的距離縮放。 + +在平板或手機上,兩根手指可縮放(張開與捏合)並平移檢視(併攏滑動)。一根手指在空白處會轉動檢視,在那裡輕點則清除選取;落在形狀或控制點上時,則如同滑鼠左鍵般操作設計。若要讓從形狀上開始的手指也能轉動檢視,請開啟相機列中的 {{ui:camera.touchRotate}}。這個開關只會在具有觸控螢幕的裝置上顯示。 + +搭配筆的繪圖板用起來像滑鼠:筆尖是左鍵,筆身側鍵是右鍵,可用來轉動檢視與開啟選單。繪圖板的快速鍵可在其驅動程式中設為 layerling 的[鍵盤快速鍵](chapter:shortcuts)。 + +**在平板上,盡可能使用觸控筆。** 它的筆尖比指尖細得多,也不會遮住你要對準的地方,因此草圖中的小點、細線與控制點,以及量測點與邊,都能精確點中,長時間操作也比較不累。layerling 已經讓手指比滑鼠指標更容易搆到點、線、控制點與邊,但觸控筆仍是更精確的方式。這適用於繪圖板能辨識為筆的觸控筆(S Pen、Apple Pencil 等)。一般橡膠筆尖的觸控筆在螢幕上等同於手指,並不會更細。 + +平板沒有滑鼠右鍵:將手指在形狀或空白處按住半秒,就會開啟與按右鍵相同的選單,在空白處還會有**全選**。同一選單中的**多選**在平板上代替 Shift:之後每次點按實體,都會將它加入或移出選取,直到你點按空白處或按 [[Esc]];手指在空白處仍會轉動檢視。選取形狀周圍的控制點時,手指從旁邊一點的位置也能抓住。 + +### 視圖立方體 + +左上角的立方體顯示你正看向何處。點擊它的任一面,就會跳到從上、下、前、後、左或右觀看的正視圖。點擊立方體的角,會從該角斜向觀看模型;點擊邊附近,則從該邊觀看,位於兩個面之間;指標停在上面時,該處會亮起。數字鍵 [[1]] 到 [[6]] 也能切換到正視圖。同時按住 [[Shift]],檢視還會縮放至選取項目,就像 [[Shift]]+[[F]] 一樣。 + +拖曳立方體可以轉動檢視,就像按住右鍵拖曳一樣。沒有選取任何東西時,方向鍵也會轉動檢視:每按一次 15°,搭配 [[Shift]] 則為 90°。它們會依所指的方向轉動模型——[[→]] 將模型正面轉向右側,[[↑]] 將正面向上抬起。按住 [[Ctrl]] 時,方向鍵改為在螢幕上平移檢視:每按一次移動畫面的十分之一,同時按 [[Shift]] 則為一半。模型會依所指的方向移動。如果選取了東西,方向鍵會移動它;請先點擊空白處再轉動檢視。在觸控螢幕上,用一根手指即可,不必開啟 {{ui:camera.touchRotate}}。 + +### 相機列 + +左側邊緣有一條窄列。由上而下: + +- {{ui:camera.home}} 將整個場景重新帶回畫面。快速鍵是 [[Home]];沒有選取任何東西時,[[F]] 也可以。 +- {{ui:camera.focusSelection}} 縮放至選取項目([[F]] 或 [[Shift]]+[[F]])。 +- {{ui:camera.zoomIn}} 與 {{ui:camera.zoomOut}} 逐步縮放,[[+]] 與 [[−]] 鍵也是如此。 +- {{ui:camera.orthographic}} 切換到平面檢視,平行邊會保持平行。對於量測與對齊邊,這通常比透視檢視更順手。[[O]] 可來回切換,再點一次也會返回。 +- {{ui:camera.hideWorkplane}}(網格上方的眼睛)會連同網格一起隱藏平台,讓你從下方查看設計的底面。改變的只有檢視:新形狀仍會落在工作平面上。再點一次就會重新顯示。 +- {{ui:camera.placeWorkplane}}、捲尺與角尺是各自的工具,下文以及[量測與備註](chapter:measuring-and-notes)中會介紹。 + +列最頂端的小箭頭可在它擋住畫面時將它收起。 + +設計會以你離開時的樣子開啟:檢視的角度、縮放與位置會隨設計儲存在這個瀏覽器中,因此你可以從停下的地方繼續,即使回過首頁或關閉過頁面也一樣。儲存的檔案(.lyl)會一併帶上檢視,所以在其他地方開啟時也是這個視角。檢視不屬於復原歷史。 + +每個設計中還可以儲存四個自己的檢視。[[Shift]]+[[7]]、[[Shift]]+[[8]]、[[Shift]]+[[9]] 或 [[Shift]]+[[0]] 會將目前檢視原樣儲存到該鍵下——包括角度、位置、縮放,以及平面或透視——只按該鍵([[7]]、[[8]]、[[9]] 或 [[0]])即可叫回。底部會出現訊息確認儲存;在同一鍵下再次儲存會取代原本的檢視。與上述檢視一樣,儲存的檢視會隨設計留在這個瀏覽器中,並隨儲存的檔案(.lyl)一起帶走,它們同樣不屬於復原歷史。 + +## 查看內部:剖視圖 + +{{ui:camera.sectionView}},列中最後一個按鈕(切割工具),會沿一個平面將檢視切開,讓你檢查壁面、空腔與互相嵌合的零件。不會真的切掉任何東西:設計、其檔案與所有匯出都保持完整。平面穿過實體的地方,切口會以該實體稍暗的顏色填滿,內部的孔則保持空白,因此能分辨實心與空心;平面停止移動片刻後,填滿的面才會出現。 + +- 選擇平面橫跨的軸:X(寬度)、Y(深度)或 Z(高度),與位置欄位中的相同。平面會從設計中央開始。 +- {{ui:camera.sectionOrientation}} 設定這些軸要跟隨什麼。{{ui:camera.sectionOrientationWorld}} 採用設計的座標軸。{{ui:camera.sectionOrientationWorkplane}} 採用工作平面的座標軸:此時 Z 平行於它切割,X 與 Y 則與它垂直,位置從其原點起算。工作平面位於斜面時,你就平行於該面切割,移動工作平面時切口也會跟著移動。{{ui:camera.sectionOrientationView}} 會將平面轉向螢幕:它會移除前方遮擋的部分,滑桿則沿你的視線將平面往設計深處推,例如為了搆到埋在裡面的零件並點擊它。轉動檢視後再點一次,切口就會跟隨新的檢視。 +- {{ui:camera.sectionCoarse}} 讓平面橫跨整個設計移動,{{ui:camera.sectionFine}} 則讓它在目前位置兩側小幅移動,以十分之一公釐為單位。也可以直接輸入位置。 +- 座標軸旁的按鈕會切換到切口的另一側,{{ui:camera.sectionReset}} 將平面放回中央,{{ui:camera.sectionShowPlane}} 則隱藏藍色平面。 +- 你可以點擊並選取切口露出的內容,包括內壁。 +- {{ui:camera.sectionWorkplane}} 會將工作平面放到切口上。它位於剖面上,朝向保留下來的實體外側,就像切割留下的面。若你接著切換到草圖,草圖會正好從那裡開始,淡淡的輪廓會顯示切口,你可以沿著它繪製並吸附。例如,這就是為你用剖視圖打開的空腔畫出合適蓋子的方法。座標軸旁的按鈕可選擇保留哪一側,也就決定工作平面朝向哪邊。你可以照平常的方式將工作平面放回底板。 +- {{ui:camera.sectionMeasure}} 可直接在切口上量測:輪廓會以藍色顯示,在它上面點擊兩次即可得到距離,以及沿平面兩個軸的分量。兩個點都會吸附到輪廓上,並優先吸附角點。當第二次點擊落在對側壁面的任何位置時,它會與第一個點垂直對齊——因此不必精確瞄準,就能讀出壁厚、間隙與公差。第三次點擊會開始下一次量測,[[Esc]] 則結束量測。移動平面會清除量測結果。在圓形輪廓上,例如穿過圓柱或孔的切口,小十字會標出圓心,圓心也會吸附。點擊圓上的一點,再靠近它正對面的點:第二次點擊會正好落在圓心的另一側,讀數顯示 Ø,也就是直徑。從圓心到圓上的一點則得到 R,也就是半徑。 +- {{ui:camera.sectionExportSvg}} 會將切割平面上的輪廓以 1:1 儲存為 SVG,供雷射切割機、繪圖機、模板或墊片使用。X 切口從右側觀看,Y 切口從前方觀看,Z 切口從上方觀看。與匯出時相同,只有可見的實體會包含在內,孔已經扣除,同色的實體會合併成一個輪廓。每種顏色各自保持為獨立的無填色路徑,讓雷射軟體能將它們當作不同圖層分開。 + +面板附著在它的按鈕上。如果它擋住東西,可以抓住標題列將它拖曳到工作平面上的任何位置;下次也會在那裡開啟。雙擊標題列或將它放回按鈕處,即可歸位。 + +X 與 [[Esc]] 會關閉面板;若正在量測,[[Esc]] 會先結束量測。切口會一直保留,直到你用 {{ui:camera.sectionActive}} 關閉它,或回到設計起始頁。開啟期間,它的按鈕會保持醒目。放在被切掉那一側的任何東西,都要等你關閉切口後才會顯示。平板沒有 [[Esc]],所以那裡的面板多了兩個按鈕:{{ui:camera.sectionBack}} 會在量測進行中時結束量測,否則關閉面板;{{ui:camera.sectionConfirm}} 則一步關閉面板。電腦上不會顯示這兩個按鈕。 + +## 工作平面 + +新形狀會與工作平面對齊。起初工作平面是帶有網格的底板。但你可以將它放到任何表面上,以便把東西放在側面或斜面上。 + +1. 按 [[W]] 或點擊 {{ui:camera.placeWorkplane}}。 +2. 將滑鼠移到實體的某個面上。該面會亮起。 +3. 點擊一下,工作平面就會放在那裡。此後新增的所有東西都會位於該面上。 + +改為點擊空白的平台,工作平面就會平放在你點擊的位置,並對齊吸附網格。新形狀與完成的草圖(包括旋轉產生的草圖)接著會出現在那裡,而不是平台中央。工作平面這樣平放在平台上時,平台只會顯示輪廓:同一平面上的兩個網格會形成閃爍的花紋。 + +在面上時,工作平面的原點一般會吸附到網格。點擊靠近面角的位置,它就會正好落在該角上。靠近邊時,它會落在邊上,網格也與邊對齊;這就是刻意選擇網格角度的方式。若沒有角或邊,平放面上的網格會與實體平行,所以在轉過的長方體上,網格也會跟著轉。 + +點擊平台旁邊或按 [[Esc]],會將工作平面送回底板。更快的方法是 {{ui:camera.resetWorkplane}}:工作平面位於面上時,帶有向下箭頭的按鈕會出現在相機列中眼睛的下方。[[Shift]]+[[W]] 會直接將它放到目前選取的面。若點擊時按住 [[Shift]],平面會朝向另一邊。 + +工作平面位於面上時,{{ui:camera.placeWorkplane}} 旁邊會出現一隻眼睛。它會隱藏工作平面而不取消它,方便清楚查看設計:新形狀仍會落在該面上,旋轉也仍繞著它進行。點擊眼睛會重新顯示,設定新的工作平面也會。 + +## 網格與吸附 + +網格顯示平台的大小。右下角是**吸附步距**:移動與縮放會依這個步距吸附,例如 1 mm。精細作業時調小,粗略擺放時調大。功能區中的 {{ui:editor.tool.snapToGrid}} 會在事後將選取的形狀移到最近的網格交叉點。移動時,形狀也會吸附到其他形狀,參見[選取與排列](chapter:select-and-arrange)。 + +> **提示:** 精確拼合零件時,不要一邊轉動檢視。用數字鍵切到俯視或正視,再按 [[O]] 切換為平面顯示。這樣就能立刻看出兩條邊是否真的齊平。 + +### 設定視窗 + +功能區中的齒輪({{ui:editor.workspaceSettings}})會開啟設定。左側有五個區域:{{ui:workspace.appearance}}、{{ui:workspace.measurement}}、{{ui:workspace.workplane}}、{{ui:workspace.shapeDefaults}} 與 {{ui:workspace.history}}。變更會立即生效。底部的 {{ui:workspace.makeDefault}} 會將目前設定儲存為預設值,讓新設計從這些設定開始;右上角的 {{ui:workspace.close}} 則關閉視窗。本節會逐一說明這些設定。 + +### 外觀:主題、工具列與視圖立方體 + +{{ui:workspace.theme}} 設定整個程式的配色方案:{{ui:workspace.themeSystem}} 跟隨你的電腦,其餘為 {{ui:workspace.themeLight}}、{{ui:workspace.themeDark}} 與 {{ui:workspace.themeGraphite}}。也可以在編輯器右上角變更。 + +{{ui:workspace.toolbarSize}} 會讓頂部功能區的按鈕、其形狀選單、左側的相機控制項與右側的屬性面板變小或變大:{{ui:workspace.toolbarSizeSmall}}、{{ui:workspace.toolbarSizeMedium}}(一直以來的樣子)或 {{ui:workspace.toolbarSizeLarge}}。小尺寸在筆記型電腦上能為工作平面留出更多空間;大尺寸在大螢幕上或用手點按時更容易命中。使用大按鈕時,若視窗太窄,功能區的各群組會排到第二列。尺寸會儲存在這個瀏覽器中,並套用於所有設計。 + +{{ui:workspace.viewCubePosition}} 會將視圖立方體放到工作平面的另一個角:{{ui:workspace.viewCubePositionTopLeft}}(一直以來的位置)、{{ui:workspace.viewCubePositionTopRight}}、{{ui:workspace.viewCubePositionBottomLeft}} 或 {{ui:workspace.viewCubePositionBottomRight}}。除了左上角以外,相機控制項都會上移到立方體讓出的位置。在右下角時,立方體會正好位於 {{ui:inspector.snapGrid}} 控制項上方。右側開啟形狀屬性時,位於右側的立方體會讓到屬性面板左邊。這個角會儲存在瀏覽器中,並套用於所有設計。視窗較窄時(例如手機),此設定會隱藏,立方體則留在左上角。 + +### 外觀:快速模式 + +{{ui:workspace.fastMode}} 適用於較慢的電腦。它會關閉陰影、所有實體的邊線與相機慣性,並且只以螢幕解析度繪製檢視。你自己的設定會保留供日後使用,開啟期間被它覆寫的開關會顯示 {{ui:workspace.offInFastMode}}。更多有助於慢速電腦的說明,請見下文「layerling 感覺很慢的時候」。 + +### 外觀:工作區與草圖的顏色 + +工作區的顏色在 {{ui:workspace.appearance}} 下設定:淺色主題的 {{ui:workspace.backgroundColor}} 與 {{ui:workspace.surfaceColor}}(深色主題保留自己的顏色),網格顏色則在 {{ui:workspace.workplane}} 下。每種顏色都是一個顯示該顏色的按鈕。點擊後會開啟一個小視窗,其中有色域、一排現成顏色、十六進位值欄位,以及一個將顏色還原為 layerling 初始值的箭頭。按 [[Enter]] 會套用輸入的十六進位值,點擊視窗外也會套用。 + +草圖檢視有自己的顏色:{{ui:workspace.sketchBackground}} 用於紙張周圍的視窗,{{ui:workspace.sketchPlateColor}} 用於網格下方的紙張,{{ui:workspace.sketchGridColor}} 用於網格,皆為淺色主題。{{ui:workspace.sketchMatch}} 可一鍵套用工作區的三種顏色。 + +{{ui:workspace.classicLook}} 會將工作區佈置成 Tinkercad 的樣子:白色地面、淡藍色的公釐網格(每隔一公分有一條較深的線)、黑色邊線、來自上方的光線與柔和陰影。之後每個數值仍可個別變更。所有初始值都是 layerling 一直以來的樣貌,哪一種適合你取決於你的螢幕。 + +![外觀下的設定:淺色主題的背景色與工作平面顏色,以及所有實體邊線的開關。](shot:settings-appearance) + +![深色配色方案下的編輯器。配色方案在右上角設定:跟隨系統、淺色、深色或石墨。](shot:editor-dark) + +### 外觀:座標軸箭頭與邊線 + +{{ui:workspace.showAxes}}(預設開啟)會在平台後左角畫出三個箭頭:**X** 為紅色指向右方,**Y** 為綠色指向後方,**Z** 為藍色指向上方,與位置欄位的計算方式一致。這就是 Tinkercad、CAD 程式與切片軟體也採用的右手定則。工作平面位於面上時,它們會跟隨該面。如果它們擋路,可以在這裡關閉。 + +{{ui:workspace.edgeLines}} 會為每個實體繪製輪廓,顏色由 {{ui:workspace.edgeColor}} 決定(初始為黑色,與 Tinkercad 相同):當深色彼此混在一起時很有幫助。它預設關閉,而非常大的匯入網格會被略過。 + +![三個開啟邊線的深色實體:輪廓讓它們彼此分明。](shot:edge-lines) + +{{ui:workspace.strongHoles}} 會將孔畫成較深的灰色、較不透明,並在周圍加上深色線條。當孔在透明實體中難以找到時很有幫助。與邊線不同,它在快速模式下仍會保持開啟。 + +### 外觀:光線與陰影 + +{{ui:workspace.showShadows}} 開啟或關閉投射陰影。兩個滑桿設定實體的受光方式。{{ui:workspace.shadowStrength}} 決定投射陰影的深淺,{{ui:workspace.shadeContrast}} 則將光線從均勻的環境光轉向主光源:偏向「強烈」時,背光面會更暗、陰影更明顯;偏向「柔和」時,整體會更平坦。對比拉到最高時會非常強烈,背光面與陰影會變得非常暗。{{ui:workspace.shadowSoftness}} 讓陰影邊緣變得柔和而不是銳利。{{ui:workspace.lightAzimuth}} 讓主光源繞著平台旋轉(0° 從前方,90° 從右方),{{ui:workspace.lightElevation}} 則將它抬高;在 90° 時它會像 Tinkercad 那樣位於平台正上方,陰影正好落在實體下方。{{ui:workspace.lightReset}} 會還原所有設定。 + +### 外觀:工作平面上的量測 + +{{ui:workspace.showMoveDimensions}} 顯示拖曳時移動了多少,{{ui:workspace.showOriginDimensions}} 顯示選取範圍到平台原點的距離,選取多個實體時也會顯示。開啟 {{ui:workspace.dimensionsAlwaysVisible}} 後,這些量測會永久可見,而不只在拖曳時顯示。選取轉過的實體時,其角度會顯示在工作平面上它的下方;{{ui:workspace.showRotationAngles}} 可關閉這項顯示。更多內容見[量測與備註](chapter:measuring-and-notes)。 + +### 外觀:選取與移動 + +{{ui:workspace.selectBeforeMoving}}:實體必須先被選取,下一次拖曳才會移動它。當小孩或匆忙的手會碰到實體時,以及在觸控螢幕上,這很有幫助。 + +{{ui:workspace.frameByDirection}}:往右拖曳的選取框只會選取完全位於其中的物件,往左拖曳的選取框則會選取它碰到的所有物件(以虛線繪製),與 SketchUp 相同。 + +{{ui:workspace.doubleClickOpensSketch}} 決定雙擊擠出的草圖是否會重新開啟草圖,與 Tinkercad 相同;{{ui:workspace.doubleClickOpensGroup}} 則決定雙擊群組或綁定是否會開啟它進行編輯。 + +{{ui:workspace.objectSnap}} 讓形狀的邊與中心在拖曳時吸附到其他形狀;右下角的網格選單有同樣的開關。{{ui:workspace.cruise}} 讓新形狀掛在滑鼠指標上,並落在其下方的面,類似 Tinkercad 的 Cruise;關閉時,新形狀會出現在平台中央。更多內容見[選取與排列](chapter:select-and-arrange)。 + +### 外觀:檢視 + +{{ui:workspace.startInPerspective}}:編輯器接著會以透視檢視開啟,而不是平面檢視。 + +{{ui:workspace.zoomSpeed}} 是一個從慢到快的滑桿:滾輪與觸控式軌跡板的縮放速度;縮放按鈕與按鍵仍維持自己的小步距。{{ui:workspace.cameraInertia}}:放開滑鼠後,檢視會繼續轉一下子並平緩減速。關閉後它會立刻停住,與 Tinkercad 和 Fusion 360 相同。 + +{{ui:workspace.overhangAngle}} 是在可見度選單中開啟「顯示懸垂」時,面被視為懸垂的起始角度:這些面會以紅白斜線標示。30° 偏保守,70° 則仰賴良好的列印冷卻;45° 是常用的起點。 + +{{ui:workspace.booleanTriangleLimit}} 限制匯入網格在切割、合併或交集時可容許的三角形數量,因為這些計算是在你的瀏覽器中進行。超過上限的網格不會被處理;請先簡化網格,或者若你的電腦負荷得了,就提高上限。上限過高可能讓編輯器凍結幾秒鐘。 + +### 量測:單位、比例與吸附步距 + +在 {{ui:workspace.measurement}} 下,你可以設定 {{ui:workspace.units}},也就是量測顯示所用的單位({{ui:workspace.scale}}:公制為公釐、公分或公尺,英制為英吋或英尺)、數字顯示的小數位數({{ui:workspace.accuracy}})、移動與調整尺寸時吸附的 {{ui:workspace.snapGrid}},以及 {{ui:workspace.customSnapGrids}} 下你自己的吸附步距。 + +在設定的 {{ui:workspace.measurement}} 下設定 {{ui:workspace.units}}。使用 {{ui:units.imperial}} 時,layerling 會將所有量測顯示為英吋——形狀上、屬性面板中、捲尺與標尺上都是如此。吸附網格接著會提供從 1/64 到 1 英吋的步距,平台的網格也會以英吋繪製(1/8 到 1 英吋,預設為 1/4 英吋),每滿一英吋就有一條較粗的線。在 {{ui:workspace.inchFormat}} 下,你可以選擇英吋要以像 Tinkercad 那樣的分數顯示(1 5/8,四捨五入到 1/64 英吋),或以小數顯示(1.625),小數位數則依 {{ui:workspace.accuracy}} 的設定。兩種寫法都能輸入,包括「1 5/8」。在公釐與英吋之間快速切換的方法,是屬性視窗底部 {{ui:inspector.snapGrid}} 旁的小開關 **mm | in**:它會像設定一樣改變單位、平台網格與吸附步距,且只作用於目前這個設計。 + +在 {{ui:workspace.customSnapGrids}} 下可以新增自己的吸附步距:一個名稱與一個以公釐為單位的大小,例如「Pin pitch 2.54 mm」代表 DIP 晶片、排針與洞洞板孔的間距,或用 19.05 mm 的「MX Key Unit」代表鍵盤按鍵的間距。吸附步距選單接著會提供該尺寸的整份、一半與四分之一(1 ×、½ × 與 ¼ ×),因此形狀可以按一個間距、半個間距或四分之一個間距移動。如果你只想要該尺寸本身,取消勾選旁邊的 {{ui:workspace.customSnapGridParts}};選單就只會有這一個步距。自訂步距會隨設計儲存,也會跟著 {{ui:workspace.makeDefault}} 一起儲存。 + +### 工作平面:平台與印表機 + +{{ui:workspace.printer}} 會將工作平面調整為印表機的列印平台大小,並標出超出範圍的實體,參見[列印](chapter:printing)。{{ui:workspace.showPlateLabels}} 會在平台上寫出設計名稱;選擇印表機後,還會寫上印表機名稱與建構體積。 + +{{ui:workspace.size}} 可為平台設定自訂尺寸,使用 {{ui:workspace.width}} 與 {{ui:workspace.length}},單位為公釐或你選擇的單位。網格一律穿過原點,所以無論平台多大,較粗的線都會位於座標軸上。 + +### 工作平面:網格 + +{{ui:workspace.showGrid}} 顯示或隱藏平台上的網格。{{ui:workspace.gridBlockSize}} 設定網格線的間距,{{ui:workspace.gridMajorEvery}} 設定較深的線是每隔 5 個還是 10 個網格步距出現;{{ui:workspace.gridMajorColor}} 給這條線專屬的顏色,中心十字與平台邊框也會採用;{{ui:workspace.gridColor}} 則是一般網格線的顏色。 + +放大時,網格的每條線都會變寬,與 Tinkercad 相同,縮小時也仍保持可見。如果覺得太粗,可以關閉 {{ui:workspace.gridLinesGrow}},線條在任何縮放比例下都會維持一個像素寬,與草圖中相同。 + +如果網格消失了,例如因為顏色被設成與平台相同,{{ui:workspace.workplane}} 區域末尾的 {{ui:workspace.resetGrid}} 會將它的可見度、顏色、間距與線寬還原為標準值,這裡的設定以及以 {{ui:workspace.makeDefault}} 儲存的預設值都會還原。 + +### 形狀預設值 + +在 {{ui:workspace.shapeDefaults}} 下,你可以用 {{ui:workspace.shape}} 選擇形狀,並設定新增它時的初始狀態:寬度、長度與高度。{{ui:workspace.useAppDefaults}} 會將該形狀還原為應用程式的初始值。有各自設定的形狀會在 {{ui:workspace.shapeDetails}} 下顯示這些設定。這些數值只套用於新形狀,不套用於已經在平台上的形狀。{{ui:workspace.customLimit}} 可為控制點與屬性允許將該形狀做多大設定你自己的上限;留空則維持一般限制。 + +### 儲存的歷史記錄 + +在 {{ui:workspace.history}} 下,滑桿 {{ui:workspace.savedHistory}} 設定在儲存或重新開啟設計後,有多少已完成的操作仍可供復原使用。每個設計的預設值為 100 個操作。降低上限會永久捨棄該設計較早的復原步驟。 + +## layerling 感覺很慢的時候 + +layerling 會在你的瀏覽器中計算並繪製所有內容。因此在較舊的電腦上、顯示卡較弱時,或在多個大螢幕上,檢視可能會顯得遲緩。以下方法有幫助: + +- **{{ui:workspace.fastMode}}** 位於 {{ui:workspace.appearance}} 下,會立即關閉所有讓檢視負擔很大的效果:陰影、所有實體的邊線與相機慣性。它也只以螢幕本身的解析度繪製檢視,在高解析度螢幕上像素最多可減少到四分之一。你自己的設定會保留,一旦關閉它就會重新生效。 +- **相機持續轉動:** 轉動後放開滑鼠時,檢視會繼續轉一下子並平緩減速。這是刻意設計,不是卡頓。如果你習慣 Tinkercad 或 Fusion 360,可在 {{ui:workspace.appearance}} 下關閉 {{ui:workspace.cameraInertia}},檢視就會立刻停住。 +- **個別開關:** 不使用快速模式,也可以只關閉 {{ui:workspace.showShadows}} 或 {{ui:workspace.edgeLines}}。 +- **使用顯示卡:** 在 Chrome 中開啟 `chrome://gpu`(Edge 中為 `edge://gpu`)。「WebGL」旁邊應顯示「Hardware accelerated」。若顯示「Software only」,表示瀏覽器設定中的硬體加速已關閉。在 Windows 上,還可以在「設定」→「系統」→「顯示器」→「圖形」中為瀏覽器選擇「高效能」,讓它使用真正的顯示卡,而不是處理器中較弱的顯示卡。 +- **簡化大型匯入網格:** 包含數十萬個三角形的模型會拖慢任何檢視。精簡的方法見檔案一章中的「簡化匯入的網格」。 +- **關閉其他分頁:** 每個開啟的 layerling 分頁與其他任何 3D 頁面都會共用同一張顯示卡。 diff --git a/docs/guide/zh-tw/03-shapes.md b/docs/guide/zh-tw/03-shapes.md new file mode 100644 index 00000000..20938f33 --- /dev/null +++ b/docs/guide/zh-tw/03-shapes.md @@ -0,0 +1,156 @@ +--- +title: 放置與調整形狀 +summary: 形狀庫、以數字與控制點設定尺寸、顏色、旋轉、錐度與扭曲。 +--- + +layerling 的每個零件都從一個形狀開始。其餘一切都是由形狀搭建而成:形狀彼此互補、互相挖空,或合併成一個新形狀。 + +## 新增形狀 + +點擊功能區的 {{ui:editor.addShape}}。形狀庫隨即開啟。 + +![形狀庫。每一張小圖都是由形狀的真實幾何渲染而成。](shot:shape-menu) + +每選取一個形狀,形狀庫就會關閉。拖曳它的標題列可以移動它,讓你把它放到不會擋住目標位置的地方,例如屬性面板上方;按兩下標題列會讓它回到按鈕下方,你上次留下的位置會儲存在瀏覽器中。標題列的圖釘可讓形狀庫保持開啟,方便你連續放置多個形狀。拖曳它的邊緣與角落可調整大小,最大到螢幕允許的寬高;尺寸同樣儲存在瀏覽器中,按兩下邊緣即可還原。拉窄之後,形狀庫會省略名稱、只顯示圖片;把指標移到形狀上時才會出現名稱。 + +選一個形狀。它會跟著滑鼠指標,並在你點擊的位置落下。把它移到實體上方,它會貼在指標底下的面上,斜面也一樣,就像 Tinkercad 的 Cruise;移到空白平台上方,則落在工作平面。[[Esc]] 取消放置。等待點擊的工具(例如捲尺、角尺、備註、{{ui:camera.placeWorkplane}}、{{ui:editor.tool.layFlat}} 或邊緣工具)在你選取形狀時會被關掉,因此那一下點擊就是放置形狀。反過來,開啟其中一個工具也會把形狀放下。如果你希望形狀直接出現在平台中央,可以在設定中關閉點擊放置({{ui:workspace.appearance}} 區域的 {{ui:workspace.cruise}} 開關)。 + +形狀庫提供: + +- **基本形狀:** {{ui:shape.box}}、{{ui:shape.roundedBox}}、{{ui:shape.cylinder}}、{{ui:shape.slot}}、{{ui:shape.ellipse}}、{{ui:shape.polygon}}(三到二十四邊)、{{ui:shape.sphere}}、{{ui:shape.cone}}、{{ui:shape.pyramid}}(三到二十四邊,因此也有三角錐)、{{ui:shape.wedge}}、{{ui:shape.roundRoof}}、{{ui:shape.halfSphere}} 和 {{ui:shape.torus}}。 +- **管:** {{ui:shape.tube}} 和 {{ui:shape.bentTube}},由最多十二段直管與其間的彎角組成,以及從一個輪廓過渡到另一個輪廓的 {{ui:shape.loft}},例如從方形到圓形。 +- **裝飾形狀:** {{ui:shape.star}}、{{ui:shape.heart}} 和 {{ui:shape.crescent}}。 +- **文字:** {{ui:shape.text}},也可沿圓弧排列。更多內容見[文字](chapter:text)。 +- **機械件:** {{ui:shape.thread}}(螺桿、螺絲、螺帽與螺紋孔)、{{ui:shape.spring}}、{{ui:shape.gridfinity}} 收納盒與底板、{{ui:shape.gear}},以及用於握把的 {{ui:shape.knurl}}。更多內容見[螺紋與機械件](chapter:threads-and-mechanics)。 +- **結構用:** 可一體列印的 {{ui:shape.hinge}}、{{ui:shape.dovetail}}、用於水平孔的 {{ui:shape.teardrop}}、用於螺絲頭的 {{ui:shape.counterbore}} 與 {{ui:shape.countersink}},以及 {{ui:shape.ruler}},它只是量測工具,永遠不會出現在匯出結果中。 + +要得到三角形有兩種方式:三邊的 {{ui:shape.polygon}} 是等腰三角形,也就是 Tinkercad 的「Roof」;{{ui:shape.wedge}} 則是直角三角形。兩者都是真正的三角柱。想挖出三角形孔,可複製該形狀、把副本縮小、標記為孔,再用 {{ui:editor.tool.centerOnWorkplane}} 或 {{ui:editor.tool.align}} 對齊。兩者都按形狀的邊界框運作,也就是包住它的最小方框,所以切掉一半的正方形仍算作完整正方形。命令搜尋([[Ctrl]]+[[K]])在「triangle」或「roof」下也找得到這兩種形狀。 + +{{ui:shape.slot}} 可以一端比另一端窄,例如用在兩顆皮帶輪之間的皮帶護罩。在 {{ui:inspector.properties}} 下設定 {{ui:prop.slotSmallEnd}};大端與膠囊同寬,兩側從一段圓弧直通到另一段圓弧。{{ui:prop.slotCentreDistance}} 是兩段圓弧圓心之間的距離,也就是兩顆皮帶輪的間距。改變小端時圓心距保持不變,膠囊會變長或變短。錐形膠囊同樣是精確實體,可套用圓角並匯出 STEP。 + +## 形狀的設定 + +選取形狀後,它的設定會立刻出現在右側。最上方是名稱,旁邊的鉛筆({{ui:outliner.rename}})可讓你輸入新名稱。按 [[Enter]] 保留,按 [[Esc]] 取消,名稱為空則還原形狀的預設名稱。再往右,掛鎖可鎖住形狀、避免誤移動,眼睛圖示則可隱藏它。最左側的箭頭會把設定收合到只剩標題列。下方的卡片點擊標題即可展開與收起({{ui:inspector.properties}}、{{ui:inspector.position}}、{{ui:inspector.rotation}}、{{ui:inspector.taper}}、{{ui:inspector.twist}} 以及特殊形狀的卡片);layerling 會記住你留下哪些展開的卡片,下一個形狀與下次造訪都適用。 + +設定停靠在右側邊緣。如果它擋住你想看的內容,拖曳標題列就能讓它浮動到你放下的位置;下一個形狀也會留在那裡。把它拖回右上角,或按兩下標題列,它就會重新停靠。浮動或收合時,吸附步距會從設定底部移到工作平面的右下角。 + +![圓柱的設定:實體或孔、直徑與高度,可用數字和滑桿設定。](shot:editor-overview) + +- **{{ui:inspector.solid}} 或 {{ui:inspector.hole}}:** 實體保留材料,孔則移除材料。點擊 {{ui:inspector.solid}} 會開啟顏色;你在那裡調出的自訂顏色之後會留在 {{ui:inspector.recentColors}} 下,最多最近八個。更多內容見[實體與孔](chapter:solids-and-holes)。{{ui:inspector.keptColors}} 那一列的圖釘可永久保留你選的顏色:它獨佔一列,較新的顏色永遠不會把它擠掉,再按同一枚圖釘即可取消保留;這個瀏覽器最多保留 21 種顏色。 +- **{{ui:inspector.transparent}}:** 讓你能看穿實體,例如看清它後面的形狀。 +- **{{ui:inspector.multicolor}}:** 僅適用於群組;[[Shift]]+[[M]] 可切換。開啟後,群組中的每個部件都顯示自己的顏色,被孔挖成單一實體的群組也一樣(孔留下的壁會採用被挖入實體的顏色)。為群組選顏色會關閉這個選項,並為整個群組上色。綁定則一律保留各部件自己的顏色。匯出 3MF 時每個部件都保留顏色,切片軟體便能據此把各部件對應到線材;OBJ 把顏色記錄在頂點上,因此那裡兩種顏色的交界會稍微粗糙一些。 +- **{{ui:inspector.properties}}:** 尺寸以及屬於這個形狀的一切。圓柱有直徑、高度與邊數。圓管或圓環則有 {{ui:prop.outerDiameter}}、{{ui:prop.innerDiameter}}(用於已知軸徑的襯套)與壁厚:任意兩個值可得出第三個,輸入順序不拘。設定外徑時內孔保持不變、壁厚隨之改變;設定內徑時外徑保持不變、壁厚隨之改變;內孔比管更寬時,外徑會按壁厚增大。管的長度就是它的高度。被拉過一邊、不再是圓形的管,會以長度與寬度兩個值取代原本的單一外徑;在那裡改變寬度時壁厚保持不變。齒輪有齒數,彈簧有圈數。離開預設值的數值,名稱旁會出現一個小箭頭:點擊它只還原該數值,無論你之後還做了什麼,這點與復原不同。按兩下滑桿也一樣,這裡以及工作區設定中的滑桿都是如此。用滑鼠拖曳時,長度滑桿會吸附到吸附步距,因此高度會落在整數公釐(格線關閉時與短滑桿上不會);輸入的值與滑桿上的方向鍵仍保持精確。底部的 {{ui:inspector.saveDefaults}} 會把目前的值設為這類形狀的起始值(等同設定中的 {{ui:workspace.shapeDefaults}}),{{ui:inspector.resetDefaults}} 則還原為應用程式自己的預設值。 +- **{{ui:inspector.makeEllipse}}:** 僅適用於圓柱。圓柱一律是圓的:只有一個直徑,每個控制點都會同時改變兩側。想要橢圓,點擊這個選項,它就會變成 {{ui:shape.ellipse}}——同一個實體,之後你可以分別設定長度與寬度。帶有倒角、圓角或壁的圓柱,以及轉過或群組過的圓柱,不能這樣轉換;這些情況請一開始就選用 {{ui:shape.ellipse}}。 +- **{{ui:inspector.taper}}:** 頂部與底部尺寸不同,例如做斜面或漏斗。 +- **{{ui:inspector.twist}}:** 讓頂部相對底部扭轉,或往側邊偏移。這樣就能做出扭轉的柱子與傾斜的高塔。 + +![一個由橘色方塊、藍色銷釘和孔組成的群組,被挖成單一實體。開啟多色後,銷釘保持藍色、方塊保持橘色,孔壁則採用方塊的顏色。](shot:group-multicolor) + +錐度與扭曲幾乎適用於每個形狀。只有齒輪、螺紋、彈簧、Gridfinity、鉸鏈、角錐、彎管、淚滴孔、螺絲頭刀具與標尺不支援:它們有自己固定的尺寸,或者像角錐那樣本來就有自己的頂部。 + +![一個改過頂部半徑與高度的圓錐:每個數值旁的小箭頭可把該值還原,底部的兩個按鈕則儲存或重設這個形狀的預設值。](shot:property-reset) + +{{ui:inspector.saveDefaults}} 會把你在這個形狀上的改動存成同類型每個新形狀的起點:尺寸、形狀的設定與顏色。把一個圓柱塗成綠色,按下按鈕,之後新增的每個圓柱都是綠色;其他類型則各自保留自己的顏色。{{ui:inspector.resetDefaults}} 會把該類型還原成應用程式最初的設定。有自己預設值的類型,會在設定中的 {{ui:workspace.shapeDefaults}} 下標出。從起始頁新建的設計也會以這些預設值開始;數值儲存在這個瀏覽器中。 + +錐形或傾斜的長方體、圓柱、橢圓、多邊形、管或圓環都會保持精確形狀;膠囊、星形、心形、月牙、燕尾、頂部與底部邊緣未倒圓的圓角長方體,以及直式或圓式滾花(其倒角端也會跟著收窄)同樣如此:倒角與圓角可以像在一般形狀上一樣套用,STEP 匯出也會寫出它。扭曲的形狀也一樣:它的斷面隨高度精確旋轉,側面從底部到頂部均勻盤繞。 + +輸入比拖曳更精確。所有數字欄位都接受公釐,也接受百分比:在 40 mm 的寬度欄位輸入「50 %」,就會得到 20 mm。它們也會計算:「15*3」、「120-2*4」或「(40+2)/2」分別得到 45、112 和 21;也可以用 x 代替 *。欄位會記住算式,屬性面板與選取實體周圍尺寸框中的欄位都是如此:之後再次點入,只要數值仍與算式吻合,那裡顯示的就是算式而不是數字,你可以就地修改,把「(140+2)/2」改成「(40+6)/2」。用手把拖曳實體或縮放之後,算式不再吻合,欄位就只顯示數字。 + +### 選擇顏色 + +點擊實體屬性中的 {{ui:inspector.solid}} 會開啟顏色卡片,標題為 {{ui:inspector.shapeColor}}。最上方顯示實體目前顏色的十六進位值。下方是色盤中的現成顏色;點擊其中一種就會為實體上色並關閉卡片。 + +{{ui:inspector.custom}} 會開啟瀏覽器的選色器,讓你選自訂顏色。它提供什麼取決於瀏覽器:在 Chrome 與 Edge 中,它有顏色欄位、色相滑桿、可從螢幕任何位置取色的滴管,以及可切換為 HEX、RGB 或 HSL 的色值(用旁邊的箭頭切換)。關閉選色器或在它外面點擊時,顏色才會生效。 + +你在那裡調出的自訂顏色之後會留在 {{ui:inspector.recentColors}} 下,最多最近八個。{{ui:inspector.keptColors}} 那一列的圖釘可永久保留你選的顏色:它獨佔一列,較新的顏色永遠不會把它擠掉,再按同一枚圖釘即可取消保留;這個瀏覽器最多保留 21 種顏色。圖釘是給自訂顏色用的,色盤中的顏色則一直都在。選取了多種顏色,或選取的是孔時,沒有單一顏色可保留。 + +設定中工作區的顏色有自己較簡單的選色器,包含顏色欄位、一排現成顏色與十六進位值欄位;見[設定](chapter:view-and-workplane)。 + +## 圓有多圓?邊數 + +圓柱、圓錐、管、橢圓或內孔等圓形形狀,屬性中有 {{ui:prop.sidesFollowSize}} 開關與 {{ui:prop.sides}} 滑桿。{{ui:shape.torus}} 有兩個滑桿:沿圓環的 {{ui:prop.torusSides}} 與沿管身的 {{ui:prop.torusSteps}}。它們在那裡也會跟著尺寸變動,直到你手動固定,因此大型圓環不會出現切面。原因在於:在檢視以及 STL、3MF 與 OBJ 中,layerling 把圓畫成由許多小邊組成的多邊形。邊越多越平滑,佔用的三角形也越多。 + +**邊數在哪些地方重要** + +- **匯出給切片軟體時**(STL、3MF、OBJ)。邊數少的圓柱到了那裡就是多邊形。 +- **合併實體與孔時。** 由邊數少的孔挖出的內孔,在成品中會帶有稜角。螺絲孔也包括在內。 +- **在檢視中。** 大量非常精細的形狀會拖慢編輯器。 + +**邊數在哪些地方不重要** + +- **匯出 STEP 時。** 它寫出的是圓形,而不是多邊形。 +- **套用倒角與圓角時**({{ui:editor.tool.chamfer}}、{{ui:editor.tool.fillet}}),只要形狀保持圓形。未設定邊數、邊數不少於該形狀的預設值,或多邊形與圓的偏差最多 {{value:EXACT_ROUND_TOLERANCE}} mm 時,就是這種情況。預設值為 {{value:ROUND_FROM_SIDES}} 邊(圓柱、橢圓、管與圓錐)、{{value:ROUND_FROM_ROOF_SIDES}} 邊的 {{ui:shape.roundRoof}}、{{value:ROUND_FROM_SPHERE_STEPS}} 段的 {{ui:shape.sphere}}、{{value:ROUND_FROM_HALF_SPHERE_STEPS}} 段的 {{ui:shape.halfSphere}}、{{value:ROUND_FROM_TORUS_SIDES}} 邊與 {{value:ROUND_FROM_TORUS_STEPS}} 段的 {{ui:shape.torus}},以及 {{ui:prop.quality}} 為 {{value:ROUND_FROM_BENT_TUBE_QUALITY}} 的圓形 {{ui:shape.bentTube}}。 +- **螺紋、彈簧或斜齒輪。** 邊緣工具與 STEP 匯出採用它的精確實體;{{ui:prop.quality}} 只決定繪製得多精細。 + +**邊數又變得重要的情況** + +- **在邊數少的形狀上套用倒角與圓角時。** 如果把邊數設得低於預設值,邊緣工具會按形狀繪製出來的樣子處理:6 邊的圓柱仍是六角柱,圓角會沿它的六條邊延伸。這樣你就能做出例如帶圓角的螺帽槽。圓形形狀請保持 {{ui:prop.sidesFollowSize}} 開啟。 + +**如何使用** + +- **保持 {{ui:prop.sidesFollowSize}} 開啟。** 這樣 layerling 會依直徑選擇邊數,使多邊形與真實圓的偏差最多 {{value:ROUND_DEVIATION_TOLERANCE}} mm,遠低於印表機解析得到的程度。小形狀至少有 {{value:MIN_AUTOMATIC_SIDES}} 邊,大形狀則更多。 +- **減少邊數**:只在你刻意想要多邊形時(不過那種情況有 {{ui:shape.polygon}}),或是編輯器因大量圓形形狀而變慢時。 +- **增加邊數**:幾乎不需要。只有在非常大的圓形零件上、在 STL 中看到稜邊時才需要。 +- **對於只用邊緣工具處理,或以 STEP 交付的零件,** 邊數無關緊要。 + +## 使用控制點 + +除了設定之外,形狀本身也有控制點: + +- **角與邊**可把形狀放大或縮小。把其中一個拖過對面,形狀會在那條邊的另一側繼續增大。頂端的箭頭在底面下方做同樣的事。拖曳角時按住 [[Shift]] 可同時縮放寬度、深度與高度並保持比例;按住 [[Alt]] 則從中心縮放,而不是從對角縮放。沒有鍵盤,或不想一直按著鍵時,可開啟屬性面板頂端的 {{ui:inspector.keepProportions}}:此後拖曳角一律保持比例,輸入寬度、深度或高度其中之一,另外兩項會按相同比例縮放。這項設定會被記住。 +- **頂端的箭頭**改變高度,**中間的控制點**則抬高或降低形狀。 +- **弧形箭頭**旋轉它。 +- **形狀旁的數字**顯示尺寸。點擊其中一個會開啟欄位,讓你輸入想要的數字。按 [[Enter]] 時,形狀從該數字對面的邊開始增大,跟拖曳時一樣;按 [[Alt]]+[[Enter]] 則繞著自己的中心增大,因此先前與其他形狀對齊過的形狀仍保持對齊。這適用於寬度與長度;高度一律從底面往上增大。右側屬性面板中的欄位不需按鍵就會保持中心。[[Tab]] 保留數字並開啟下一個欄位(寬度、深度、高度);[[Shift]]+[[Tab]] 返回上一個。在屬性面板中已點入的欄位,滑鼠滾輪也能改變數值:每一格一個單位,按住 [[Shift]] 為十倍,[[Ctrl]] 為十分之一,[[Alt]] 為百分之一。沒點入的欄位則把滾輪留給面板捲動。 +- **點擊一個角**(不拖曳)會同時開啟寬度與深度。輸入第一個,按 [[Tab]] 切到第二個,再按 [[Enter]] 套用兩者。[[Esc]] 取消。 + +形狀一旦轉過直角,例如用 {{ui:editor.tool.layFlat}} 側放,屬性面板中的欄位就會按每項尺寸目前的方向命名:{{ui:prop.height}} 是往上的尺寸,{{ui:prop.width}} 沿 X 方向,{{ui:prop.length}} 沿 Y 方向。因此對躺下的形狀輸入高度,改的是垂直方向的尺寸,而它的底面仍留在平台上。以其他角度傾斜的形狀,欄位中顯示的是它自己的尺寸,下方會有備註說明。 + +不用滑鼠時,可以用鍵盤:方向鍵把選取項移動一個吸附步距(格線關閉時為 0.01 mm),按住 [[Shift]] 為五個,若把 {{ui:workspace.gridMajorEvery}} 設為 {{ui:workspace.gridMajorSteps|10}}(在設定中的 {{ui:workspace.appearance}} 下),則為十個:移動到下一條較深的格線,跟 Tinkercad 一樣。方向鍵跟隨檢視:[[→]] 往螢幕右側,[[↑]] 遠離你,即使轉過平台也一樣。把形狀推出畫面,檢視也會跟著移動。[[Ctrl]]+[[↑]] 與 [[Ctrl]]+[[↓]] 升高與降低它。連續按方向鍵在歷史記錄中算一步:只要下一次按鍵在 1.5 秒內接上,復原就會收回整串操作,而不是一次一下。[[R]] 旋轉 45°,[[Shift]]+[[R]] 旋轉 22.5°。[[D]] 把選取項放到工作平面上。 + +控制點可把形狀拉到和你的平台一樣大,寬與深至少 220 mm。在屬性面板輸入數字則可超過,而這樣放大的形狀再次抓取時不會縮回。在設定中的 {{ui:workspace.shapeDefaults}} 下,可用 {{ui:workspace.customLimit}} 為每種形狀設定自己的上限。 + +吸附步距位於編輯器右下角,隨時可以更改。 + +## 複製與重複 + +{{ui:editor.tool.copy}}、{{ui:editor.tool.paste}} 與 {{ui:editor.tool.duplicate}} 位於功能區({{ui:editor.group.clipboard}})。[[Ctrl]]+[[D]] 會重複選取項。layerling 會記住你上次如何移動或旋轉副本,並在下次重複時再套用相同的方式。這樣幾個按鍵就能做出一排孔或一排階梯。規則排列還可以使用陣列,說明見[選取與排列](chapter:select-and-arrange)。 + +> **提示:** 如果某個形狀不肯接受你想要的尺寸,通常是新形狀的限制所致。在設定中的 {{ui:workspace.shapeDefaults}} 下,你可以決定每種形狀如何開始,以及最大能有多大。 + +## 自訂形狀 + +需要反覆使用的支架、握把或底板,可以放進 {{ui:myShapes.title}}。它們位於形狀庫最上方、{{ui:myShapes.basicShapes}} 之上,可用箭頭收起。 + +1. 選取一個或多個實體、孔、群組,也可以包含匯入的模型。 +2. 開啟形狀庫並點擊 {{ui:myShapes.saveSelection}}。輸入名稱,再按 {{ui:common.save}} 確認。 +3. 在任何設計中,點擊圖磚即可插入該形狀,跟其他形狀一樣。你也可以把圖磚拖到工作平面;它會在你鬆手的位置落下。接著形狀會跟著指標,和其他形狀一樣:它跟著指標移動,經過其他實體的面時也一樣,點擊即可放下;[[Esc]] 把它收走。 + +多個實體會一起回來,保持彼此原本的相對位置,而且仍可逐一選取。釘在已儲存實體上的[備註](chapter:measuring-and-notes)會一起存下,插入時以收合狀態回來、仍釘在插入的實體上;自由備註與參考點則留在設計中。圖磚上的鉛筆可重新命名,垃圾桶會先詢問再刪除。已插入設計中的形狀則保持原樣。 + +{{ui:myShapes.title}} 儲存在這個瀏覽器中,與設計分開,下次啟動時仍然存在。起始頁的 {{ui:dashboard.backupAll}} 會把它們和設計一起備份,開啟備份就會把兩者一起還原。若只想把形狀帶到另一個瀏覽器,{{ui:myShapes.backup}}(向下的箭頭)會把它們儲存成 ZIP 檔案,{{ui:myShapes.load}}(向上的箭頭)再把它們帶回那裡。{{ui:myShapes.load}} 也接受單一的 `.lyl` 設計;每一個都會變成一個形狀。已存在的形狀不會重複新增。 + +### 資料夾 + +自訂形狀一多,用資料夾分類會更清楚。{{ui:myShapes.newFolder}}(帶加號的資料夾,位於 {{ui:myShapes.saveSelection}} 旁)會要求輸入名稱,並在最上層建立資料夾;資料夾上的加號 {{ui:myShapes.newSubfolder}} 則會在其中建立子資料夾。資料夾最多三層:第三層的資料夾可以放形狀,但不能再放資料夾。資料夾依名稱順序排在未歸類的形狀上方,可用箭頭展開與收起;資料夾上的數字統計它本身及內部資料夾中的形狀數量。儲存時,在名稱旁的清單中選擇資料夾;{{ui:myShapes.noFolder}} 會把形狀留在最上層。 + +圖磚上帶箭頭的資料夾可把該形狀移到另一個資料夾,或用 {{ui:myShapes.noFolder}} 移回最上層。資料夾上的鉛筆可重新命名,垃圾桶會先詢問再刪除它連同其中的資料夾與形狀。資料夾本身不能移動:在想要的位置新建一個,再把形狀移過去。備份會保留資料夾,載入後形狀會回到相同的位置。 + +### 伺服器上的自訂形狀 + +開啟[共用伺服器儲存](chapter:files-and-saving)後,這一區會顯示兩組:{{ui:myShapes.onServer}} 與 {{ui:myShapes.inBrowser}}。儲存時你可以選擇形狀要放在哪裡;預設選取伺服器。在那裡,它以獨立的 `.lyl` 檔案(附有圖片)存放在 `Custom shapes` 資料夾中,任何能連上伺服器的裝置都能使用;它的資料夾就是 `Custom shapes` 內的資料夾。兩邊各有自己的資料夾,形狀只會在所屬那一邊的資料夾之間移動。瀏覽器圖磚上的雲端圖示會把該形狀放到伺服器;之後它就不再保留兩份。 + +`Custom shapes` 資料夾也會顯示在起始頁上。在那裡像設計一樣開啟形狀、修改後,它會像伺服器上的任何設計一樣自動儲存;下次插入時用的就是新版本。由於伺服器儲存沒有登入機制,所有能連上伺服器的人看到的都是相同的形狀。 + +## 包覆到圓柱 + +想把圖案、標誌或文字放到杯子、罐子或管子上嗎?先把它平放在平台上,例如匯入的 SVG 或文字,並按照從上方看應有的樣子擺好。然後在形狀設定中的 {{ui:inspector.wrapCylinder}} 下把它包覆到圓柱: + +1. 開啟 {{ui:inspector.wrapCylinder}},輸入圓柱壁的 {{ui:inspector.wrapDiameter}},例如杯子的外徑。也可以精確到小數一位,例如 63.5。 +2. 點擊 {{ui:inspector.wrapApply}}。原本由左往右延伸的內容現在繞著圓柱延伸,後緣變成頂部,厚度則從壁面往外突出。 +3. 選取包覆後的形狀與圓柱,讓兩者在左右與前後方向都置中。包覆後形狀的中線就是圓柱的軸線,因此它會正好貼在壁上。 + +若要雕刻,請開啟 {{ui:inspector.wrapInward}}:厚度此時會陷入壁內。把形狀設為孔、置中,然後與圓柱群組。 + +已經包覆過的形狀是包覆後物件的網格,不能再次包覆:復原這次包覆,或用另一個直徑重新包覆原來的平面形狀。 + +結果像匯入的模型一樣是網格。復原會把形狀重新攤平;想換直徑,先復原再重新包覆。包覆範圍不能超過圓柱一圈;超過時 layerling 會指出能夠容納的最小直徑。 diff --git a/docs/guide/zh-tw/04-select-and-arrange.md b/docs/guide/zh-tw/04-select-and-arrange.md new file mode 100644 index 00000000..3b4005d3 --- /dev/null +++ b/docs/guide/zh-tw/04-select-and-arrange.md @@ -0,0 +1,164 @@ +--- +title: 選取與排列 +summary: 選取形狀、在物件清單中找到它們、對齊、鏡像、旋轉、平放在某個面上,以及依陣列複製。 +--- + +## 選取 + +點擊形狀即可選取。按住 [[Shift]] 可以新增更多,也可以再次移除。按住 [[Shift]] 且選取兩個以上形狀時,滑鼠指標下方的小數字會顯示數量。點擊空白處會清除選取,[[Esc]] 也一樣。在空白工作平面上拖出框選框,可選取它碰到的所有內容;按住 [[Shift]] 時,框選框會加入未選取的內容,並移除已選取的內容。如果你想從一叢形狀中只挑出某一個,請在設定中開啟 {{ui:workspace.frameByDirection}}(區域 {{ui:workspace.appearance}}):此時向右拖出的框只包含完全位於框內的形狀,向左拖出的框仍會選取碰到的所有內容,且框線為虛線。拖曳時按住 [[Alt]] 可為這一次拖曳反轉框選方向,例如從該方向不允許的一側框選整個實體。[[Ctrl]]+[[A]] 則選取所有可見實體。拖曳實體或框選框的控點時,只要滑鼠按鍵尚未放開,[[Esc]] 就會取消:一切回到原狀,歷史記錄中也不會新增步驟。 + +擋住視線的東西就隱藏起來({{ui:editor.tool.hideSelected}},[[Ctrl]]+[[H]])。隱藏的形狀仍留在設計中,只是看不見,也不會進入匯出;匯出視窗會事先說明有多少個。[[Ctrl]]+[[Shift]]+[[H]] 可將它們全部重新顯示。應該固定不動的東西,用設定頂端的掛鎖或 [[Ctrl]]+[[L]] 鎖定。鎖定的形狀無法移動、調整大小、旋轉、改色或刪除:它的控點會變灰,頂端箭頭旁會顯示掛鎖,會改變它的工具也會變灰。將游標停在控點上仍會顯示尺寸,按下任何會改變它的按鍵都會提示「物件已鎖定」。只要選取範圍中包含一個鎖定形狀,其他形狀也不會有任何變化。隱藏、重新命名、複製和建立副本仍然可用。 + +{{ui:editor.group.visibility}} 群組按鈕上的數字表示隱藏了幾個形狀,點擊它即可全部重新顯示。開啟帶有隱藏形狀的設計時,會提示一次,並提供顯示它們的按鈕。 + +## 物件清單 + +零件一多,檢視畫面裡很容易失去頭緒。物件清單({{ui:editor.tool.showOutliner}} 或 [[Ctrl]]+[[Shift]]+[[O]])以清單顯示所有形狀。無論哪個設計,它都會保持你上次的開啟或關閉狀態,直到你關閉它;這個選擇會儲存在瀏覽器中。 + +![物件清單:名為「Group」的群組包含兩個零件,旁邊有一個球體。資料夾圖示可展開該群組。](shot:object-list) + +- 點擊條目即可選取形狀,包括群組內部的零件。按住 [[Shift]] 可加入或移除條目,與在檢視畫面中一樣。箭頭可展開和收起群組。 +- 標籤顯示零件是 {{ui:outliner.solid}} 還是 {{ui:outliner.hole}}。 +- 掛鎖和眼睛圖示可鎖定和隱藏個別零件。 +- {{ui:outliner.rename}} 可給零件一個自己的名稱;設定頂端名稱旁的鉛筆按鈕對選取的形狀有相同作用。在較大的設計中,命名得當會非常實用。 +- 搜尋欄位會依名稱和種類尋找形狀,因此也可以搜「圓柱體」或「孔」。它也會搜尋群組內部,無論巢狀多深:含有符合條目的群組會留在清單中並展開,顯示符合的零件以及通往它們的各層群組。依自身名稱找到的群組,展開後會顯示其全部零件。 +- 標題列最左側的箭頭可將清單摺疊到標題列,再展開。 + +清單停靠在視圖立方體右側。拖曳標題列可將它放到工作平面上的任何位置;它會從視圖立方體和相機列下方穿過。拖回視圖立方體旁邊,或雙擊標題列,它就會重新停靠。它原來的位置以及是否摺疊,都會記在這個瀏覽器中。 + +## 輸入位置 + +屬性面板中的 {{ui:inspector.position}} 卡片顯示選取實體所在的位置,也可以直接輸入:{{ui:prop.positionX}} 和 {{ui:prop.positionY}} 是實體外框中心在平台上的位置,正負號與工作平面上顯示的距離一致,{{ui:prop.positionZ}} 是其底面的高度。X 向右計算,Y 向後,Z 向上,遵循與 Tinkercad 和 CAD 程式相同的右手定則;平台上的座標軸箭頭顯示方向。數值使用你設定的單位,滑桿的可調範圍與拖曳時一樣。 + +## 把零件停在平台旁 + +你可以把形狀拖過平台邊緣並留在那裡,大約超出每邊一個平台寬度,以便留待後用。方向鍵可把它移到任意遠。停放的零件仍屬於設計,會和其他內容一起匯出。若要排除它,請隱藏它,或只匯出選取範圍。如果已選擇印表機,當有內容位於其平台之外時,layerling 會在匯出時提出警告。 + +## 移動時吸附 + +在工作平面上拖曳形狀時,它會吸附到其他形狀:其左、右、前、後邊緣或中心會精確落在另一個形狀的邊緣或中心上。粉紅色參考線會顯示它正對齊到什麼。這樣兩個零件無需輸入數字就能並排貼齊或前後居中。關閉網格時也同樣有效。 + +拖曳時按住 [[Shift]] 可將移動限制在一個軸上:形狀會沿你拖曳較多的方向(X 或 Y)移動,另一個方向保持不變。最好在已經開始拖曳後再按 [[Shift]];對於尚未選取的形狀,按住 [[Shift]] 點擊只會把它加入選取。 + +如果拖曳開始時已經按住 [[Alt]],拖曳的就是副本,與 Tinkercad 一樣:原形狀留在原處,副本落在你放開的位置。只在拖曳途中按 [[Alt]] 會暫停吸附;此時形狀只跟隨網格。副本也只有在途中放開 [[Alt]] 後才會吸附。要永久關閉吸附,請使用右下角的網格選單({{ui:inspector.objectSnap}})或設定。目前只有正常在工作平面上的移動會吸附,抬升和調整大小不會。 + +## 對齊 + +選取兩個以上形狀後,用 {{ui:editor.tool.align}} 將它們對齊:選取範圍周圍會出現左、中、右,前、中、後,以及上、中、下的點。點擊某個點即可將所有形狀移到那裡。如果先點擊選取的其中一個形狀,它會留在原處,其他形狀與它對齊。選取範圍中若有鎖定形狀,那個固定形狀本身就是基準。左、右、前、後、上、下都以形狀的外框為準;三角形、五邊形或星形的中心是其自身中心,因此以它為中心的孔會位於形狀中心,而不是其外框中心。 + +以某個角度轉過的形狀(例如 45°)對齊時,依據的是它的外框,而不是它自身的邊。要依邊對齊,先在該形狀的某個面上設定工作平面({{ui:camera.placeWorkplane}},然後點擊該面):這些點便會立在那個平面的座標軸上,形狀也沿這些軸量測和移動,與 Tinkercad 一樣。重設工作平面,即可重新沿平台對齊。 + +![對齊工具用圓點在選取範圍周圍顯示可對齊的目標。](shot:align) + +快速鍵是 [[L]]。[[Esc]] 取消。 + +## 鏡像 + +{{ui:editor.tool.mirror}}([[M]],或右鍵點擊選取範圍並選擇它)會讓選取範圍沿某個平面翻轉:{{ui:mirror.leftRight}}、{{ui:mirror.frontBack}} 或 {{ui:mirror.topBottom}}。點擊對應的軸箭頭即可。這對對稱零件很方便:做好一半,複製一份,再鏡像副本。 + +## 旋轉與設定旋轉中心 + +可以用形狀上的弧形箭頭、設定中的數值,或按 [[R]] 以 45° 為步長旋轉。在旋轉圓環上拖曳時,旋轉會吸附到每個刻度,也就是每 22.5°;按住 [[Shift]] 可更精細,並會每隔 11.25° 出現額外刻度。在圓環外拖曳可自由旋轉,步長為 1°,按住 [[Shift]] 則為 45°。通常選取範圍會繞其中心旋轉。有時不該如此,例如要讓一根傾斜的管在其端部繼續旋轉。這時可用 {{ui:editor.tool.rotationPivot}}:之後點擊某個面。平面會提供其中心,例如管端的軸線。選取範圍現在會繞該點旋轉。再次點擊該工具可移除旋轉中心。 + +角度會隨實體保留。在其設定中,{{ui:inspector.rotation}} 以 {{ui:prop.rotateX}}、{{ui:prop.rotateY}} 和 {{ui:prop.rotateZ}} 顯示角度,命名與位置相同:Y 橫越平台,Z 向上。在那裡輸入角度,實體便會轉到該角度——繞其中心,或繞它自己的旋轉中心(如果有)。選取轉過的實體時,其角度也會顯示在工作平面上它下方;設定中的 {{ui:workspace.showRotationAngles}} 可關閉此顯示。 + +![一個繞兩個軸轉動的實體:角度顯示在它下方,設定中的旋轉卡片可將它們作為數值輸入。](shot:rotation-card) + +選取**一個實體**時,旋轉中心屬於該實體:選取其他零件再回來,它仍然存在。它會隨實體移動、旋轉和縮放,儲存在專案中,並可透過復原還原。在 {{ui:inspector.position}} 下,旋轉中心有自己獨立的 X、Y 和 Z,可以輸入或微調,{{ui:inspector.pivotRemove}} 可將其移除。你也可以用滑鼠拖曳旋轉中心的紅色標記:它會在實體表面滑動,並吸附到角、邊中點和邊上,因此鉸鏈銷能精確落在某個角上。選取多個實體時,旋轉中心只屬於當前選取範圍,重新選取就會移除它。 + +## 平放在某個面上 + +想讓零件以最適合列印的一面朝下嗎?選取它,點擊 {{ui:editor.tool.layFlat}},然後點擊應該朝下的面。當指標在零件上移動時,指標下方的面會亮起,讓你看見即將選取哪個面;轉動檢視畫面可以檢查其他面。零件會轉動,使該面貼在工作平面上。 + +兩個零件需要面對面,或貼齊對齊?選取應該移動的零件,點擊 {{ui:editor.tool.mateFaces}},然後依序點擊它的一個面和另一個零件的面。在面板中,{{ui:mate.mode.against}} 讓兩個面相對(背對背、接觸),{{ui:mate.mode.flush}} 將它們並排放在同一平面;{{ui:mate.gap}} 在它們之間留出空間,例如用於間隙。{{ui:mate.apply}} 會移動該零件:它以最短路徑轉動,直到兩個面平行——如果已經平行則不轉動——然後只朝另一個面滑動,因此橫向位置保持不變。另一個零件留在原處,一次復原即可全部還原。 + +![對齊面面板:先選取要移動的零件,再選另一個零件的一個面,然後選擇面對面或貼齊,並可設定間隙。](shot:mate-faces) + +**兩個面之間的精確角度:** {{ui:editor.tool.mateFaces}} 只會讓面平行;沒有專門處理面間角度的工具,但可以這樣做到。先用 {{ui:editor.tool.mateFaces}} 讓兩個面靠在一起,使它們平行。然後在它們相交的邊上設定旋轉中心({{ui:editor.tool.rotationPivot}},點擊該邊或某個角),再在零件的 {{ui:inspector.rotation}} 卡片中輸入角度,例如 15 或 30。零件會繞該旋轉中心轉動。卡片中的軸是平台的軸,因此當該邊沿 X、Y 或 Z 方向時,這個方法有效。 + +同樣簡單的還有 {{ui:editor.tool.dropToWorkplane}}([[D]]),它把選取範圍落到工作平面上,以及 {{ui:editor.tool.centerOnWorkplane}}。 + +[[C]] 會拾起選取範圍,就像 Tinkercad 中的 Cruise:它跟隨滑鼠指標,並平放在你正懸停的另一個實體面上,斜面也可以。點擊即可放下,[[Esc]] 則讓它留在原處。其底面隨後貼在該面上,像新建形狀一樣與面的邊緣對齊;它保留自身繞垂直軸的旋轉。多個零件會一起移動並保持間距。在空白平台上,[[C]] 會讓傾斜的零件重新直立在工作平面上。沒有鍵盤時,長按選單中有 {{ui:contextMenu.carry}} 可達到同樣效果。 + +## 陣列:直線與圓周 + +孔陣列、螺栓圓周和齒圈可以用 {{ui:editor.tool.array}}。選取要複製的形狀,然後在功能區中點擊它。 + +![圓周模式下的陣列:副本首先以預覽形式出現。](shot:pattern-tool) + +- **{{ui:array.mode.row}}:** 選取範圍會以相等間距重複。直線陣列可同時沿三個軸逐步排列,使用 {{ui:array.spacingX}}、{{ui:array.spacingY}} 和 {{ui:array.spacingZ}}:其中一個給出直線排列,兩個或三個則給出斜線或階梯排列。負間距會讓排列朝相反方向。 +- **{{ui:array.mode.circle}}:** 選取範圍會圍繞一個中心分布。副本數量在 {{ui:array.count}} 中設定,{{ui:array.angle}} 為 360° 時是整圈。可選擇副本是否隨之轉動。{{ui:array.rise}} 讓每個副本比前一個略微升高(螺絲或上升螺旋),{{ui:array.radiusChange}} 讓它離中心更遠或更近(平面螺旋);兩者結合則形成錐形螺旋。螺旋最多繞一圈:角度超過 360° 以整圈計算,副本最多 100 個。 + +提示:先用 {{ui:editor.tool.rotationPivot}} 在某個面上設定旋轉中心,圓周的中心就會正好落在那裡。 + +![圓周模式下的陣列,每個副本帶有升高和半徑變化:副本像螺旋一樣逐漸升高並擴大。](shot:pattern-spiral) + +副本首先以預覽形式出現。只有 {{ui:array.apply}} 才會建立它們。如果副本是孔,之後請將它們與要挖入的實體群組。 + +## 在面上製作孔陣列 + +對於通風口、喇叭格柵、籃子和外殼,{{ui:holePattern.title}} 會在平面上均勻分布孔。你不必再先做一個孔、重複它,再把它放到壁上。只選取一個實體,然後點擊 {{ui:holePattern.title}},它位於工具列的 {{ui:editor.group.modify}} 群組中、陣列旁邊。也可以右鍵點擊實體,或用 [[Ctrl]]+[[K]] 找到它。 + +1. 點擊實體的一個平面。你點擊處周圍的整個平面都算數,而不只是指標下的三角形。曲面不行:會給出提示,請改選一個平面。 +2. 在視窗中設定孔的外觀和排列: + - **{{ui:holePattern.form}}:** {{ui:holePattern.form.round}}、{{ui:holePattern.form.square}}、{{ui:holePattern.form.rectangle}}、{{ui:holePattern.form.hexagon}} 或 {{ui:holePattern.form.slot}}。 + - **大小:** 圓孔用 {{ui:holePattern.size.diameter}},方孔用 {{ui:holePattern.size.side}},矩形和槽孔用 {{ui:holePattern.size.width}} 與 {{ui:holePattern.size.height}}。六邊形的大小是 {{ui:holePattern.size.corners}}。 + - **{{ui:holePattern.spacing}}:** 從一個孔的中心到下一個孔中心的距離。如果它小於孔所允許的最小值,layerling 會將其提高到最小可能值,以便孔之間保留壁。 + - **{{ui:holePattern.wall}}:** 同一距離的另一種說法:相鄰兩個孔之間留下的壁,也就是列印件中的壁厚。設定它,中心距會隨之變化,反之亦然。對於六邊形、矩形和槽孔,layerling 會量測它們邊緣之間的最短距離。 + - **{{ui:holePattern.arrangement}}:** {{ui:holePattern.arrangement.grid}} 將孔排成列與欄。{{ui:holePattern.arrangement.staggered}} 將每隔一列錯開半個間距,並讓列更靠近,使每個孔到相鄰孔的距離相同——用於六邊形時便形成蜂巢。 + - **{{ui:holePattern.margin}}:** 孔與面邊緣之間的淨距離。只有完全位於「面減去此邊距」範圍內的孔才會製作;任何會超出該範圍的孔都會被略過。面中的開口周圍也會保留此邊距。 + - **{{ui:holePattern.depth}}:** {{ui:holePattern.depth.through}}(預設)會切穿整面壁。使用 {{ui:holePattern.depth.custom}} 時,以公釐為單位給出深度,例如用於凹槽。 +3. 孔會立即在面上以預覽形式顯示,並跟隨每個數值變化。視窗會說明能容納多少個孔。{{ui:holePattern.repick}} 可選擇另一個面,[[Esc]] 關閉工具;和其他工具視窗一樣,可拖曳其標題列移動。 +4. 只有 {{ui:holePattern.apply}} 才會真正製作孔。 + +這些孔是與實體群組的普通孔,就像使用 {{ui:editor.tool.group}} 之後一樣:沒有任何內容被固化。{{ui:editor.tool.ungroup}} 會再次解散群組並釋放每個孔,之後你可以逐一移動、修改或刪除。整個操作在 {{ui:editor.tool.undo}} 中算一步。該工具一次最多製作 400 個孔;超過時請把孔做大或把間距加寬。 + +AI 可以透過 MCP 橋接使用 `layerling_perforate_face` 完成同樣的事(參見 [AI 與 MCP](chapter:ai-with-mcp) 一章)。 + +## 將面推出或推入 + +要加厚壁、在面上加凸台或在面上挖凹槽,可使用 {{ui:faceTool.title}} 工具處理一個平面。它也可用於匯入的 STL,那裡沒有草圖可改。只選取一個實體,然後點擊 {{ui:faceTool.title}},它位於工具列的 {{ui:editor.group.modify}} 群組中、孔陣列旁邊。也可以右鍵點擊實體,或用 [[Ctrl]]+[[K]] 找到它。 + +1. 點擊實體的一個平面。與孔陣列一樣,你點擊處周圍的整個平面都算數;曲面不行。 +2. 在視窗中: + - **{{ui:faceTool.direction}}:** 選擇 {{ui:faceTool.direction.out}} 讓材料凸出於面,或選擇 {{ui:faceTool.direction.in}} 挖出凹槽。凹槽不會比面後方的實體更深;在抽殼實體上,它仍可通向內部空腔。 + - **{{ui:faceTool.inset}}:** 新輪廓在面邊緣內縮多少。向外時,0 會取整個面,從而加厚壁。面中的開口會按同樣數值擴大。 + - **{{ui:faceTool.radius}}:** 圓化輪廓的每個角,包括內角,因此尖角末端會變成圓弧。窄於兩倍半徑的缺口會閉合,而窄於內縮量與半徑之和兩倍的那部分面會被略過。 + - **{{ui:faceTool.depth}}:** 新部分凸出於面多少,或凹槽有多深。 +3. 結果會立即以預覽形式顯示,並跟隨每個數值變化。{{ui:faceTool.repick}} 可選擇另一個面,[[Esc]] 關閉工具。 +4. 只有 {{ui:faceTool.apply}} 才會真正執行。 + +該工具加入的是一個與實體群組的普通草圖實體:沒有任何內容被固化。{{ui:group.edit}} 可開啟群組,對新零件使用 {{ui:inspector.editSketch}} 可查看它遵循的輪廓。在普通草圖實體的頂面或底面——單一區域、未群組、未鏡像、未錐化、未扭曲或傾斜,且沒有描邊、鑰匙圈、圓角或倒角——那就是實體自身的輪廓,在建立時嵌入,因此只要 CAD 核心能嵌入,其直線和圓弧就保持精確,可供邊工具和 STEP 匯出使用。之後調整大小時,該零件會保留其內縮量。在任何其他面上,以及匯入網格的每個面上,輪廓都跟隨面的三角形,曲線由短直線段組成。整個操作在 {{ui:editor.tool.undo}} 中算一步。之後若要變更內縮量或半徑,請復原並重新執行該工具。若之後要圓化頂邊,請在最後一步對群組使用 {{ui:editor.tool.fillet}} 和 {{ui:edge.topEdges}}:與群組上的所有邊處理一樣,這會將群組合併為一個實體。 + +AI 可以透過 MCP 橋接使用 `layerling_push_face` 完成同樣的事(參見 [AI 與 MCP](chapter:ai-with-mcp) 一章)。 + +## 同時修改多個零件 + +選取多個零件時,右側的屬性面板會顯示數量,並提供適用於所有零件的操作:{{ui:inspector.solid}} 或 {{ui:inspector.hole}}、統一顏色(點擊 {{ui:inspector.solid}} 會開啟顏色)以及鎖定。對於混合選取,點擊一次即可全部設為實體或全部設為孔。只要有任一零件被鎖定,就只能使用鎖定。可透過控點、{{ui:scalePercent.title}},或在尺寸標籤中輸入數字來變更尺寸。選取多個零件時,該數字表示整個選取範圍的尺寸:每個零件都會隨之增大,它們之間的間距也會,就像拖曳控點一樣。實體和孔也可透過右鍵點擊或 [[S]]、[[H]] 鍵切換。 + +## 依百分比縮放 + +要按相同比例放大或縮小一個或多個零件——比如把某個列印檔案的所有零件放大 20 %——請使用 {{ui:scalePercent.title}}。選取零件,右鍵點擊並選擇 {{ui:scalePercent.title}},或用 [[Ctrl]]+[[K]] 搜尋它。 + +在 {{ui:scalePercent.percent}} 下,以目前尺寸的百分比輸入新尺寸:120 % 表示放大五分之一,50 % 表示縮小一半。寬度、深度和高度會同樣變化,因此比例保持不變。底部保持在原處,所以不會有東西陷入平台。 + +選取多個零件時,可以選擇它們如何增長: + +- **{{ui:scalePercent.mode.together}}:** 零件圍繞它們的共同中心增大,間隙也隨之增大。整體就像一個零件一樣變大。 +- **{{ui:scalePercent.mode.each}}:** 每個零件在原地增大,它們之間的間隙保持不變。 + +只有 {{ui:scalePercent.apply}} 會變更設計,後退一步即可復原。如果選取範圍中包含鎖定零件,則不會開啟該工具。 + +## 復原 + +{{ui:editor.tool.undo}}([[Ctrl]]+[[Z]])和 {{ui:editor.tool.redo}}([[Ctrl]]+[[Shift]]+[[Z]] 或 [[Ctrl]]+[[Y]])會在歷史記錄中前後步進。儲存的設計會附帶多少步歷史,可在設定中的 {{ui:workspace.history}} 下設定。 + +## 回看:歷史記錄檢視 + +復原和重做旁邊的 {{ui:editor.tool.history}} 會開啟歷史記錄檢視,而不會變更任何內容。工作區顯示當時的設計,底部的滑桿可瀏覽每個復原步驟:最右端是目前狀態,向左每一步都早一次復原,而已經復原掉的狀態會位於目前狀態的右側。方向鍵可逐步瀏覽這些狀態,[[Esc]] 返回目前狀態。在滑桿上滾動滑鼠滾輪也有同樣效果,每格一個狀態,直到更早的狀態;[[Page Up]] 和 [[Page Down]] 跳十個狀態,[[Home]] 跳到最舊的狀態,[[End]] 回到目前狀態。期間你可以旋轉和縮放檢視畫面,並點擊物件將其帶回(見下文),但不能移動任何東西;設計本身保持原樣。如果這條列擋住了內容,可拖曳其標題列移開;雙擊它可使其歸位。 + +有兩種方式可以從較早的狀態帶出內容。{{ui:historyView.createProject}} 會把該狀態放入起始頁中的新設計,以目前設計的名稱命名,並在括號中帶上該狀態的時間——在 layerling 記錄時間之前儲存的設計則顯示「副本」——同時附帶截至該時間點的歷史記錄,因此復原在那裡仍然可用。{{ui:historyView.export}} 會以該狀態作為設計開啟一般的匯出視窗,因此你可以將它儲存為 STL、3MF、STEP、圖片或 LYL 檔案,並帶有截至該狀態的歷史記錄。 + +你也可以把單一物件帶回設計。在所示狀態中點擊一個物件——[[Shift]]+點擊可加入更多或再取消一個,點擊空白處則什麼都不選——然後選擇 {{ui:historyView.bringBack}}。檢視關閉,每個物件的副本會進入目前設計,與該狀態中完全一樣,並位於它當時所在的位置,處於選取狀態,與設計目前的內容並排;其他內容不變。這是一步操作,因此復原即可還原。可用於帶回你後來改過的某個零件版本,或帶回你刪除過的零件。群組會整組帶回;物件上的備註和參考點則不會帶回。其名稱會帶上該狀態的時間,例如「長方體(12:32)」,因此很容易與設計目前的版本區分。要從群組內部帶回零件,請選取該群組並選擇 {{ui:historyView.openGroup}} 或按 [[E]],與在設計中的操作一樣:其零件會擺放在編輯群組時它們應在的位置,可供挑選,這條列會顯示你正位於哪個群組。{{ui:historyView.backOut}} 可再次關閉。這只是查看——群組、設計和歷史記錄都保持原樣。 + +{{ui:historyView.delete}} 單獨位於這條列的左下角。經確認後,它會永久移除所有較早的步驟:設計保留目前的狀態(不是所顯示的狀態),復原沒有可回退的內容,之後儲存的檔案也不帶歷史記錄。可用它在分享設計時去掉過去的歷史,或重新開始復原步驟。此操作無法復原;若要分享檔案而不影響自己的設計,請在匯出時選擇 {{ui:export.historyNone}}。 diff --git a/docs/guide/zh-tw/05-solids-and-holes.md b/docs/guide/zh-tw/05-solids-and-holes.md new file mode 100644 index 00000000..45863e81 --- /dev/null +++ b/docs/guide/zh-tw/05-solids-and-holes.md @@ -0,0 +1,86 @@ +--- +title: 實體與孔 +summary: 簡單的形狀如何變成內孔、槽與凹槽,以及之後如何再次修改群組。 +--- + +這是 layerling 中最重要的概念,而且很快就能學會:**每個形狀不是實體就是孔。** 實體會保留下來。孔是一種移除材料的工具。 + +## 實體還是孔 + +選取一個形狀,在其設定中點擊 {{ui:inspector.solid}} 或 {{ui:inspector.hole}}。用鍵盤更快:[[H]] 把選取範圍變成孔,[[S]] 再把它變回實體。在實體上按右鍵開啟的選單裡也有這兩項。孔會以半透明顯示,讓你看到它所在的位置。[[T]] 讓實體變成半透明,例如為了看進外殼內部;再按一次又變回不透明。它對整個選取範圍生效:只要其中有一個實體已經半透明,全部都會變成不透明,否則全部變成半透明。 + +只要還沒有群組,孔就不會有任何作用。它就待在那裡,顯示之後某處會消失。 + +![圓柱體是一個孔。它從立方體頂部伸出,因此能完全切穿。](shot:hole-before) + +## 群組 + +選取實體與一個或多個孔,點擊 {{ui:editor.tool.group}}([[Ctrl]]+[[G]])。現在孔會從它接觸到的實體移除材料。剩下的是單一個新形狀。 + +![結果:一個帶內孔的立方體。](shot:hole-after) + +這樣就能做出: + +- **內孔:** 用一個圓柱體作為孔穿透實體。 +- **槽:** 用一個長條盒體作為孔放在邊緣處。 +- **凹槽:** 沒有穿透的孔。 +- **零件中的螺紋:** 用一個孔做出內螺紋孔,參見[螺紋與機械](chapter:threads-and-mechanics)。 + +如果群組裡有多個實體,它們會連接在一起。兩個接觸的實體會變成一個零件。 + +你可以把群組當成形狀來處理:移動、旋轉、上色、再次群組。{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])會把它解散,各個部件重新獨立。 + +### 讓群組變成孔 + +整個群組也可以是實體或孔。適用一條簡單的規則: + +- 如果群組只由實體(或只由孔)組成,你就整體切換它,它的部件也隨之改變。 +- 如果兩者都有,例如一個帶內孔的立方體,每個部件保持自己的狀態。整個群組於是變成一個工具,但內孔仍然是內孔。 + +## 綁定 + +有時部件只應該保持在一起,而不該合成一個——例如多色列印時黑色平台上的一塊白色標誌。這就是 {{ui:editor.tool.bundle}}([[Ctrl]]+[[B]])的用途,與 Tinkercad 中一樣。綁定可以像形狀一樣移動、旋轉和調整大小,但不會合併任何東西: + +- 每個部件保留自己的顏色,並保持為實體或孔。 +- 孔不切割任何東西。當你把綁定與其他部件群組時,它的孔會切割那些部件,但仍不會切割綁定本身的實體,與 Tinkercad 中一樣。所以,一個旁邊帶著孔的銷釘,可以當作一個綁定反覆使用。 +- 在 STL、3MF 或 OBJ 匯出中,每個部件都是獨立的實體;在 3MF 和 OBJ 中還會帶上顏色。 + +{{ui:editor.tool.ungroup}}([[Ctrl]]+[[Shift]]+[[G]])可以再次拆開綁定,[[E]] 則像開啟群組一樣開啟它進行編輯。倒角、圓角與抽殼對綁定不起作用,因為它不是單一實體:要這樣做就先群組,或逐一處理它的部件。如果綁定中的某個孔也應該切割綁定本身的實體,就把綁定拆開,再對它的部件群組([[Ctrl]]+[[G]])。 + +## 交集 + +{{ui:editor.tool.intersect}} 只保留兩個或多個實體共有的部分。把兩個相互重疊的形狀疊放在一起,全部選取後點擊它。這樣就把一個圓柱體和一個盒體變成一個一面圓、一面直的形狀。群組按它的外觀計算,包括孔。如果孔也被選取,剩下的是所有實體與所有孔共有的部分。如果這些形狀沒有任何共同部分,就不做更改,並會出現訊息說明。旁邊的 {{ui:editor.tool.intersectPreview}} 會在套用之前顯示共同部分:選取的形狀變成半透明,它們共有的部分以綠色繪製。逐一選取並移動每個形狀,綠色部分會跟著變化;{{ui:editor.tool.intersect}} 套用結果,[[Esc]] 關閉預覽。 + +## 編輯群組 + +如果內孔做小了,你不必解散群組再重建。選取群組,在其設定中點擊 {{ui:group.edit}}、點擊物件清單中的資料夾圖示,或按 [[E]]。雙擊群組也一樣,與 Tinkercad 中一樣,對綁定也適用;如果你不希望這樣,在設定中關掉 {{ui:workspace.doubleClickOpensGroup}}。部件要等指標拖動幾個像素之後才開始移動,所以手抖的點擊或雙擊不會把它碰偏。現在部件會分開放置,你可以用任何工具修改它們:把孔做大、移動實體、新增孔。 + +![正在編輯的群組:底部的列上可看到「完成」與「取消」,物件清單顯示各個部件。](shot:open-group) + +畫面底部會出現一條列。{{ui:group.done}} 會重建群組,保留它的名稱、顏色以及實體或孔的狀態。{{ui:common.cancel}} 則原樣放回。 + +如果其中一個部件本身就是群組,你可以用同樣方式編輯它,依此類推,深入到設計有多深都行。列上會顯示你所在的位置,例如「支架 › 螺絲柱」。{{ui:group.done}} 與 {{ui:common.cancel}} 總是結束最內層的群組,並把你退回上一層。當你在某個群組內部時,只能編輯其部件中的群組;要編輯另一個,得先完成目前的編輯。 + +與 {{ui:editor.tool.ungroup}} 不同——後者會永久拆散群組——編輯會保留群組:它的名稱與設定都還在,你隨時可以用 {{ui:common.cancel}} 返回。 + +注意:加在**整個**群組上的圓角與倒角會在重建時消失。列上會提示你。 + +## 分割 + +{{ui:editor.tool.split}} 在 {{ui:editor.group.modify}} 區域中用平面把選取範圍一分為二——例如一個對列印平台來說太大的零件,或一個你想看內部的零件。選取一個或多個實體或孔,然後點擊它。一個半透明平面會明確顯示切割的位置,實體上還會有一條白線標出平面與實體的交線;在你套用之前不會有任何改變。 + +- {{ui:split.orientation}}:**X** 在左右之間做垂直切割,**Y** 在前後之間做垂直切割,**Z** 在上下之間做水平切割。座標軸依「位置」卡片上的命名,Z 朝上。平面一開始平行於工作平面,因此在平台上就沿著 Z 軸。 +- {{ui:split.workplane}}:{{ui:split.workplaneParallel}} 讓平面平行於工作平面,{{ui:split.workplaneAcrossX}} 與 {{ui:split.workplaneAcrossY}} 則讓它與工作平面垂直,橫跨其 X 或 Y 方向。工作平面的原點若穿過選取範圍,平面就經過該點,否則經過中間。於是你可以用 [[W]] 把工作平面放到斜面上,直接在那裡切割,不必轉動滑桿。 +- {{ui:split.position}}:平面在哪裡穿過,用滑桿或輸入數值。一開始位於中間。你也可以拖曳平面上的箭頭;平面會沿箭頭方向以 0.1 mm 的步長移動。 +- {{ui:split.pickFace}},位置旁邊的按鈕,把平面放到一個面上:點擊它,然後點擊那個面。方向、兩個旋轉與位置都會跟著設定。選取時,指標下方會有一個藍色平面,顯示它將採用的面。未選取實體的面也可以,用來讓切割對齊它,但平面仍侷限在選取範圍內。[[Esc]] 停止選取,平面留在原處。 +- 下方兩個旋轉滑桿會繞另外兩個軸轉動平面,各方向最多 180°,用於斜切。兩者可以組合。 + +{{ui:split.apply}} 或 [[Enter]] 執行切割,[[Esc]] 取消(在選取面時,第一次按 [[Esc]] 只會停止選取)。平面穿過的每個物件都會變成兩個封閉實體,依所在側命名,例如「方塊(Z+)」與「方塊(Z-)」;未穿過的物件保持原樣。一個孔會變成兩個孔,抽殼實體則保留它的空腔。兩半都留在原位——要列印的話,用 {{ui:editor.tool.layFlat}} 把每一半放到它的切割面上。 + +兩半是一般網格:圓柱體的邊數或文字的字型等設定都已消失,所以要先設定好這些。[[Ctrl]]+[[Z]] 一步就能還原成原本的物件。鎖定與隱藏的物件無法分割。 + +## 分離部件 + +如果一個形狀由幾個分開的片段組成,例如由單個字母組成的文字,{{ui:inspector.separateParts}} 會把它拆成各自獨立的形狀。在形狀上按右鍵開啟的選單裡也有這一項。 + +> **提示:** 孔總是要做得比它要穿過的零件稍長一些。如果孔剛好在表面處結束,有時會殘留一層極薄的表皮。多伸出 1 mm 就能確保切穿。 diff --git a/docs/guide/zh-tw/06-edges-and-hollowing.md b/docs/guide/zh-tw/06-edges-and-hollowing.md new file mode 100644 index 00000000..14c7e229 --- /dev/null +++ b/docs/guide/zh-tw/06-edges-and-hollowing.md @@ -0,0 +1,98 @@ +--- +title: 邊的修整與實體抽殼 +summary: 對選定的邊做倒角或圓角,為盒子、杯子與殼體抽出等壁厚的空腔。 +--- + +## 為邊做倒角與圓角 + +銳利的邊在列印件上很少好看,而且也不特別堅固。**倒角**把邊斜切掉,**圓角**把邊磨圓。兩者都作用在你點擊的邊上。 + +1. 選取實體(或群組)。 +2. 在功能區點擊 {{ui:editor.tool.fillet}} 或 {{ui:editor.tool.chamfer}},按 [[B]] 開啟圓角、按 [[Shift+B]] 開啟倒角,或在實體上按滑鼠右鍵,從選單中選取。 +3. 實體的邊會亮起。點擊要處理的邊。再點一次可取消該邊。按住 [[Shift]] 可單獨新增或移除一條邊。 +4. 設定尺寸,然後用 {{ui:edge.apply}} 或 [[Enter]] 確認。之後視窗會帶著相同尺寸停留在新實體上,馬上就能接著做下一個圓角或倒角;{{ui:edge.done}}、[[Esc]] 或叉號可關閉它。按住 [[Shift]] 或 [[Ctrl]] 點擊 {{ui:edge.topEdges}}、{{ui:edge.bottomEdges}}、{{ui:edge.verticalEdges}} 或 {{ui:edge.horizontalEdges}} 時,這些邊會加入已選取的邊,而不是取代它們。 + +![「圓角邊」工具:已選取所有銳利的邊,圖中顯示 4 mm 半徑的預覽。](shot:fillet-preview) + +面板位於右上角。如果它擋住你想點擊的邊,抓住標題列把它拖開;下次開啟時它也會在那個位置,{{ui:editor.tool.hollow}} 和 {{ui:editor.tool.array}} 也一樣。雙擊標題列可將它歸位。 + +面板開啟時從形狀清單中選取形狀會關閉面板,且不套用任何變更,你點過的邊也會被清除。這一次點擊會放置新形狀,而不是選取邊。 + +面板中包括: + +- {{ui:edge.allSharpEdges}} 一次選取所有邊,{{ui:edge.clear}} 清空選取。 +- 圓角用 **{{ui:edge.radius}}**。倒角則設定 {{ui:edge.distance}} 或 {{ui:edge.angle}}。 +- {{ui:edge.variableRadius}}(僅圓角)讓半徑沿著一條邊變化:一端小、另一端大,中間均勻過渡,例如直壁與斜壁相接處。先點擊單一條邊,再設定 {{ui:edge.radiusStart}} 和 {{ui:edge.radiusEnd}}。哪一端算起點取決於這條邊是如何建立的;如果較大的半徑出現在錯誤的一端,可用 {{ui:edge.swapEnds}} 對調。它一次只處理一條邊,所以多條邊要依序倒圓。{{ui:edge.editAction}} 可把兩個數值叫回來。 +- {{ui:edge.sharpThreshold}} 決定哪些邊算作銳利的邊。設為 25° 時,只有明顯的折角才算邊,平緩的過渡不受影響。 +- {{ui:edge.verticalEdges}} 選取垂直向上的邊,例如長方體的角:一次圓角就能把所有垂直的角一起倒圓。 +- {{ui:edge.topEdges}} 只選取實體最頂部的邊。做餅乾模具時這是快捷做法:在草圖裡用描邊畫出輪廓,再對頂部的邊做倒角。{{ui:edge.angle}} 設定倒角的陡峭程度;倒角深度不會超過壁厚。 +- {{ui:edge.bottomEdges}} 只選取實體最底部的邊,是 {{ui:edge.topEdges}} 的鏡像。想只對零件底部做圓角或倒角時,這是快捷做法。 +- 在倒角視窗頂部 {{ui:editor.tool.chamfer}} 旁選取的 {{ui:edge.chamfillet}},用來做出零件可列印的底部:在列印平台處是一段倒角,朝壁面方向相切過渡為圓角,這樣最初幾層不需要支撐,邊的收尾依然柔和。{{ui:edge.distance}} 是底部佔用的高度,{{ui:edge.angle}}(15° 到 75°)是平台處倒角的陡峭程度。用 {{ui:edge.bottomEdges}} 選取邊。 +- {{ui:edge.onlyVisibleEdges}} 會隱藏從你的視角看位於實體背後的邊。預設情況下所有邊都會穿透實體顯示,零件複雜時很容易看得眼花;開啟這個開關後,你只會看到並能點擊朝向你的邊。轉動視圖才能處理其餘的邊。以紅色繪製的邊(見下文)一律會顯示。 +- {{ui:edge.tangentChains}}:點擊時還會一併選取彼此平順相接的邊,例如帶圓角的面周圍的所有邊。這個開關只決定點擊會選取哪些邊:CAD 核心總會讓倒角或圓角沿著這類平順延續的邊延伸下去。面板會告訴你這還會沿著多少條額外的邊發生。 +- {{ui:edge.keepSize}} 即使之後縮放實體,也讓倒角或圓角保持原本的大小。 +- {{ui:edge.previewQuality}}({{ui:edge.draft}}、{{ui:edge.standard}} 或 {{ui:edge.fine}})決定預覽的計算精細度。零件複雜時 {{ui:edge.draft}} 比較快。 + +你調整尺寸時,layerling 會重新計算預覽。這可能需要一點時間。你可以繼續調整;最後計算的是你最後選擇的數值。 + +如果尺寸對這條邊來說太大,layerling 會提示,並建議較小的值。通常少個一、兩公釐就夠了。在尖銳的夾角處,圓角需要的空間比半徑看起來的還多。螢幕較小時,面板會自動向下捲動,讓訊息出現在畫面中。 + +原本可行的選取,在你多點一條邊之後失敗時,那條邊會變紅並畫得更粗:在目前的尺寸下,它無法與其他邊一起處理。再點一次將它移除,或把尺寸調小。提示還在時繼續點擊其他邊,最早出問題的那條會保持紅色。如果沒有先前可行的選取——例如第一次點擊,或你剛調大的尺寸——則單獨處理也失敗的邊會變紅;若只是它們的組合失敗,就全部變紅。 + +滑鼠指標下方的邊也會畫得更粗,讓你看得出點擊會選取哪一條。 + +### 取消邊處理 + +處理過的實體隨時可以再處理。重新選取它並開啟工具——圓角、倒角或抽殼都會顯示這份清單:在 {{ui:edge.featureHistory}} 下可以看到它上面已經有哪些處理。{{ui:edge.revertAction}} 可取消單次處理。注意:如果上面還疊著較新的處理,它們會一併取消,面板會告訴你有幾項。 + +倒角、圓角或抽殼旁邊還有 {{ui:edge.editAction}}。它會以同樣的方式取消該處理,但立刻用相同的邊和原本的數值重新開啟工具。你修改數值後再套用即可:3 mm 的圓角變成 5 mm,不必再點一次邊。如果上面疊著較新的處理,這裡它們也會一併取消。這適用於從今以後做的邊處理;更早的處理只提供取消,群組中的單一部件也是如此。 + +對群組(例如帶孔的圓柱體)來說,被處理的邊屬於最終成形的實體,不屬於其中任何一個部件。因此群組會變成單一實體。{{ui:editor.tool.ungroup}} 對它仍然有效:它會先取消邊處理特徵,再解散群組,整個過程一步完成,[[Ctrl]]+[[Z]] 即可復原。照上文所述取消該處理,群組就會帶著所有部件還原。最省事的做法是把邊處理留到最後。螺紋也是如此:邊工具把螺紋當作它的精確實體,所以帶螺紋孔的方塊可以在螺紋就位的情況下把邊倒圓。計算螺紋的邊比一般形狀久,M6 需要幾秒,G1/2 管螺紋約需半分鐘。 + +> **值得了解:** layerling 對圓角和倒角使用真正的 CAD 幾何,而不只是三角網格。因此倒圓的邊在 STEP 匯出中依然是倒圓的邊。 + +以 STEP 匯入的零件也會保留它的 CAD 幾何:倒角、圓角和抽殼都作用在檔案中的實體上,無論螢幕上把零件畫得多精細。STL、OBJ 和 3MF 只帶來三角形,畫得精細的零件可能對邊工具來說過於稠密。如果某個零件也有 STEP 版本,就匯入那個。 + +## 實體抽殼 + +盒子、杯子、殼體和蓋子都有一個共同點:內部是空的,而且壁厚均勻。這正是 {{ui:editor.tool.hollow}} 做的事。 + +1. 選取實體並點擊 {{ui:editor.tool.hollow}},或在實體上按滑鼠右鍵,從選單中選取。 +2. 設定 {{ui:shell.wall}}。 +3. 在 {{ui:shell.openings}} 下開啟要保持開口的面:{{ui:shell.side.top}}、{{ui:shell.side.bottom}}、{{ui:shell.side.front}}、{{ui:shell.side.back}}、{{ui:shell.side.left}} 或 {{ui:shell.side.right}},想開幾個都行——只開 {{ui:shell.side.front}} 會做出抽屜槽,開 {{ui:shell.side.left}} 和 {{ui:shell.side.right}} 則做成通道。一個面都不開時,實體四周封閉,中間留有空腔。{{ui:shell.side.closed}} 一鍵關掉所有面。面板開啟時 {{ui:shell.side.top}} 已經處於開啟狀態;再點擊它就會把頂部重新封起來。四周封閉的實體從外面看沒有變化:剖視圖會顯示空腔。 +4. 決定 {{ui:shell.edges}} 要 {{ui:shell.edges.round}} 還是 {{ui:shell.edges.sharp}}。 +5. 點擊 {{ui:shell.apply}}。 + +![抽殼面板,包含壁厚、每個保持開口的面各自的開關,以及內壁的邊。](shot:hollow-panel) + +壁會向內部生長。外部維持原樣。 + +{{ui:shell.edges}} 只會在內壁分開的地方才有影響——實體上的段差處或開口周圍。一般長方體的空腔角落,在兩種設定下都是尖的。想要圓潤的內側,先對實體的外邊倒圓(見上文),再抽殼:內側會以半徑減去壁厚的數值跟隨。如果圓潤的內側做不出來,例如輪廓由大量很短的直線段組成時(比如描繪的圖形),layerling 會改用尖銳的內角建構同樣的抽殼實體。 + +![結果:壁厚 3 mm、頂部開口的殼體。](shot:hollow-result) + +![同一個盒子,只開前面:一個抽屜槽。](shot:hollow-sides) + +每個開口面都要求實體在該側最邊緣處有一塊平面。因此球體和自由曲面形狀不能這樣抽殼。如果壁厚對實體來說太厚,layerling 會提示,並要求改用更薄的壁厚。上下邊也做了圓角的長方體就是這種情況:它的壁厚必須明顯小於那個圓角,或者先把圓角設為 0。 + +帶凹槽的實體——例如把長方體與一個抬高的孔群組,做出沒有穿透的孔——也能抽殼,並讓頂部開口:凹槽周圍的壁同樣會被抽空,於是外壁與凹槽之間留下一圈頂部開口的空腔,而凹槽底面之下還有一層薄空腔。 + +**以尖端收尾的實體,**例如圓錐或旋轉出的三角形,頂部沒有可以保持開口的平面。全封閉的空腔在這裡也行不通,因為尖端無法向內偏移:即使壁厚只有 1 mm,也會出現無法使用這種壁厚的訊息。改為在旋轉之前把壁畫進斷面輪廓:複製輪廓、將副本等比縮小、放到大輪廓中央並用它切掉大輪廓,再旋轉整個結果(見「草圖」章節的「旋轉」一節)。兩條輪廓之間的距離就是壁厚。 + +之後調整已抽殼實體的尺寸時,layerling 會立刻按新尺寸重新抽殼。壁厚保持你選擇的厚度,圓形實體也一樣。圓柱體若某一方向拉得比另一方向多,就會變成橢圓。 + +> **提示:** 使用 0.4 mm 噴嘴時,1.2 到 2 mm 的壁厚是不錯的起點:夠薄以節省材料,夠厚讓零件結實。 + +## 刪除面 + +擋路的圓角、位置不對的孔、不再需要的凸台:{{ui:editor.tool.deleteFace}} 可以把它從實體上去掉,不必重新建構實體。 + +1. 選取實體並點擊 {{ui:editor.tool.deleteFace}},或在實體上按滑鼠右鍵,從選單中選取。 +2. 點擊要移除的每個面:圓角的各個面、孔的壁面、凸台的側面和頂面。選取的面會亮起;再點一次可取消。面板會計算已選的面數。 +3. 點擊 {{ui:deleteFace.apply}} 或按 [[Delete]]。[[Esc]] 關閉工具,不做任何變更。 + +被刪除面周圍的面會延伸,直到補上空隙。頂部邊做了圓角的長方體會回復銳利的邊,孔被填平,凸台消失。實體保持精確,因此還能再做圓角和倒角,STEP 匯出也會保留它真實的面。[[Ctrl]]+[[Z]] 可一步復原刪除。它也會與圓角、倒角一起列在 {{ui:edge.featureHistory}} 下,在那裡可用 {{ui:edge.revertAction}} 取消;它沒有 {{ui:edge.editAction}}。對群組而言,結果是單一實體,與邊處理相同。 + +選取要移除的所有面,而且只選這些面。如果周圍的面無法補上空隙,layerling 會提示,且不會有任何變更:例如長方體的一個主側面,就沒有能頂替它的相鄰面。只刪除凹槽的底面,會讓它變成直接穿透的孔,因為凹槽的壁會一直延伸到另一側。 + +{{ui:editor.tool.deleteFace}} 需要精確的面:它適用於以 STEP 匯入的零件和 layerling 的形狀。凡是 layerling 以網格儲存的都沒有精確面:匯入的 STL、OBJ 或 3MF,分割、包覆或簡化過的實體,或是非常精細的形狀,例如很長的一段文字。可以的話,把零件以 STEP 匯入。對精細的匯入零件,少數幾個面也可能超出 CAD 核心的處理能力:45 秒後刪除會中止,且不會有任何變更。如果實體在邊處理之後調整了尺寸,同時保留邊的尺寸,那麼在新尺寸下它沒有精確的面,直到復原這次尺寸調整為止。 diff --git a/docs/guide/zh-tw/07-sketches.md b/docs/guide/zh-tw/07-sketches.md new file mode 100644 index 00000000..1e9e3020 --- /dev/null +++ b/docs/guide/zh-tw/07-sketches.md @@ -0,0 +1,173 @@ +--- +title: "草圖:從輪廓到實體" +summary: 畫出平面輪廓,為角點做圓角或倒角,再將它擠出或旋轉成實體。 +--- + +並非所有東西都能用基本形狀拼出來。像支架、齒形或花瓶這類有自己輪廓的零件,要先畫出**輪廓**,再由它做出實體。草圖模式就是為此而生。 + +## 開始草圖 + +在上方從 {{ui:editor.modeGeometry}} 切換到 {{ui:editor.modeSketch}}。功能區的 {{ui:sketch.group.create}} 組裡有三個按鈕並排,決定輪廓要變成什麼: + +- **{{ui:sketch.extrude}}:**輪廓向上拉起,像餅乾壓模。 +- **{{ui:sketch.revolve}}:**輪廓繞一條軸旋轉,如同車床。花瓶、杯子、圓錐和所有圓形的東西都這樣做。 +- **{{ui:sketch.sweep}}:**輪廓沿一條路徑擠出:轉彎的線槽、導管、繞在某個形狀上的環。見下方沿路徑掃掠一節。 + +編輯器接著會顯示一張帶網格的圖板。那就是你的繪圖面。 + +## 繪製 + +草圖模式的功能區分成幾個區域: + +- **繪製:**{{ui:sketch.line}} 畫直線段:依序點擊各點;按住 [[Shift]] 時,新線會以 15° 步距吸附,水平和垂直也算在內。新線的長度和角度會顯示在游標旁。也可以鍵入長度,見[用數字畫線](#lines-by-numbers)。{{ui:sketch.arc}} 通過三個點畫出真正的圓弧:先點擊它的兩個端點,再點圓弧經過的第三個點;在第三次點擊之前,預覽會跟著游標走,提示訊息會說出半徑。端點若點在既有的點上就會與它相連,因此圓弧可以封閉輪廓。[[Esc]] 會放棄目前點過的點,回到 {{ui:sketch.select}}。之後圓弧就是由點和曲線組成的普通幾何:像其他線條一樣移動、剪下或擦除。{{ui:sketch.bezier}} 用控點塑形:點擊一個點,並朝線條應繼續的方向拖曳,就像 Illustrator 或 Inkscape 的鋼筆工具。拖得越遠,彎得越多;拖向新點的那一段會在拖曳時跟著彎曲,所以看得到結果。放點時拖曳會讓曲線彎曲;如果你來自 Tinkercad,只想點幾個點,就用 {{ui:sketch.smooth}}。{{ui:sketch.smooth}} 會在你點擊的各點之間鋪出一條流暢的路徑。要封閉輪廓,最後再點一次第一個點。若不想封閉輪廓而結束連續畫線,不移動游標按一下右鍵,或雙擊最後一個點。 +- **形狀:**{{ui:sketch.addShape}} 提供現成的輪廓:{{ui:sketch.rectangle}}、{{ui:sketch.circle}}、{{ui:sketch.ellipse}}、{{ui:sketch.halfCircle}}、{{ui:sketch.pieSlice}}、{{ui:sketch.boltCircle}}(帶孔的圓盤)、{{ui:sketch.triangle}}、{{ui:sketch.hexagon}}、{{ui:sketch.polygon}} 和 {{ui:sketch.star}}。點擊其中一個即可放到草圖原點,也可以從選單把它拖到想要的位置。在選單底部,{{ui:sketch.polygonSides}} 設定多邊形的邊數和星形的角數,{{ui:sketch.starInner}} 設定星形的凹谷向中心伸入多深(外半徑的 10% 到 90%);兩者都套用在你下一個加入的形狀。和所有草圖形狀一樣,之後它們就是普通的角點,可以逐一移動、做圓角或倒角。 +- **重疊:**把兩個閉合輪廓疊在一起,它們仍是兩個實體,在 3D 編輯器中合併;重疊部分不算孔。只有完全位於另一個輪廓內部的輪廓才會形成孔。移動不會在交叉處連接線條,所以可以再把形狀拉開。不過,如果你畫一條線穿過其他線,layerling 會在每個交叉處放一個點。 +- **選取:**{{ui:sketch.select}} 移動點和線。在閉合輪廓內部點擊會選取整個輪廓,可以直接拖曳或調整大小;在孔內部點擊則選取孔。選取框有八個控點:角上的控點同時改變寬度和高度,按住 [[Shift]] 時保持比例。邊上的控點只改變一個方向。出現的工具列中的 {{ui:sketch.keepProportions}} 不需 [[Shift]] 也能保持比例:這時角上和邊上的控點都會以相同比例拉伸,鍵入寬度或高度也會同時改變另一個。layerling 會記住這個開關。旁邊的 {{ui:sketch.lockOutline}} 會鎖定選取的輪廓,就像 3D 編輯器中鎖定實體一樣([[L]] 效果相同):它不能再被移動、調整大小、旋轉或修改,線條會變淡,選取框也會失去控點。線條仍可以從它的角點開始。{{ui:sketch.unlockOutline}} 或再按 [[L]] 即可解除鎖定。選取框上方的圓形控點會讓整個選取範圍繞中心旋轉:控點上方的數字會顯示角度,按住 [[Shift]] 時以 15° 為步進。每按一次 [[R]],整個閉合輪廓就旋轉 45°。點擊寬度或高度的尺寸標籤可鍵入新尺寸,也可以輸入算式(「60+12.5」)或百分比(「150%」)。按住 [[Shift]] 時,點擊一個點或一條線會將它加入或移出選取範圍,這樣就能選取多個一起移動。在空白處拖出框選,可選取框內所有東西。線條也能拖曳(它隨兩端移動;若它屬於某個選取範圍,則整個選取範圍一起移動)。方向鍵會將選取範圍移動一個網格步距,同時按 [[Shift]] 則步距更大;拖曳時按住 [[Shift]] 可讓移動保持在單一軸上。{{ui:sketch.refine}}:點擊一段線會加入一個點,點擊一個點則將它移除。此外還有 {{ui:sketch.erase}}(點擊一個點或一條線就移除它,拖出框選經過多個則移除框內全部,已有選取範圍時按鈕會清除選取範圍)以及插入模板圖片({{ui:sketch.addImage}})。移除一個點時,layerling 會把它兩側的相鄰點連接起來,讓輪廓維持閉合。要補上缺口,例如擦掉六邊形的一邊之後,把一個開放端拖到另一個上:它會吸附過去,兩點合成一點,輪廓就重新閉合。在交叉處,例如一條線穿過一個圓的地方,直通的一側會彼此連接:弧接弧、線接線,圓仍保持圓形。若只想移除圓的一小段,例如做一個圓角,就用橡皮擦精確點擊兩點之間的那段弧;其餘部分會保留。 +- **剪貼簿:**{{ui:editor.tool.copy}}、{{ui:editor.tool.paste}}、{{ui:editor.tool.duplicate}} 和 {{ui:editor.tool.delete}} 作用於選取的點、線和圖片,與 3D 編輯器一樣;[[Ctrl]]+[[X]] 為剪下。貼上與複製的幾何會落在原圖形旁邊,相隔 10 mm,位於不碰到任何既有線條的空位,因此絕不會與既有內容連在一起。它會保持選取,可以直接拖到定位。 +- **歷史記錄:**{{ui:sketch.undo}} 和 {{ui:sketch.redo}}。 +- **檢視:**用中鍵平移,或按住 [[Shift]] 或 [[Ctrl]] 加右鍵拖曳,與 3D 編輯器一樣。[[Home]] 讓整張草圖符合檢視範圍,[[F]] 縮放到選取範圍(沒有選取任何東西時,縮放到整張草圖),[[+]] 和 [[−]] 放大與縮小,與 3D 編輯器一樣。側欄上的 {{ui:camera.tapeTools}} 可量測兩點之間的距離。只要點擊某個東西,草圖就會顯示尺寸:一條線的長度,或某個點上相交各線的長度。當這些尺寸礙事時,例如在塑造曲線時,側欄上的 {{ui:sketch.showMeasurements}} 按鈕可以隱藏與顯示這些尺寸;捲尺仍可照常使用。在直線上可以點擊尺寸標籤,鍵入以公釐計的長度;[[Enter]] 套用,[[Esc]] 取消。線條會保持方向,起點留在原處,另一端的線條會跟著移動。若選取的是端點,則該端點移動。[[Alt]]+[[Enter]] 會讓線條以中點為中心向兩側伸長。在曲線上,標籤只顯示長度。 + +只有**閉合**的輪廓才能生成實體。 + +![一個 L 形輪廓。在左上方選取的角點處,兩條線的長度以公釐顯示,它們之間的角度以度顯示。](shot:sketch-outline) + +按鍵 [[1]] 到 [[4]] 可選擇繪圖工具,順序與工具列一致:{{ui:sketch.line}}、{{ui:sketch.bezier}}、{{ui:sketch.smooth}} 和 {{ui:sketch.refine}}。只要沒有正在畫線,它們就有效;正在畫線時,數字代表線的長度(見下文)。 + +## 用數字畫線 + +用 {{ui:sketch.line}} 或 {{ui:sketch.smooth}} 定下第一個點後,直接鍵入數字:線旁會開啟兩個欄位,{{ui:sketch.typedLength}} 以公釐計,{{ui:sketch.typedAngle}} 以度計。[[<]] 或 [[Tab]] 會移到角度,所以「50<30」可得到一條長 50 mm、角度 30° 的線,與 AutoCAD 一樣。[[Enter]] 定下該點,隨即可以鍵入下一條線;[[Esc]] 會關閉欄位,但不會結束連續畫線。 + +角度從右方起逆時針計算:0° 向右,90° 向上,180° 向左,270° 向下。留空的話,線條會跟著游標,因此只給長度,用滑鼠指出方向。兩個欄位都能輸入「40+12.5」這樣的算式。如果該點會落在平台之外,欄位會提示並等待另一個值。 + +## 讓直邊彎曲 + +選取一條直線,點擊出現的工具列中的 {{ui:sketch.curveLine}}:這條邊會彎成曲線,與 Tinkercad 一樣,並顯示兩個控點。拖曳控點來塑造曲線;控點拉得越遠,彎得越強。{{ui:sketch.straightenLine}} 會讓這條邊重新變直。選取的點可以用 {{ui:sketch.smooth}} 變成圓滑的:它會獲得自己的控點,相鄰的線也會變成曲線。點擊一個控點,它會亮起:此時方向鍵會以一個網格步距移動它,配合 [[Shift]] 則步距更大,因此可以精確設定曲線。 + +![L 形輪廓的底邊彎成曲線,兩個控點位於兩端。](shot:sketch-curve) + +## 讀取與鍵入角度 + +點擊**兩條直線**相交的角點:在長度旁邊,layerling 會以小圓弧顯示兩者之間的**角度**,單位為度。在閉合輪廓上,這是形狀內側的角度,所以凹口讀到的是大於 180° 的值。點擊該數值並鍵入新角度。兩條線中的一條會繞角點轉動並保持長度,另一條留在原處。轉動的線以虛線繪製;[[Tab]] 切換到另一條,[[Enter]] 套用,[[Esc]] 取消。轉動線遠端連著的東西會隨之移動。 + +移動一個點會改變三個角度:該點本身,以及它兩條線遠端相鄰的兩個角。因此 layerling 也會顯示那兩個角,每一個都可以點擊並鍵入。這樣一來,就能在選取會隨之移動的左上點時,把左下角設成例如 75.5°。這裡也能做運算,例如「90-14.5」。 + +曲線與角點相接處,或超過兩條線交會的角點,不會顯示角度。側欄上的 {{ui:sketch.showMeasurements}} 按鈕會連同長度一起隱藏角度。 + +## 圓角與倒角 + +點擊一個角點,選擇 {{ui:sketch.filletCorner}} 或 {{ui:sketch.chamferCorner}}。會出現一個小欄位,用於 {{ui:sketch.filletRadius}} 或 {{ui:sketch.chamferDistance}}。輸入尺寸並按打勾按鈕確認。這適用於兩條直線之間的角。 + +也可以一次處理多個角:按住 [[Shift]] 逐一點擊選取,或框選它們,然後從出現的工具列選擇 {{ui:sketch.filletCorner}} 或 {{ui:sketch.chamferCorner}}。它們都會得到相同的半徑或距離。若兩個選取的角共用一條邊,每個角最多佔這條邊的 45%,這樣四角都做圓角的長方形,每個角看起來都一樣。不是兩條直線夾角的點會被略過,提示訊息會說明略過了幾個。框住整個形狀,或在形狀內部點擊,會同時選取它的角點和線條,此時工具列會在角工具旁邊,為所有選取的線提供 {{ui:sketch.curveLine}} 和 {{ui:sketch.straightenLine}}。 + +![左上角的角已做成半徑 12 mm 的圓角。](shot:sketch-fillet) + +## 鏡像 + +選取點和線(點擊、[[Shift]] 加點擊,或框選),然後點擊工具列中的 {{ui:sketch.mirror}}。接著選擇軸:{{ui:sketch.mirrorLeftRight}} 沿穿過平台中央的垂直軸鏡像,{{ui:sketch.mirrorTopBottom}} 沿水平軸鏡像,{{ui:sketch.mirrorAcrossLine}} 沿你接下來點擊的草圖直線鏡像。副本會加在另一側,原圖形保留;兩者沒有任何連結,因此可以各自修改。位於軸上的點是共用的,所以兩端落在軸上的半個輪廓會變成一個閉合輪廓:畫出半個支架,選取、鏡像,然後生成實體。構造線很適合當軸。[[Esc]] 取消。 + +## 構造線 + +構造線能幫你放置點,又不會成為實體的一部分。它以虛線繪製,永遠不算輪廓:想拉出形狀多遠都可以,實體不會因此變大。 + +- 在 {{ui:sketch.group.draw}} 組中開啟 {{ui:sketch.construction}}。之後新畫的線,包括按尺寸鍵入的線,都是構造線。再按該按鈕可切回普通線。 +- 已經畫好的線,點擊它並選擇 {{ui:sketch.makeConstruction}} 就會變成構造線。{{ui:sketch.makeSolid}} 會讓它變回普通線。 +- 新點會吸附到構造線與其他線的交叉處(會顯示藍色圓環),也會吸附到構造線的端點。這樣不必計算,就能把角點放在中點、距某條邊固定距離處,或交叉處。 +- 新點也會吸附到草圖中每條直線的中點、每個圓和圓角的中心,以及下方顯示的實體各邊中點(#624)。正在拖曳的點會忽略它自己線條的中點。 +- {{ui:sketch.group.draw}} 組中的 {{ui:sketch.fromMiddle}} 會從線的中點開始畫線:先點擊中點,再點擊端點,線條會向另一側延伸同樣的長度。中點會成為獨立的一個點。再按該按鈕可畫普通線。 +- 構造線穿過輪廓時,不會把它切開。旋轉時,它也可以位於軸的右側。 + +## 用它生成實體 + +點擊 {{ui:sketch.finishSketch}}。輪廓會立在工作平面上,成為實體。在它的設定中,可以像其他形狀一樣修改高度、顏色和其他一切。調整它的大小時,layerling 會在片刻之後從草圖重建它,草圖也會跟著變大。因此它仍是精確實體,可以倒角與圓角,下次編輯時草圖的尺寸就是實體的尺寸。 + +如果工作平面位於實體的側面,你就按看那一面的方向來畫:草圖中的上方,就是完成後實體上的上方。草圖檢視中實體淡淡的輪廓會顯示它所在的位置。如果工作平面切過實體,草圖檢視會改為顯示那個切面的輪廓,因此抽殼實體看起來像一個環,你可以讓草圖與它的壁對齊。你設定或拖曳的點靠近這些輪廓的角點時,會精確吸附到角點上;會出現一個小藍環。這樣就能把其他實體的邊帶進草圖,即使工作平面並不恰好落在這些邊上。要描摹既有的作品,請開啟 {{ui:sketch.showPartEdges}}(左側檢視按鈕中的圖層按鈕):之後實體的所有邊都會畫在草圖平面上,細而淡,彷彿能看穿它們,無論它們位於什麼高度。直立的平面,例如設在正面的平面,就會以這種方式顯示正視圖。這個選擇會儲存在瀏覽器中。 + +![輪廓已經變成實體,角也做成圓角。](shot:sketch-result) + +用 {{ui:inspector.editSketch}} 可以隨時回到草圖修改。雙擊實體也有同樣效果,與 Tinkercad 一樣(鎖定的實體不會開啟);設定中的 {{ui:workspace.doubleClickOpensSketch}} 可以關閉這個行為。不過,你已經在實體上做過的邊緣處理會消失,因為邊會重新生成。 + +包含多個輪廓的草圖會生成一個實體,重疊的輪廓會在其中合併。若想讓每個輪廓各自獨立,選取實體並點擊 {{ui:inspector.separateParts}}:每個外側輪廓會連同位於其中的孔成為獨立實體,並保持實體的高度、顏色和位置。每個部件都有自己的草圖可編輯,構造線也在其中,因此可以逐一抬高或降低各部件,之後再合併或切除它們。邊緣處理會阻止這個操作,之後被拉伸過的實體也不行:那樣它會以網格拆開。 + +**用同一張草圖做另一種實體:**草圖上方的標記會說明它會變成什麼,{{ui:sketch.modeBadgeExtrude}}、{{ui:sketch.modeBadgeRevolve}} 或 {{ui:sketch.modeBadgeSweep}}。點擊它並選擇另一個,編輯既有實體時也可以:匯入的 SVG 原本是擠出的,切換到 {{ui:sketch.modeBadgeRevolve}} 就會變成花瓶或旋鈕。跨越軸的輪廓會向左移動,直到右邊緣落在軸上,於是 SVG 的半個橫截面就會繞它的直邊旋轉;[[Ctrl]]+[[Z]] 可復原這次移動。完成時,新實體會接替舊實體的位置、名稱和顏色,底部高度相同。邊緣處理會消失,這與每次編輯草圖時一樣。 + +### 旋轉 + +旋轉時,把半個橫截面畫在草圖中所示**軸的左側**。旁邊會看到旋轉的 3D 預覽,立刻顯示實體將會是什麼樣子。輪廓必須閉合,或者把開放線條建成描邊,見下文。最後點擊 {{ui:sketch.finishRevolve}}。設計中的其他實體會以正面顯示,與輪廓採用同一檢視,軸位於中央:把輪廓畫在它們旁邊或上方。實體會立在你畫它的位置,而穿過草圖中央的水平線是地面:畫在它上方的輪廓會得到立得更高的實體,其最低點就是實體的底部。 + +旋轉實體和擠出實體一樣是精確實體:可以倒角與圓角,也可以抽殼,做成杯子或花瓶。用舊版 layerling 旋轉出的實體是網格;開啟 {{ui:inspector.editSketch}} 再完成一次,就能讓它變精確。跨越軸的輪廓無法精確建構,和以前一樣會變成網格。 + +**一根連續的條:{{ui:prop.pitch}}。**旋轉會把輪廓變成閉合的環。選取旋轉實體,在屬性面板中給它一個大於 0 的 {{ui:prop.pitch}},也就是每圈上升的距離,輪廓就會改為纏繞成螺旋:一根連續的條,像線軸上的線材或彈簧。{{ui:prop.sweep}} 則會變成 {{ui:prop.turns}},最大 200;負數會左旋。相鄰圈距小於輪廓高度時會融成一個實體,因此細螺距的實心核心也能做。螺旋是以網格建構的,所以圓角、倒角和抽殼對它無效;圈數多時把 {{ui:prop.sides}} 設低。螺距為 0 又會變回環。 + +## 沿路徑掃掠 + +{{ui:sketch.sweep}} 會把輪廓沿一條路徑擠出:轉彎的線槽、導管、皮帶周圍的護罩、繞六邊形的環。它位於 {{ui:sketch.group.create}} 組中,就在 {{ui:sketch.extrude}} 和 {{ui:sketch.revolve}} 旁邊。 + +在同一張圖板上畫兩樣東西: + +- **橫截面**照常作為閉合輪廓。按你從路徑起點沿路徑看過去的樣子來畫:橫向是草圖的左右,向上就是完成實體上的上方。空心截面,例如槽或管,是輪廓裡再套一個輪廓。截面會以路徑為中心,實體則以截面的最低點立在草圖平面上。 + +- **路徑**作為 {{ui:sketch.construction}}:開啟它,畫出線或曲線,構成單一鏈條,開放或閉合(閉合鏈條會得到環)。路徑平躺在草圖平面內。 + +把截面畫在路徑應該開始的那一端附近;路徑會從離它最近的端點開始。然後點擊 {{ui:sketch.finishSweep}}。直線段的拐角會變成斜接,曲線保持平滑,截面全程保持直立。實體和擠出的一樣精確:圓角、倒角和 STEP 匯出都能用。如果缺少閉合輪廓或路徑,或者有多條彼此分離的路徑,layerling 會提示。用 {{ui:inspector.editSketch}} 可以回到草圖,修改截面或路徑。 + +## 以描邊建構 + +通常,閉合輪廓內部的區域會成為實體。用 {{ui:sketch.group.finish}} 區段中的 {{ui:sketch.stroke}},改成建構線條本身,寬度由你設定。在面板中勾選 {{ui:sketch.strokeOn}};草圖會立刻顯示結果。 + +- **閉合輪廓**會變成一個邊框。{{ui:sketch.strokeAlign}} 說明壁落在哪裡:{{ui:sketch.strokeAlign.center}} 在畫出的線上,{{ui:sketch.strokeAlign.inside}} 在其內側,{{ui:sketch.strokeAlign.outside}} 在其外側。外側對齊在留公差時很方便:畫出孔的輪廓,例如燕尾,給它 0.2 mm 的外側描邊,就能得到列印所需的間隙。 +- **開放線條**會變成一條條帶,以線為中心。{{ui:sketch.strokeCap}} 決定端點樣式:{{ui:sketch.strokeCap.flat}}、{{ui:sketch.strokeCap.square}}(長出半個寬度)或 {{ui:sketch.strokeCap.round}}。 +- {{ui:sketch.strokeJoin}} 對兩者都適用:{{ui:sketch.strokeJoin.miter}}、{{ui:sketch.strokeJoin.round}} 或 {{ui:sketch.strokeJoin.bevel}}。 + +草圖會保留畫出的線。再次開啟後,可以繼續修改線條和描邊;取消勾選,區域就會重新建構。曲線會為此拆成短的直線段。 + +在旋轉中,描邊是一層薄壁:把花瓶或杯子的壁,畫成軸左側的**一條開放線**,勾選 {{ui:sketch.stroke}} 並設定寬度,旋轉就會把這條帶子轉出來。越過軸的部分會在軸處被切掉。 + +## 填色與剪影 + +不用開啟草圖也能設定描邊:在草圖實體的屬性中,於 {{ui:prop.sketchFill}} 下選擇 {{ui:prop.sketchFill.area}}、{{ui:prop.sketchFill.outside}}、{{ui:prop.sketchFill.inside}} 或 {{ui:prop.sketchFill.center}},並設定 {{ui:prop.sketchLineWidth}} 和 {{ui:sketch.strokeJoin}}。實體會立刻在原地重建。這些對應 Tinkercad 匯入 SVG 的填色模式:預設、外線和內線。{{ui:prop.sketchFill.grow}} 會保持區域填滿,並向四周擴展一個線寬,角可以是尖角、圓角或斜角:這是多色列印時標誌下方的一層底色,單靠外側描邊只會得到一個環。{{ui:prop.sketchFill.shrink}} 則相反:區域保持填滿,邊緣向四周內縮一個線寬,孔也算在內(孔會變大)。在同一張草圖的副本上兩者都用,可以做配合:孔保持畫出的尺寸,穿過它的零件用 {{ui:prop.sketchFill.shrink}} 縮 0.5 mm,或者在同一輪廓切出的形狀裡做一層壁。寬度超過輪廓允許的範圍就什麼都不剩。在草圖的描邊面板中,這兩個選項位於 {{ui:sketch.strokeAlign}} 下。 + +{{ui:prop.sketchSilhouette}} 會略過所有位於其他輪廓內部的輪廓:孔以及孔裡的東西。只保留外側輪廓。與 {{ui:prop.sketchFill.outside}} 一起,就能做出餅乾壓模:把同一個 SVG 匯入兩次,一次用剪影作為底部的面,一次用剪影加上外側 1 到 2 mm 的描邊作為壁。在草圖模式下,這個開關也在 {{ui:sketch.stroke}} 面板裡。 + +實體重建時,邊上的圓角和倒角會消失,與編輯草圖時一樣。 + +## 斜壁,用於印章 + +擠出的草圖是垂直的壁。印章、壓花模或沖頭需要斜壁,外側和內側都要,而且壁厚處處相同。layerling 的擠出沒有拔模角,但對於單純的輪廓,可以用 {{ui:inspector.taper}} 達到目的。一種可行的做法: + +1. 畫出帶有所需孔的輪廓,並生成實體。複製該實體([[Ctrl]]+[[D]])。 +2. 在第一個實體上開啟 {{ui:prop.sketchSilhouette}},讓孔被填上,再用 {{ui:inspector.taper}} 讓底部比頂部寬。 +3. 在副本上再次開啟它的草圖,刪除外側輪廓,只留下孔的輪廓。完成草圖,把實體切換為 {{ui:inspector.hole}},再用 {{ui:inspector.taper}} 讓底部比頂部窄。 +4. 把孔移到第一個實體中原本孔的位置,並將兩者群組。 + +現在外側和內側的壁都傾斜了。錐度會縮放整個輪廓,所以對單純的形狀是精確的(可以選擇尺寸讓壁平行),對文字之類的細節則只是近似。 + +## 用圖片當模板 + +用 {{ui:sketch.addImage}} 把照片或圖樣放到草圖下面,照著描。可以設定它的大小、不透明度和位置。圖片放好後,用 [[L]] 鎖定它,以免繪圖時不小心移動。鎖定的圖片不會擋路:點擊會穿過它,因此能選取它上面的線和點,也能在上面框選。要再次選取它,例如解鎖,請 [[Alt]]+點擊它。如果右側邊緣的設定擋住了圖片,抓住標題列把它們拖開;雙擊可重新停靠。 + +在 {{ui:sketch.imageAlign}} 下,可以校正拍歪的照片: + +- **{{ui:sketch.imageRotation}}:**繞圖片中心旋轉,可用框上方的圓形控點,或輸入以度計的數字。按住 [[Shift]] 時,控點會以 15° 步距吸附。 +- **{{ui:sketch.centreImageX}}** 和 **{{ui:sketch.centreImageY}}:**把圖片中心放到 X = 0 或 Y = 0。對旋轉來說,X = 0 就是軸,圖片因此會對稱於軸。 +- **{{ui:sketch.calibrateImage}}:**在圖片中點擊距離已知的兩點,例如直尺的兩端或已知直徑,然後鍵入實際距離。圖片會等比縮放,使該距離正確;第一個點會留在原處。 +- **{{ui:sketch.cropImage}}:**框上的控點此時會裁剪圖片,而不是縮放;裁掉的部分仍會保留,用 {{ui:sketch.uncropImage}} 或再次向外拉控點即可讓它回來。 + +這四項都只會影響參考圖,絕不會影響草圖。 + +## 草圖模式下的按鍵 + +| 按鍵 | 效果 | +| --- | --- | +| [[Esc]] | 放下工具(回到 {{ui:sketch.select}}),然後清除選取範圍 | +| [[Delete]] | 刪除選取的元素 | +| [[Ctrl]]+[[C]] | 複製選取範圍 | +| [[Ctrl]]+[[X]] | 剪下選取範圍 | +| [[Ctrl]]+[[V]] | 貼上 | +| [[Ctrl]]+[[D]] | 複製選取範圍(建立副本) | +| [[Ctrl]]+[[Z]] | 復原 | +| [[Shift]] | 畫線時:讓線以 15° 步距吸附;拖曳時:讓移動保持在單一軸上 | +| 數字、[[<]]、[[Tab]]、[[Enter]] | 畫線時:鍵入並設定下一條線的長度與角度 | +| [[R]] | 讓閉合草圖旋轉 45° | +| [[L]] | 鎖定或解除鎖定選取的輪廓,或模板圖片 | + +> **提示:**點畫得越少越好。點少而位置恰當的輪廓,做出來的實體會比一團雜亂的點更平滑。 diff --git a/docs/guide/zh-tw/08-text.md b/docs/guide/zh-tw/08-text.md new file mode 100644 index 00000000..2fb61223 --- /dev/null +++ b/docs/guide/zh-tw/08-text.md @@ -0,0 +1,165 @@ +--- +title: 文字與弧形文字 +summary: 以八種字型或自訂字型製作凸起或凹刻的文字,還可以沿圓弧排列,例如硬幣、蓋子或戒指上的文字。 +--- + +## 新增文字 + +在形狀庫中選擇 {{ui:shape.text}} 並放置。在右側的 {{ui:prop.text}} 欄位輸入要顯示的文字。以下是各項設定: + +- **{{ui:prop.font}}:** 提供八種字型:Multilanguage、Sans、Serif、Script、Monospace、Rounded、Stencil(以直線構成的字母)與 Japanese(Zen Maru Gothic)。新文字預設為 Sans。ä、ö、ü、é 等帶重音的字母與 € 符號在每種字型中都有,假名、常用漢字,以及 澤、槇、檜 等姓名中許多罕用漢字也一樣:日文姓名在每種字型與名牌上都能正常顯示。日文字元會在文字第一次用到時才下載(罕用漢字放在第二個檔案,只有文字用到時才下載),因此這類文字會暫時顯示為問號。之後它們會留在電腦上,從此日文也能離線使用。自訂字型會排在最上方,見後面的[自訂字型](#your-own-fonts)。 +- **{{ui:nameTag.letterSize}}:** 從上方看字母的大小;{{ui:prop.height}} 決定字母的厚度。 +- **{{ui:prop.height}}:** 文字高出表面的距離。 +- **{{ui:prop.bevel}}:** 把字母邊緣做成圓角,看起來更柔和。以 {{ui:prop.segments}} 決定分成幾段。 +- **{{ui:nameTag.letterEdge}}:** 對字母頂邊做圓角或倒角,就像名牌那樣:{{ui:nameTag.edge.none}}、{{ui:nameTag.edge.round}} 或 {{ui:nameTag.edge.chamfer}},並設定 {{ui:nameTag.letterEdgeSize}}(初始 0.4 mm,最大不超過文字高度)。它的作用範圍比 {{ui:prop.bevel}} 更廣,但只到筆畫寬度允許的地方:筆畫若比該尺寸的兩倍還窄,邊緣會收成較窄的頂面。底面保持平整,因此單一字母之後還能黏上去。選擇邊緣處理後,它會取代 {{ui:prop.bevel}}。 +- **尺寸:** 與其他形狀一樣設定這一行的長度與寬度。拖曳控制點或輸入尺寸。 +- **{{ui:prop.textSpacing}}:** 在字型原有間距之上再加的字母間距,以字母大小的百分比表示:0 表示維持字型的原始間距,大於 0 時字母分得更開,小於 0 時(最低 -50)更緊密,自訂字型經常需要這樣。字母大小不變,外框會跟著這一行調整,直線文字與弧形文字都一樣。阿拉伯文與希伯來文的字母會相連,不套用此間距。 +- **{{ui:prop.textStretch}}:** 初始為關閉:字母維持原有比例並置於外框中央,因此外框拉得比文字所需更寬或更深時,外框仍會大於字母。開啟後,字母會在兩個方向拉伸以填滿整個外框:大寫字母可以變矮或變窄,與 Tinkercad 相同。這適用於直線文字;弧形文字有自己的字母大小。 + +文字一開始是單一實體。若想個別處理每個字母,點擊 {{ui:inspector.separateParts}}。之後每個字母都會成為獨立形狀。 + +文字的邊也能倒角或加圓角,直線或弧形文字皆可,見[邊緣倒角與抽殼實體](chapter:edges-and-hollowing)。請使用 0.2 至 0.5 mm 這類小尺寸,因為字母的筆畫很窄。 + +## 自訂字型 + +除了八種內建字型,還可以使用任何自訂字型:電腦上的字型檔案,或在 Chrome 與 Edge 中直接使用電腦已安裝的字型。在 {{ui:prop.font}} 底部選擇 {{ui:font.manage}},會開啟 {{ui:font.title}} 視窗。 + +- **{{ui:font.addFile}}** 接受 TrueType 檔案(`.ttf`)、OpenType 檔案(`.otf`)或 WOFF 檔案(`.woff`)。也可以直接把檔案拖進視窗。 +- **在 Windows 上**,已安裝的字型位於 Fonts 資料夾(`C:\Windows\Fonts`),瀏覽器的檔案對話方塊會隱藏這個資料夾。請改用檔案總管開啟該資料夾,再把字型拖到 {{ui:font.title}} 視窗。僅為你安裝的字型位於 `%LOCALAPPDATA%\Microsoft\Windows\Fonts`,檔案對話方塊也會顯示這個位置。在 Mac 上,字型位於 `/Library/Fonts` 與 `~/Library/Fonts`。 +- **{{ui:font.fromSystem}}** 會列出電腦上已安裝的字型。第一次使用時,瀏覽器會詢問是否允許 layerling 讀取這些字型。用搜尋欄位可快速找到字型,點擊即可選用。 + +若已選取文字,它會立即換成新字型。否則字型會出現在 {{ui:prop.font}} 下的 {{ui:font.customGroup}} 群組中,視窗中的 {{ui:font.use}} 可將它套用到選取的文字。自訂字型的運作方式與內建字型相同:弧形文字、邊緣倒角與圓角,以及 STEP 匯出都照常運作。字型缺少的字母會從 Sans 取用。 + +### 阿拉伯文與希伯來文 + +阿拉伯文、波斯文、烏爾都文與希伯來文由右往左書寫:第一個字母在最右邊,在「Name عربي」這類混合文字中,只有阿拉伯文單字會反向排列,數字維持正常方向。阿拉伯字母會依書寫規則與相鄰字母相連,lam-alef 會形成連字。這需要含有這些字母的字型;內建字型並沒有。請新增自訂字型,例如 Windows 上的 Arial、Tahoma 或 Segoe UI,或 Noto Naskh Arabic、Noto Sans Arabic、Amiri 等免費字型。母音符號會附在所屬的字母上。弧形文字、輪廓、剪影、分層與名牌的處理方式都與其他文字相同。 + +### 各瀏覽器支援的功能 + +| 瀏覽器 | 選擇字型檔案 | 使用電腦上的字型 | +| --- | --- | --- | +| 電腦上的 Chrome 與 Edge,以及已安裝的 layerling 應用程式 | 可以 | 可以,瀏覽器詢問後即可 | +| Firefox | 可以 | 不行 | +| Mac 上的 Safari | 可以 | 不行 | +| 平板與手機 | 可以,從裝置的檔案選擇 | 不行 | + +網頁無法任意讀取已安裝的字型。只有 Chrome 與 Edge 具有這項權限,而且僅限於安全頁面,也就是像 layerling.com 那樣透過 `https` 存取。當 layerling 透過 `http` 執行時,例如架在你自己的伺服器上,或作為家庭網路中的 Docker 安裝,{{ui:font.fromSystem}} 不會出現;這時請從檔案總管把字型拖曳過來。在其他瀏覽器中,請從字型資料夾選擇字型檔案,結果相同。若你在 Chrome 或 Edge 中拒絕了詢問,可以在網站設定中重新允許,入口在位址列左側的鎖頭圖示後方。 + +layerling 無法讀取 WOFF2 檔案(幾乎總是有 TTF 或 OTF 版本)、字型集合(`.ttc`,一個檔案含多種字型)或彩色 emoji 字型。對於非常大的字型,例如中文字型,layerling 只取前 8000 個字元。可變字型會以其預設設定讀取,通常是標準字重。 + +有些字型(尤其是手寫體與可變字型)會用互相重疊的筆畫繪製字母。layerling 在讀取字型時會把它們合併成單一乾淨的輪廓,讓實體保持可列印。這類字母因此由許多很短的直線段構成,而不是曲線;外觀上看不出來。 + +### 字型存放位置 + +自訂字型只存放在**這台電腦的這個瀏覽器**中。其他瀏覽器或其他電腦要等你也在該處新增字型後,才會知道它。清除瀏覽器的網站資料也會一併清除字型。在 {{ui:font.title}} 視窗中,垃圾桶會把字型從瀏覽器移除。你的設計不會因此少掉任何東西,下一節會說明原因。 + +### 傳遞含有自訂字型的設計 + +設計**不會儲存字型檔案**,只儲存其文字所用字母的輪廓,也包括歷史記錄較早步驟中的文字。如果文字是「Hello」,跟著設計走的只有 H、e、l 與 o。設計以任何方式儲存都一樣:在瀏覽器中、在你自己的伺服器上、存成 `.lyl` 檔案,以及存到 {{ui:myShapes.title}} 中。 + +因此: + +- **設計在任何地方都能正確開啟**,包括沒有該字型的電腦。文字看起來相同,也能移動、旋轉、縮放與加圓角。 +- **新字母需要字型。** 如果沒有該字型的人輸入了設計未帶上的字母,layerling 會用 Sans 繪製。此時 {{ui:prop.font}} 下會把該字型標示為 {{ui:font.fromDesign}}。新增字型檔案後,每個字母都會回來。 +- **匯出內容只有幾何。** STL、3MF、OBJ、STEP 與 SVG 只包含實體與輪廓,不含字型。 +- **較舊的 layerling 版本**還不認得自訂字型,會以 Multilanguage 繪製這類文字。 + +**授權:** 字型受著作權保護,其授權條款規定你能如何使用。PDF 檔案從字型帶走的正是內嵌的字母輪廓,大多數授權允許這麼做。但有些商業字型連傳遞單一字母都禁止。在把含有自訂字型的設計傳給他人或公開發布之前,請先確認字型的授權。Google Fonts 等免費字型(大多採用 SIL Open Font License)可以放心傳遞。列印零件或匯出的 STL 則無妨:它們已不含字型,只有幾何。 + +## 凸起或凹刻 + +- **凸起:** 把文字放在表面上,再與實體群組。文字會從表面凸出形成浮雕。 +- **凹刻:** 把文字切換為 {{ui:inspector.hole}},讓它稍微伸入表面,再與實體群組。字母就會被刻進去。 + +要在側面加上文字,先把工作平面放到該面上,見[檢視與工作平面](chapter:view-and-workplane)。 + +## 輪廓、剪影與加寬 + +文字不一定要做成實心字母。屬性中的 {{ui:prop.textFill}} 提供與 Tinkercad 相同的選項: + +- **{{ui:prop.textFill.filled}}:** 字母維持原樣。 +- **{{ui:prop.textFill.outline}}:** 沿字母輪廓畫一條線,一半在輪廓內、一半在外。 +- **{{ui:prop.textFill.outer}}:** 沿字母外側畫一條線。 +- **{{ui:prop.textFill.inner}}:** 沿字母內側畫一條線。 + +選擇線條後,清單正下方會出現兩項設定:{{ui:prop.sketchLineWidth}} 設定線條粗細,{{ui:sketch.strokeJoin}} 設定線條如何繞過轉角({{ui:sketch.strokeJoin.round}}、{{ui:sketch.strokeJoin.bevel}} 或 {{ui:sketch.strokeJoin.miter}})。較少用的設定在 {{ui:inspector.more}} 之下:{{ui:prop.sketchSilhouette}} 會略去 O、A 或 e 中的孔,{{ui:prop.textWider}} 則讓字母保持實心,並沿四周以線寬加粗;相觸的字母會連成一體。 + +使用外側線、置中線條或「加寬」時,文字外框會變大,而字母大小維持不變。{{ui:prop.bevel}} 與 {{ui:prop.segments}} 僅適用於實心字母。 + +## 分層與名牌 + +多色列印用的名牌是分層的文字:最上層是字母,下面是用第二種顏色、稍微加寬的相同文字,最底層則是第三種顏色、沒有孔的底板。layerling 一鍵就能完成: + +- **新名牌:** 在形狀庫中選擇 {{ui:shape.nameTag}} 並放置。它會顯示白色「Name」字母,搭配紅色邊框與深色底板。 +- **從文字製作:** 選取文字,點擊其設定最上方的 {{ui:nameTag.makeLayers}}。 + +名牌的所有設定都在設定最上方的 {{ui:nameTag.title}} 卡片中: + +- **{{ui:prop.text}}** 與 **{{ui:prop.font}}**,也包含自訂字型。名牌會隨文字增長。 +- **{{ui:nameTag.letterSize}}:** 大寫字母的高度,單位為 mm。所有分層都會跟著調整並保持對齊。 +- **{{ui:nameTag.layers}}:** 每個分層一列,由上往下排列。每列包含顏色(點擊色塊)、該層比字母寬出多少、高度,以及 {{ui:nameTag.noHoles}},用來填平 O、A 等字母中的孔。{{ui:nameTag.corners}} 設定加寬的分層如何繞過字母轉角:{{ui:nameTag.corner.round}}、{{ui:nameTag.corner.bevel}} 或 {{ui:nameTag.corner.miter}}。最上面一列就是字母本身。**+** 會在底部新增一層,**–** 會移除最底層。名牌可有二到六層。 +- **{{ui:nameTag.keyring}}:** 在底層加上一個末端為圓形的直舌片,並開一個鑰匙圈孔;舌片會隨孔一起變大。預設的 3 mm 孔會做出寬 6.5 mm、外伸 6.75 mm 的舌片,孔緣距底層邊緣 2 mm。選擇 {{ui:nameTag.keyringDiameter}} 與 {{ui:nameTag.keyringSide}}:{{ui:nameTag.side.left}}、{{ui:nameTag.side.right}} 或 {{ui:nameTag.side.top}}。{{ui:nameTag.side.free}} 會把孔從名牌上拿開,並在旁邊放一個獨立的 {{ui:nameTag.keyringTab}},顏色和高度都與底層相同:這是一般形狀,你可以用控制點把它移到名牌需要的任何位置並旋轉。放好後,其面板中的 {{ui:nameTag.keyringTabFix}} 會把它併入最近的名牌,就固定在目前位置:孔會穿過它到達的每一層,耳片併入底層,而文字或尺寸改變時,兩者都會留在字母的該轉角處。{{ui:nameTag.side.free}} 會把舌片放回原位,讓你再次移動它。孔會穿過它接觸的每一層;改變文字、字母大小或字型時,舌片也會跟著移動。{{ui:nameTag.keyringAlong}} 會讓舌片沿所在邊上下移動(在頂邊上則是左右移動),直到即將離開該邊為止;0 表示中央。當邊的中央正好遇到空隙時(例如 J 旁邊),可以用它把舌片移到字母伸出的部位。 +- **{{ui:nameTag.letterEdge}}:** 對頂層字母的頂邊做圓角或倒角,就像列印出的名牌那樣收邊:{{ui:nameTag.edge.none}}、{{ui:nameTag.edge.round}} 或 {{ui:nameTag.edge.chamfer}},並設定 {{ui:nameTag.letterEdgeSize}}(初始 0.4 mm,最大不超過層高)。它適用於所有字型與文字。這個邊是字母網格的一部分,因此邊工具會把這類文字當作網格處理,對如此精細的文字負擔很重;請改在這裡選擇邊緣處理。 + +每次變更都會立即顯示。名牌是一個綁定:它會整體移動,而每一層仍是各自獨立、各有顏色的實體,切片軟體進行多色列印正需要如此。要對某一層的邊做圓角或倒角,點擊 {{ui:group.editBundle}} 並選擇該層,見[邊緣倒角與抽殼實體](chapter:edges-and-hollowing)。 + +### 一次製作多個名牌 + +在 {{ui:textLayers.names}} 中輸入姓名,每行一個,最多一百個。下方按鈕會顯示將製作多少個名牌,例如「製作 12 個名牌」。每個名牌都有相同的分層、字母大小與鑰匙圈孔,而且各自是獨立物件;它們會在第一個名牌下方分成數列排列,間距 5 mm。一般文字的設定較下方也有姓名清單。 + +## 圖示牌 + +圖示牌是相同的名牌,只是以 SVG 圖示取代字母:一顆心、一朵雲、社團標誌。最上層是圖示,下面是用第二種顏色、稍微加寬的相同輪廓,最底層則是沒有孔的底板。 + +- **新圖示牌:** 在形狀庫中選擇 {{ui:shape.iconTag}}。會開啟一個小視窗:點擊 {{ui:iconTag.browse}},選擇 SVG、PNG 或 JPG 檔案,確認圖片,輸入圖示的 {{ui:iconTag.width}},再點擊 {{ui:iconTag.ok}}。圖示牌會立在平台中央,分層與新名牌相同。 +- **從草圖實體:** 匯入的 SVG,或你自己畫的草圖,其設定最上方有 {{ui:nameTag.makeLayers}}。 + +設定最上方的 {{ui:iconTag.title}} 卡片包含: + +- **{{ui:iconTag.replace}}:** 把另一個檔案(SVG、PNG 或 JPG)的圖示換到圖示牌上;分層與寬度維持不變。 +- **{{ui:iconTag.iconWidth}}:** 上層圖示的寬度,單位為 mm。所有分層都會跟著調整並保持對齊。 +- **{{ui:nameTag.layers}}:** 各列與名牌相同——顏色、加寬多少、{{ui:nameTag.corners}}、高度與 {{ui:nameTag.noHoles}},以及 **+** 與 **–**,二到六層。最上面一列就是圖示本身。 +- **{{ui:nameTag.keyring}}:** 與名牌相同:穿過每一層的鑰匙圈孔,底層在圖示之外有一個末端為圓形的舌片。{{ui:nameTag.keyringDiameter}} 與 {{ui:nameTag.keyringSide}} 選擇大小與位置;{{ui:nameTag.side.free}} 會產生獨立舌片,與名牌相同。舌片是依圖示輪廓製作,因此輪廓很不規則的圖示請確認它與底板相接的位置。{{ui:nameTag.keyringAlong}} 會讓舌片沿所在邊移動,與名牌相同。 +- **{{ui:iconTag.count}}:** 想要幾個圖示牌,1 到 100。{{ui:iconTag.fill}} 會依設定中所選印表機的列印平台計算,小標誌可以排滿一整個平台。下方按鈕會製作出來,間距 5 mm,以平台中央為中心排列;第一個就是圖示牌本身。 + +SVG 需要封閉輪廓;只有開放線條的圖形無法做成圖示牌。填充為線條的草圖實體會保留線條:該線條圍出的區域就是圖示。 + +**圖片(PNG 或 JPG)** 會被描摹成輪廓,預覽會顯示該輪廓。在 {{ui:iconTag.part}} 下選擇要由 {{ui:iconTag.part.dark}} 還是 {{ui:iconTag.part.light}} 成為圖示;初始是背景以外的部分。透明像素永遠不屬於圖示。只含一張圖片的 SVG(例如 Inkscape 儲存匯入的點陣圖)也會以相同方式描摹。輪廓會跟著像素走,因此小圖片的邊緣會較粗糙:幾百像素以上的圖片效果最好。{{ui:iconTag.replace}} 會取圖片中背景以外的部分。 + +## QR Code + +QR Code 會把文字或網址變成手機相機可讀取的圖案:招牌上連到你商店的連結、杯墊上的 Wi-Fi 名稱、鑰匙牌上的電話號碼。 + +在形狀庫中選擇 {{ui:shape.qrCode}}。會開啟一個視窗,游標已經在文字欄位中: + +- **{{ui:qrCode.text}}:** QR Code 的內容。按 Enter 建立 QR Code,Shift+Enter 換行。欄位下方會顯示已用掉多少空間;變音符號與其他特殊字母會佔用兩個位元組。文字過長時,欄位會提示。 +- **{{ui:qrCode.errorCorrection}}:** L、M、Q 或 H。等級越高,QR Code 局部髒污或刮傷時仍可讀取(L 約 7 %,M 15 %,Q 25 %,H 30 %),但相同文字需要更多模組,因此每個模組會更小。初始選擇 M。 +- **{{ui:qrCode.style}}:** {{ui:qrCode.style.code}} 只製作 QR Code 本身,高 4 mm。{{ui:qrCode.style.raised}} 把 QR Code 以 1 mm 高放在 3 mm 厚的白色底板上,成為雙色綁定,這樣多色列印會把 QR Code 印成深色、底板印成淺色。{{ui:qrCode.style.engraved}} 把 QR Code 刻入底板 1 mm 深。 +- **{{ui:qrCode.sizeBy}}:** 輸入整個 QR Code 的 {{ui:qrCode.sizeBy.width}}(初始 40 mm)或單一模組的大小;另一個數值會顯示在下方。模組小於 0.8 mm 時會出現警告。這只是 0.4 mm 噴嘴的經驗法則,並非保證:印表機、材料、顏色與手機都會有影響。 +- **{{ui:qrCode.quietZone}}:** 掃描器需要 QR Code 四周有一圈四個模組寬的空白區。在底板上,這圈空白區屬於底板;只有底板放在更大的淺色表面上時才可關閉。單獨的 QR Code 本身沒有空白區:請在四周留出空間。 +- **高度:** QR Code 的高度;在底板上則是 QR Code 高度或雕刻深度,以及底板厚度。 + +預覽會顯示 QR Code 完成後的樣子。{{ui:qrCode.ok}} 會把它放到平台中央。 + +QR Code 與其他實體一樣:可以移動、旋轉、縮放(保持寬度與深度相同,否則 QR Code 會被拉伸)、群組,或把它設為孔並群組進你自己的零件,在那裡刻出 QR Code。縮放會縮放整個 QR Code;每個模組始終保持正方形。 + +設定最上方的 {{ui:qrCode.title}} 卡片中存有文字。修改後點擊 {{ui:qrCode.regenerate}}:QR Code 會在原處重新建立,寬度維持目前值。錯誤更正、空白區與建構方式維持原本的選擇;若要其他選擇,請從形狀庫新建 QR Code。 + +列印前先用手機掃描一次,列印後再掃描一次。深色配淺色最易讀取;深色底板上的淺色 QR Code 並非所有手機都讀得到。 + +## 弧形文字 + +文字不一定得排成直線,也可以沿硬幣、蓋子或戒指的邊緣排列。為此提供了 {{ui:prop.textCurved}} 設定。 + +![文字沿圓周排列。所有字母都立在同一條基線上。](shot:curved-text) + +開啟後,文字會沿圓周排列。所有字母都立在同一條基線上,與一般文字一樣均勻。共有四項設定: + +- **{{ui:prop.textRadius}}**(5 至 500 mm):字母基線所在圓的半徑。 +- **{{ui:nameTag.letterSize}}:** 字母的高度。不再取決於形狀的寬度。 +- **{{ui:prop.textInward}}:** 把文字從圓的頂部移到圓的底部。字母的頭部便朝向圓心。 +- **{{ui:prop.textFlipped}}:** 只把字母翻面,讓你能從另一側閱讀。文字在圓上的位置不變。 + +**圓心就是形狀的中心。** 因此對齊照常有效:若把文字與圓柱或圓環置中對齊,它會正好同心。拉動控制點時,半徑與字母大小會一起增大,文字因此不會變形。 + +> **提示:** 在圓的頂部,字母立在基線外側;使用 {{ui:prop.textInward}} 時則立在基線內側,頭部朝向圓心。要讓文字剛好落在圓盤上,半徑加上字母大小應小於圓盤的半徑。 diff --git a/docs/guide/zh-tw/09-threads-and-mechanics.md b/docs/guide/zh-tw/09-threads-and-mechanics.md new file mode 100644 index 00000000..e4bc87e8 --- /dev/null +++ b/docs/guide/zh-tw/09-threads-and-mechanics.md @@ -0,0 +1,171 @@ +--- +title: 螺紋、齒輪與其他零件 +summary: 能相互配合的螺絲、螺帽與螺紋孔,以及齒輪、彈簧、彎管、燕尾、淚滴孔、沉頭孔與錐形沉頭孔。 +--- + +除了基本形狀,形狀庫裡還有一些自己拼起來會很麻煩的零件。這些零件之後都可以在設定中修改。 + +## 螺紋 + +在形狀庫中選擇 {{ui:shape.thread}}。在 {{ui:inspector.threadRole}} 下決定它的類型: + +- **{{ui:thread.rod}}:** 帶螺紋的圓柱,例如沒有頭的螺絲。 +- **{{ui:thread.screw}}:** 帶頭部。頭部形狀在 {{ui:inspector.threadHead}} 選擇:{{ui:thread.headCylinder}}、{{ui:thread.headCountersunk}} 或 {{ui:thread.headHex}}。 +- **{{ui:thread.nut}}:** 對應的螺帽。 +- **{{ui:thread.bore}}:** 螺紋孔。它是一個孔。把它拖進零件、將兩者群組,零件就有內螺紋。 + +![帶圓柱頭的螺絲。右側:類型與頭部形狀,往下是規格、螺距與牙型。](shot:thread-screw) + +在 {{ui:prop.threadSize}} 下從清單選擇規格:公制 M2 到 M24,英吋規格 UNC 與 UNF 從 No. 4 到 1 英吋,以及管螺紋 G1/16 到 G4。若選擇 {{ui:thread.customSize}},則自行設定 {{ui:prop.diameter}} 與 {{ui:prop.pitch}}。英吋或 G 規格時,欄位要求的是 {{ui:prop.threadsPerInch}},而不是以公釐計的螺距。 + +清單依系列分組,欄位下方會標出所選規格所屬的系列,並附上日常生活中熟悉的例子: + +- **M,公制粗牙:** 符合 ISO 261 的 ISO 公制粗牙螺紋,標準螺絲與螺帽即採用此規格。 +- **UNC,美制英吋粗牙:** 相機與三腳架螺絲為 1/4"-20 UNC(ISO 1222),較大的三腳架雲台使用 3/8"-16 UNC。 +- **UNF,美制英吋細牙:** 與 UNC 相同直徑,但螺距更細(ASME B1.1)。 +- **G,管螺紋:** 淋浴軟管以 G1/2 連接,洗衣機進水管為 G3/4。花園水龍頭末端為 G3/4,較小的水龍頭為 G1/2;快接軟管系統的水龍頭接頭就鎖在這裡。 + +G 規格是符合 ISO 228-1 的平行惠氏管螺紋,常見於水、瓦斯、液壓與氣動接頭。規格指的是管子,不是螺紋:G1 在螺紋處量得 33.249 mm。選擇 G 規格會把牙型設為 {{ui:thread.profileWhitworth}},選擇公制或英吋規格則設回 {{ui:thread.profileV}}。自己選的 {{ui:thread.profileTrapezoidal}} 或 {{ui:thread.profileRound}} 牙型會保留。標準只定義螺紋,因此 G 規格的螺絲頭與螺帽,比例和自行設定直徑時相同。錐形管螺紋 R、Rc 與 Rp 未包含在內。 + +更多設定: + +- **{{ui:prop.threadHand}}:** {{ui:thread.right}} 或 {{ui:thread.left}}。 +- **{{ui:prop.threadProfile}}:** {{ui:thread.profileV}} 是公制與英吋螺紋的標準牙型,{{ui:thread.profileWhitworth}} 則是 G 管螺紋的牙型:55°,牙頂與牙底為圓角。{{ui:thread.profileTrapezoidal}} 與 {{ui:thread.profileRound}} 的牙頂與牙底是平的。這種牙型通常列印更可靠,因為不會留下細薄的牙尖。 +- **{{ui:thread.profileCustom}}:** 自行塑造的梯形,牙頂與牙底同寬且平整。{{ui:prop.threadFlankAngle}} 是一顆螺牙兩側牙面之間的夾角:60° 是尖銳的 V 形螺紋,30° 是梯形螺紋;90° 以下時,牙面都不會比 45° 更平,因此螺紋不需支撐即可列印。{{ui:prop.threadDepth}} 與 {{ui:prop.threadCoreDiameter}} 是同一個尺寸的兩種說法:芯徑等於直徑減去兩倍深度,改動其中一個就會改變另一個。新的自訂牙型從 60° 的 V 形螺紋深度開始。深度受角度與螺距限制:不得淺於螺距的十分之一、不得深於直徑的 40%,也不能深到兩側牙面佔去超過十分之九的螺距。改變螺距時,深度按比例跟著變;縮放螺紋時,深度也一樣。間隙與倒角的作用與其他牙型相同。透過 MCP 橋接時,牙型為 `custom`,並帶 `threadFlankAngle` 與 `threadDepth`。 +- **{{ui:prop.clearance}}:** 對螺帽與螺紋孔而言,是確保列印出來的成對零件真的能轉動的餘裕。印表機越粗,這對零件需要的間隙越大。它是整個直徑上的額外空間,而 V 形螺紋牙面之間的縫隙大約只有它的一半,所以列印件需要比你想像更大的值:新螺帽從 0.4 mm 起,0.3 偏緊、0.5 偏鬆。先列印一對測試件。螺桿與螺絲在這裡有自己的間隙,會讓螺栓的直徑相應變細。它預設為 0。多出來的空間給哪一側,取決於你怎麼配對: + - **列印螺絲配列印螺帽:** 螺絲保持 0,把空間給螺帽(它一開始的 0.4 mm)。 + - **真實螺絲配列印螺帽或螺紋孔:** 列印的一側承擔全部,所以螺帽保留 0.4 mm。如果螺絲會晃,值得試試更緊的 0.3 mm。 + - **列印螺絲配真實螺帽:** 真實螺帽沒有間隙,所以螺絲必須更細:這裡用 0.3 到 0.4 mm,相當於列印螺帽原本會有的量。 +- **{{ui:prop.axialClearance}}:** 對螺帽與螺紋孔而言,是在 {{ui:prop.clearance}} 之外沿軸向的間隙。螺帽的每顆螺牙都會變薄這麼多,直徑維持不變。原因在於:{{ui:prop.clearance}} 只作用在直徑上,會把 V 形螺紋的牙面撐開到其數值的約 0.58 倍。想在牙面之間留出空隙,就得把直徑開得更大,代價是左右晃動。沿軸向的間隙把兩者分開。它預設為 0,所以已儲存的螺紋不會改變;最大可到螺距的五分之一,因為再大螺帽的螺牙就不剩什麼了。這個欄位只存在於螺帽與螺紋孔;螺桿與螺絲保有自己的間隙。更多內容見下文「3D 列印用的螺紋」。 +- **{{ui:prop.threadChamferTop}}、{{ui:prop.threadChamferBottom}}、{{ui:prop.headChamfer}} 與 {{ui:prop.rimChamfer}}:** 兩端的倒角,讓螺紋起牙乾淨、頭部沒有銳邊。螺桿、螺帽或螺紋孔的每一端都有自己的倒角,所以頂端可以長、底端可以短或不做。螺絲只在尖端有一個,標示為 {{ui:prop.chamfer}}。在螺帽或螺紋孔上,倒角是孔口超出外徑的擴口量;錐面以 45 度一路延伸到螺紋芯部,因此外徑處不會留下台階。 + +在 {{ui:thread.rod}} 與 {{ui:thread.bore}} 之間切換螺紋會保留其長度。螺帽與螺絲則從各自的標準尺寸開始。 +- **{{ui:prop.quality}}:** 螺紋計算的精細程度。越高越精確,但越慢。 + +列印螺紋是另一個主題。列印大零件之前,先做一對螺絲與螺帽當測試,並依你的印表機調整間隙。 + +## 3D 列印用的螺紋 + +列印出來的螺紋需要在兩處留出空間,而兩者的作用不同: + +- **直徑上的間隙({{ui:prop.clearance}}):** 讓螺帽變寬。螺絲兩側各有該值一半的空間,0.4 mm 時每側 0.2 mm。螺紋轉起來輕鬆,但螺絲會左右晃動。 +- **沿軸向的間隙({{ui:prop.axialClearance}}):** 讓螺帽的螺牙變薄。螺絲未鎖緊時可以沿軸向前後移動這個量。它不會增加側向的空間。 + +兩者合起來形成牙面之間的縫隙:約為直徑間隙的 0.58 倍加上沿軸向的間隙。以 0.3 mm 的縫隙為例:以前得在直徑上留 0.5 mm,也就是每側 0.25 mm 的空間。現在直徑 0.2 mm(每側 0.1 mm)加上軸向 0.2 mm 就夠了,縫隙為 0.32 mm。 + +**需要知道的影響** + +- **螺絲沿軸向有間隙。** 沒有負載時可以前後移動這個量。對扣件、蓋子與外殼無所謂;對需要精確定位的導螺桿就有影響,那裡要留小或設為 0。 +- **螺帽的螺牙會變薄。** 螺距 1.75 mm 下取 0.3 mm,每顆螺牙在中段幾乎薄了三分之一,強度明顯下降。重載零件請改用較粗的螺紋。 +- **計算量更大。** 螺牙形狀會多出額外的點,螺紋的三角形更多,計算稍久。 +- **惠氏牙型在 STEP 匯出中沒有真正的圓弧。** 帶軸向間隙的 {{ui:thread.profileWhitworth}} 螺紋,在邊緣工具與 STEP 匯出中會變成由直線段拼成的螺牙形狀,而不是真正的圓弧。設為 0 時一切維持原樣。 + +**提示** + +1. **先做一對測試件。** 一個螺絲加一個螺帽,各只有 4 到 6 mm 高,幾分鐘就能印完。並排列印三對間隙不同的零件,挑出轉得順又不晃的那一對。 +2. **從常用數值開始。** 直徑間隙 0.2 到 0.3 mm、軸向間隙 0.2 mm。螺絲左右晃就降低直徑間隙;卡住就加大軸向間隙。如果不想用軸向間隙,就照舊在直徑上取 0.4 mm。 +3. **軸向間隙至少應為一個層高。** 低於一層的量,印表機無法解析。層高 0.2 mm 時,0.2 mm 是不錯的起點;層高 0.1 mm 時,少一些就夠。 +4. **螺絲與螺帽直立列印。** 軸線朝上,每一圈都落在完整的層裡,牙面才會漂亮。平放時牙面會下垂。 +5. **細螺距很難印。** 螺距低於約 1 mm 時,螺紋圈常常黏在一起。較粗的螺紋,或牙頂平整的 {{ui:thread.profileTrapezoidal}} 牙型,比細 V 形螺紋更可靠。 +6. **避開細薄牙尖。** V 形螺紋的牙尖很窄,印表機的噴嘴寬度幾乎蓋不到。{{ui:thread.profileTrapezoidal}} 與 {{ui:thread.profileRound}} 牙型的螺牙較平。 +7. **去毛邊並磨合。** 最初幾圈常常很澀,因為列印殘留的小凸起卡在牙面上。來回轉幾次就會順。起牙處的倒角有助於鎖入。 +8. **換印表機或線材。** 間隙取決於印表機、材料與噴嘴。更換任一項後請重新列印測試件。 + +邊緣工具會把螺紋當作精確實體。你可以在螺紋已就位的情況下,對承載它的零件倒角或倒圓,也可以處理螺絲頭的邊緣,參見[邊的修整與實體抽殼](chapter:edges-and-hollowing)。計算螺紋的邊需要一些時間:M6 幾秒鐘,G1/2 管螺紋約半分鐘。要斷開螺絲頭邊緣,最快的方法仍然是屬性裡的頭部倒角。 + +## 齒輪 + +{{ui:shape.gear}} 有 {{ui:gear.spur}}、{{ui:gear.helical}}、{{ui:gear.herringbone}} 與 {{ui:gear.bevel}},以及 {{ui:gear.internal}} 與 {{ui:gear.rack}}(見下文)。新齒輪在 {{ui:prop.gearProfile}} 下為 {{ui:gear.profileInvolute}}:齒面為漸開線的齒,與齒輪產生器及工程上的用法一致。這種齒能平順地互相滾動。你設定 {{ui:prop.teeth}} 的齒數(6 到 500)與 {{ui:prop.gearModule}},尺寸隨之決定:外徑為模數 ×(齒數 + 2),節圓為模數 × 齒數。新齒輪從模數 2 開始。兩個齒輪要嚙合,必須模數相同、{{ui:prop.gearPressureAngle}} 相同(通常為 20°),且中心距為(齒數 + 齒數)× 模數 / 2。同時選取兩個齒輪,屬性面板會給出該中心距以及目前實際的中心距。如果齒輪應該留在原位,它也會給出讓它們在該處嚙合的模數,{{ui:inspector.gearPairFitApply}} 一步就能讓兩個齒輪都採用該模數;各自的齒數、高度與中心孔維持不變。如果此時齒對齒而不是齒對齒槽,就把其中一個齒輪轉半個齒,也就是 180° 除以它的齒數。{{ui:prop.gearBacklash}} 會從齒上削去一點,避免列印出來的成對齒輪卡死。這個值針對整對齒輪,每個齒輪承擔一半;0.2 mm 是不錯的起點,0 則是精確的齒輪。基圓以下,齒面筆直向下延伸到齒根,不像刀具加工那樣有根切。這適合列印,但齒數低於約 17 的極小齒輪可能會在齒根處輕微摩擦。 + +斜齒輪多了 {{ui:prop.helixAngle}}。使用漸開線齒時,它是節圓上的真實螺旋角:兩個斜齒輪要嚙合,必須模數相同、角度相同,一個為正、一個為負。{{ui:gear.herringbone}} 是兩半旋向相反的斜齒輪:齒以同一方向上升到一半高度,再折返回來,像箭頭一樣。這對 3D 列印有兩個好處:齒輪會在軸上自行對正,而且沒有軸向推力,因為兩半的力相互抵消。相對地,斜齒輪會沿軸線向側面推。你像設定斜齒輪那樣設定 {{ui:prop.helixAngle}} 與 {{ui:prop.helixQuality}};角度對每一半都適用。兩個人字齒輪要嚙合,必須模數相同、角度相同但符號相反,一個為正、一個為負。中間沒有銑削人字齒輪那樣的退刀槽:兩半無階差地相接。邊緣工具與 STEP 匯出會把人字齒輪當作三角形網格,而不是精確實體。 + +傘齒輪採用漸開線齒,並讓齒往頂端逐漸變小。這是近似做法,不是精確計算出的傘齒輪對。 + +{{ui:gear.profileRound}} 是由圓弧構成的圓齒,類似 Tinkercad 的 Useful gear:齒頂與齒槽無稜角地相接。小齒輪這樣列印更寬容、轉動也更輕鬆,裝在旋鈕上時齒還帶來舒適的握感。圓齒同樣由 {{ui:prop.teeth}}、{{ui:prop.gearModule}} 與 {{ui:prop.gearBacklash}} 設定;它們沒有壓力角。圓齒比漸開線齒矮,所以外徑為模數 ×(齒數 + 1.2)。相同模數的圓齒輪可以嚙合,中心距與漸開線齒輪相同;但與漸開線齒輪配不起來。 + +{{ui:gear.profileSimple}} 是目前所有齒輪都用的直齒。在那裡手動設定 {{ui:prop.toothSize}} 與 {{ui:prop.toothWidth}}。舊設計會一直保留直齒,直到你更改齒形。三種齒形都有 {{ui:prop.centerHole}}。 + +{{ui:gear.internal}} 的齒朝內:一個讓較小齒輪在裡面運轉的齒圈,就像行星齒輪組的外環。它像漸開線或圓齒輪那樣,用 {{ui:prop.teeth}}、{{ui:prop.gearModule}} 與 {{ui:prop.gearBacklash}} 設定,另外還有 {{ui:prop.gearRim}},即齒外側的輪緣。外徑為模數 ×(齒數 + 2.5)加上兩倍輪緣;圓齒則為模數 ×(齒數 + 1.7)。相同模數的齒輪要在其中運轉,中心必須位於距齒圈中心(齒圈齒數 − 其齒數)× 模數 / 2 處;同時選取兩者,屬性面板會給出該距離。行星齒輪組中,齒圈齒數 = 太陽齒輪齒數 + 2 × 行星齒輪齒數,例如 30 = 12 + 2 × 9。齒圈沒有中心孔,它本身就是環。齒數介於 26 到 33 時,齒頂最多短四分之一模數,因為否則基圓處會形成極小的邊;嚙合不受影響。 + +{{ui:gear.rack}} 是半徑無窮大的齒輪:一根單側帶齒的條,使用漸開線齒時齒面是壓力角下的直線。寬度(沿 X)為齒數 × 齒距,齒距為 π × 模數,所以同模數的齒條可以首尾相接,每一端都落在齒槽中。長度(沿 Y)是齒條的厚度,可自由設定,只要齒與半公釐的條身放得下。齒朝前,即朝向主視圖的觀察者;視需要轉動齒條。相同模數的齒輪要在其上滾動,中心必須位於節線前方齒數 × 模數 / 2 處;節線在齒頂後方一個模數處,圓齒則為 0.6 個模數。齒圈與齒條有漸開線齒與圓齒兩種,沒有簡單齒;切換齒輪類型會保留模數。 + +邊緣工具與 STEP 匯出會把每個齒輪當作精確實體,漸開線齒面為平滑曲線。橢圓形輪廓上的斜齒輪仍是三角形網格,從約 31 齒起的漸開線斜齒輪也一樣。小齒限制了邊能倒圓的程度:簡單齒的齒輪直徑 30 mm、12 齒時,兩齒之間齒根處的平面只有約 0.65 mm 寬,所以全邊倒圓最多約 0.5 mm;傘齒輪頂端更小,最多約 0.4 mm。斜齒輪的齒是傾斜的,會讓那個平面在斜邊上變窄:螺旋角相對齒輪高度越大,能容納的圓角越小。兩個平端面的邊可以倒圓,但只對這些邊倒角會在 CAD 核心中失敗;請改為倒圓,或以較小尺寸(例如 0.2 mm)對所有邊一起倒角。 + +## 彈簧 + +{{ui:shape.spring}} 有 {{ui:prop.turns}} 與 {{ui:prop.wire}}。它們連同高度一起決定彈簧的軟硬。{{ui:prop.springHand}} 決定線材的旋向:{{ui:spring.right}} 就像常見的壓縮彈簧,或 {{ui:spring.left}}。 + +邊緣工具與 STEP 匯出會把彈簧當作精確實體:沿螺旋線的圓線材,兩端切平。例如你可以對這兩個線材端頭倒圓或倒角。 + +## 彎管 + +一個 {{ui:shape.bentTube}} 最多由十二段組成:一段直管,接著一個彎。每一段你設定 {{ui:prop.bentTubeSegmentLength}}、{{ui:prop.bentTubeBendAngle}}、{{ui:prop.bentTubeBendRadius}} 與 {{ui:prop.bentTubeRoll}}。正在編輯的那一段會以橘色亮起,方便你掌握順序。滾轉角為 0° 時在工作平面內彎曲,90° 時管子向上彎。輪廓可以是圓形、方形、六邊形或八邊形,內部同樣如此,也可以完全實心。如果管子撞到自己,layerling 會警告你。 + +## 放樣 + +{{ui:shape.loft}} 把底部的一個輪廓接到頂部的另一個輪廓,就像 Fusion 的放樣:從一種直徑接到另一種直徑的軟管接頭、把方形風扇接到圓管上、向上逐漸變圓的支架。每一端你選擇 {{ui:prop.loftBottomOutline}} 與 {{ui:prop.loftTopOutline}}:{{ui:loft.round}}、帶 {{ui:prop.loftBottomCorner}} 的 {{ui:loft.rectangle}},或帶角數的 {{ui:loft.polygon}},再加上每一端的寬度、長度與高度。{{ui:prop.loftOffsetX}} 與 {{ui:prop.loftOffsetZ}} 把頂端向側面移動,做出傾斜過渡;底端留在原處。 + +{{ui:prop.loftWall}} 把實體變成上下開口的管。兩端開口的橫向尺寸都比外形小一個壁厚;壁面傾斜處會略薄一些。把框架拖大,兩端也跟著變大,而圓角半徑與壁厚維持不變。 + +{{ui:prop.loftSmooth}} 讓過渡變得平滑。為 0 時,側面從底部到頂部筆直延伸,像圓錐一樣。為 100 時,兩端先筆直向上,再以 S 曲線在中間改變尺寸:軟管接頭從窄管平滑地擴張到寬管,而不是像漏斗那樣斜張。中間的數值在兩者之間混合。平滑過渡可與 {{ui:prop.loftWall}}、扭轉、傾斜及側向偏移一起使用;帶壁的管兩端仍保持開口。它和直邊放樣一樣是精確實體,因此邊可以倒角與倒圓,但它由多個斷面構成,計算會稍久。 + +{{ui:prop.loftTwist}} 在上升過程中讓斷面繞垂直軸均勻旋轉,任一方向最多 360°;側面於是盤旋而上。{{ui:prop.loftTiltX}} 與 {{ui:prop.loftTiltZ}} 讓頂端傾斜,最多 45°:正值會抬高其前緣或右側。中間的斷面依比例傾斜,所以壁面平順地接到斜面上。最高點維持在設定高度。如果之後高度變得太小,傾斜端會伸到平台下方,傾斜就會退讓到剛好放得下。沿路徑彎曲(例如管彎頭)不是放樣能做到的。 + +放樣是精確實體,扭轉與傾斜後也是:邊可以倒角與倒圓,STEP 匯出也會保留。照常加上帶螺絲孔的法蘭再群組。 + +## Gridfinity + +{{ui:shape.gridfinity}} 形狀用來製作 Zack Freedman 的開放式收納系統零件:42 mm 網格上的收納盒,可放在底板裡,也能彼此堆疊。尺寸遵循公開的 Gridfinity 規格,所以 layerling 做的收納盒能裝進其他產生器做的底板,反之亦然。在 {{ui:prop.gridfinityType}} 下選擇: + +- **{{ui:gridfinity.bin}}:** 每個網格單元下方都有支腳的收納盒。{{ui:prop.gridfinityUnitsX}} 與 {{ui:prop.gridfinityUnitsZ}} 以 42 mm 的網格單元計數(收納盒小 0.5 mm,一個單元為 41.5 mm);{{ui:prop.gridfinityUnitsY}} 以 7 mm 的高度單元計數,最多 20。壁頂的 {{ui:prop.gridfinityLip}} 托住下一個收納盒的支腳,並使收納盒增高 4.4 mm:3 單元帶唇緣的收納盒高 25.4 mm。啟用 {{ui:prop.gridfinityMagnets}} 後,每個支腳的每個角都會有一個 6 × 2 mm 磁鐵孔。 +- **{{ui:gridfinity.baseplate}}:** 收納盒所站的底板,高 5 mm,每個網格單元有一個插槽。它是沒有底面、沒有磁鐵孔的開放框架。 + +尺寸一律是整數網格單元(或下文半尺寸網格的 21 mm 格),最大 6 × 6(252 mm,可放進 256 mm 的列印平台);拖曳把手會吸附到最近的單元。壁厚(0.95 mm)、底面(1.2 mm)與磁鐵孔深度(2.4 mm)不在規格內;壁厚與孔深固定,底面則可以抬高(見下文)。規格中的 M3 螺絲孔不會做出。唇緣頂端是尖的,與規格的畫法一致;如果你的印表機打出來有毛邊,用邊緣工具倒圓或倒角。收納盒與底板是精確實體,所以倒圓、倒角與 STEP 匯出都能用。要分隔收納盒,可把薄長方體當作隔牆群組進去:讓它們立在底面上,即高 5.95 mm 處(或抬高的底面上);帶唇緣的收納盒,頂端至少保持在每個高度單元 7 mm 下方 0.5 mm,從收納盒底面量起(3 單元為 20.5 mm),因為下一個收納盒的支腳會向下伸入收納盒 0.35 mm。列印收納盒與底板時不需支撐,依它們在列印平台上的姿態直立列印。 + +收納盒也可以做在半尺寸網格上:開啟 {{ui:prop.gridfinityHalfGrid}},此時 {{ui:prop.gridfinityUnitsX}} 與 {{ui:prop.gridfinityUnitsZ}} 以 21 mm 的格計數,最多 12(與 6 單元相同的 251.5 mm)。每個格都有自己的支腳,頂部寬 20.5 mm,帶有規格中的階梯,四個這樣的支腳站在普通底板的一個插槽裡,所以 1½ 或 2½ 單元的收納盒能與整數單元的並排使用。開啟 {{ui:prop.gridfinityHalfGrid}} 時,收納盒保持其輪廓(2 單元變成 4 格);關閉時,奇數格會向上取整為整數單元。唇緣照舊跟隨收納盒的輪廓。啟用 {{ui:prop.gridfinityMagnets}} 後,每個支腳得到一個孔,從其中點朝位於 42 mm 網格上的那個格子角落,兩個方向各偏移 2.5 mm,從收納盒左後角算起:當這個角位於網格角上時,這些孔會與其他產生器所做、帶磁鐵的底板孔對齊;奇數格的收納盒還可以轉 180°,讓這個角位於右前方的網格角上。底板仍維持 42 mm 網格。半尺寸網格不屬於規格。 + +高度 3 單元以上的收納盒,可以沿內壁設定標籤架:以任意組合開啟 {{ui:prop.gridfinityLabelBack}}、{{ui:prop.gridfinityLabelFront}}、{{ui:prop.gridfinityLabelLeft}} 或 {{ui:prop.gridfinityLabelRight}}。每個開啟的標籤架都有自己的 {{ui:prop.gridfinityLabelWidth}}、{{ui:prop.gridfinityLabelLength}},較短的標籤架還有 {{ui:prop.gridfinityLabelOffset}};下方的角落設定套用於全部。標籤架頂面平整可貼標籤,前緣有 1.2 mm 的下垂條,底面以 36 度上升。其頂端在每個高度單元 7 mm 下方 0.85 mm,從收納盒底面量起(3 單元為 20.15 mm),所以疊在唇緣上的收納盒支腳會與它保持 0.5 mm 的間隙。低於 3 單元的收納盒不顯示標籤架;回到 3 單元時會回復。標籤架不屬於規格。 + +{{ui:prop.gridfinityLabelWidth}} 是標籤架伸入收納盒的深度:14 mm,3 單元的收納盒最多 17.2 mm(抬高底面時更少);1 單元深、2 mm 圓角的收納盒中,兩個相對的標籤架為 16.8 mm。{{ui:prop.gridfinityLabelLength}} 為 0 時,標籤架從一面牆延伸到另一面牆。較短的標籤架至少 10 mm,會顯示 {{ui:prop.gridfinityLabelOffset}},把它從所在牆的中央移開:在主視圖所示的前牆與後牆上向右移,在側牆上向前移。如果一端距牆在 1 mm 以內(帶堆疊唇緣時為 1.8 mm,因為唇緣的支撐在那裡向內傾斜),或停在該牆的標籤架上,就會繼續延伸進去;兩個在角落相遇的標籤架會合而為一。當標籤架與牆或另一個標籤架相接且空間足夠時,角落會倒圓或倒角:在 {{ui:prop.gridfinityLabelCorner}} 下選擇 {{ui:gridfinity.labelRound}} 或 {{ui:gridfinity.labelChamfer}},並用 {{ui:prop.gridfinityLabelCornerSize}} 設定尺寸(2 mm;0 保持尖銳)。選擇 {{ui:gridfinity.labelRound}} 時,較短標籤架的自由端前角也會倒圓,尺寸相同,但最多為標籤架寬度的一半。 + +收納盒也可以沿任一內壁設定取物口,讓小零件能沿曲面被推出來,而不必在底面與牆相接處摳出來:以任意組合開啟 {{ui:prop.gridfinityScoopBack}}、{{ui:prop.gridfinityScoopFront}}、{{ui:prop.gridfinityScoopLeft}} 或 {{ui:prop.gridfinityScoopRight}}。底面沿四分之一圓升入牆內,從一面牆延伸到另一面牆,相鄰牆上的兩個取物口在角落相接。帶取物口的收納盒,每條底面邊也會按 2.8 mm(內角半徑)倒圓,取物口就是所在牆上這處圓角的放大。一旦開啟取物口,開關下方會出現 {{ui:prop.gridfinityScoopRadius}},並套用於所有取物口:在你設定之前,它的值是從底面到唇緣支撐離開牆面處這段高度的一半(該處位於每個高度單元 7 mm 下方 1.65 mm,從收納盒底面量起);沒有唇緣的收納盒則以頂部為上限(帶唇緣的 3 單元收納盒為 6.7 mm,抬高底面時更少)。它至少為 3.5 mm,並至少比該高度小 0.5 mm;在收納盒橫向至少留下 2 mm 的底面,不論是兩個相對的取物口之間,或取物口與其對面的牆之間。1 單元高的收納盒沒有空間做取物口,也不顯示相關開關;到 2 單元時會回復。取物口同樣不屬於規格。 + +收納盒也可以有抬高的底面,當作可切出形狀的實心坯料:{{ui:prop.gridfinityFloorHeight}} 設定底面的高度,從收納盒底面量起(在你設定之前為 5.95 mm,即支腳上的 1.2 mm 底面),收納盒到該高度為止都是實心。帶唇緣時,它最多升到唇緣支撐離開牆面處,即每個高度單元 7 mm 下方 1.65 mm(3 單元為 19.35 mm),這樣唇緣保持完整,疊在其上的收納盒支腳也保有 1.3 mm 的間隙;沒有唇緣時可升到頂部,收納盒成為實心塊。把工具形狀的孔群組進去,深度依需要而定。取物口從抬高的底面開始,標籤架伸入收納盒的深度會減少,使其底面仍止於底面之上;一旦底面讓它們沒有空間,相關開關就會消失(帶唇緣的 3 單元收納盒中,取物口高於 15.35 mm 時消失,標籤架高於 15.54 mm 時消失),降低底面後又會回復。帶唇緣的 1 單元高收納盒沒有空間抬高底面,也不顯示該欄位。抬高底面同樣不屬於規格。 + +收納盒也可以分隔成隔間,而不必把隔牆群組進去:在 {{ui:inspector.gridfinityCompartments}} 下,就在 {{ui:inspector.properties}} 下方,{{ui:prop.gridfinityCompartmentsX}} 與 {{ui:prop.gridfinityCompartmentsZ}} 設定數量,每個方向每個網格單元最多 4 個(半尺寸網格的每格 2 個),總共最多 40 個。隔板貫穿整個高度,從底面(或抬高的底面)一直到每個高度單元 7 mm 下方 0.85 mm 處,標籤架也止於那裡,所以疊在唇緣上的收納盒照常安放。隔板要求收納盒至少有 2 個高度單元,且底面至少低於其頂部 3 mm;空間不足時,收納盒會在不做隔板的情況下建構,等又有空間時再回復。{{ui:prop.gridfinityDividerThickness}} 在設定前為 1.2 mm,範圍 0.8 到 3 mm。隔板初始均勻分布。要移動某一塊,在 {{ui:prop.gridfinityDividerAcross}} 或 {{ui:prop.gridfinityDividerDeep}} 下選取它(從左或從後計數),並設定其 {{ui:prop.gridfinityDividerPosition}},從左牆或後牆內側量到隔板中央;每個隔間至少保持 6 mm 寬。一旦移動過隔板,調整收納盒尺寸時,該方向的隔板會以公釐為單位保持位置;重新設定隔間數量會讓該方向的隔板再次均勻分布。每個隔間都有收納盒的內角,按 2.8 mm 倒圓,其底面邊也按 2.8 mm 倒圓,無論有沒有取物口。取物口會在每個隔間重複:後牆有取物口時,每個隔間的後側都有一個,靠著牆或隔板。在狹窄的隔間裡,半徑會縮小,以留下 2 mm 平的底面;若隔間窄到連 3.5 mm 都放不下,該方向的取物口就會消失;{{ui:prop.gridfinityScoopRadius}} 下方的說明會指出這一點。隔板同樣不屬於規格。 + +帶隔板的收納盒可以在每個隔間裡設定標籤架,而不是沿牆的標籤架:沿牆的標籤架是給沒有隔間的收納盒用的,當收納盒回到單一隔間時,那些開關會回復。在高度 3 單元以上的收納盒中,用 {{ui:prop.gridfinityCompartmentRow}} 與 {{ui:prop.gridfinityCompartmentColumn}} 選擇隔間(各在隔間數多於一個時顯示),並在 {{ui:prop.gridfinityCompartmentLabel}} 下選擇標籤架所靠的一側,即收納盒的牆或某塊隔板;只有當該側的標籤架仍能讓隔間保持開口時,才會提供這一側。{{ui:prop.gridfinityCompartmentLabelLength}} 的範圍是 10 到 100;若標籤架會短於 4 mm 就不做,並在其下方加註說明。較短的標籤架會顯示 {{ui:prop.gridfinityLabelOffset}}:在後側或前側時為 {{ui:gridfinity.alignLeft}}、{{ui:gridfinity.alignMiddle}} 或 {{ui:gridfinity.alignRight}};在左側或右側時為 {{ui:gridfinity.alignBack}}、{{ui:gridfinity.alignMiddle}} 或 {{ui:gridfinity.alignFront}}。{{ui:prop.gridfinityLabelWidth}} 在設定前為 14 mm,狹窄隔間中更小;標籤架絕不會伸到把隔間封死:前方至少保持 6 mm 開口。這些標籤架的斷面與沿牆的標籤架相同,{{ui:inspector.properties}} 下的 {{ui:prop.gridfinityLabelCorner}} 與 {{ui:prop.gridfinityLabelCornerSize}} 也套用於它們。 + +## 鉸鏈 + +{{ui:shape.hinge}} 一次列印成型,之後可以活動(列印即組裝):兩片葉片平攤在平台上,中間沿同一軸線交替排列鉸鏈節。銷屬於後片,並帶間隙穿過前片的鉸鏈節。你設定 {{ui:prop.hingeLength}}、{{ui:prop.hingeOpenWidth}} 與 {{ui:prop.hingeKnuckleDiameter}},還有 {{ui:prop.hingeKnuckles}} 的數量(奇數,讓銷兩端都被固定)、{{ui:prop.hingePinDiameter}} 與 {{ui:prop.hingeLeafThickness}}。 + +{{ui:prop.hingeClearance}} 是活動零件之間的間隙:銷周圍、鉸鏈節之間,以及葉片前方。0.4 mm 時,調校良好的印表機通常輕輕一扭就能鬆開;如果零件黏在一起就加大,晃得太厲害就減小。依平台上呈現的姿態平放列印鉸鏈,不要支撐。如果你偏好用自己的銷,例如一段線材或鐵絲,在小鉸鏈上它比列印的銷更光滑,就開啟 {{ui:prop.hingePinless}}:列印的銷會被略去,孔徑等於銷直徑加間隙,貫穿每個鉸鏈節,包括兩端。用 {{ui:prop.hingeAngle}} 讓第二片繞銷折起,把鉸鏈擺成設計中的姿態:0° 平躺如列印時,180° 為閉合。鉸鏈節維持原位,鉸鏈仍是一體;就地列印前記得設回 0°。你可以給葉片加孔,或把它們群組進更大的零件,例如蓋子。 + +## 滾花 + +{{ui:shape.knurl}} 是四周佈滿溝槽的圓形握持面,用於旋鈕、撥輪與工具握把。在 {{ui:prop.knurlPattern}} 下選擇 {{ui:knurl.straight}}(沿軸線的溝槽,像控制旋鈕)、{{ui:knurl.diamond}}(兩排斜向溝槽交叉成小菱形),或 {{ui:knurl.round}}(沿軸線的溝槽與凸脊形成柔和的圓弧波浪,握感舒適而沒有銳利稜線)。圓弧溝槽保持淺於半個節距,否則凸脊會在根部鼓起;深度過大會自動退讓。你設定 {{ui:prop.diameter}} 與 {{ui:prop.height}}、{{ui:prop.knurlCount}} 的數量與 {{ui:prop.knurlDepth}};交叉滾花還要設定相對軸線的 {{ui:prop.knurlAngle}}。{{ui:prop.knurlChamfer}} 以 45 度切開兩端,像車削的旋鈕;0 則保持尖銳。 + +直紋與圓弧滾花是精確實體,所以邊可以斷開與倒圓。交叉滾花仍是網格,因為當作精確實體時,30 條溝槽要計算將近一分鐘。要給軸上的旋鈕用,把滾花與一個孔群組,例如設為螺紋孔的 {{ui:shape.thread}}。淺於 0.4 mm 的溝槽幾乎沒有印表機能乾淨印出,而且 layerling 不會讓它們沿握持面間隔小於 0.8 mm:細的握持面得到的溝槽更少。 + +## 燕尾 + +{{ui:shape.dovetail}} 是一種兩個零件相互扣住、只能從側面滑入的接頭。你設定寬端的寬度、{{ui:prop.dovetailNeckWidth}} 與燕尾的長度。為另一側複製燕尾,並把副本設為孔:{{ui:prop.dovetailClearance}} 就會給出一點間隙,讓接頭列印後不會卡死。 + +> **提示:** 群組時,螺紋孔會切入與它重疊的零件。所以把它稍微放進材料裡,而不是只貼著表面。 + +## 淚滴孔 + +側放的孔列印時頂部會形成橋接,而橋接會下垂。因此 {{ui:shape.teardrop}} 頂部有一個尖點:每一層都支撐在下一層上,孔不需支撐就能印得夠圓。把 {{ui:prop.teardropDiameter}} 設為孔的尺寸,M3 螺絲約 3.4 mm,並讓 {{ui:prop.teardropLength}} 長到足以穿透零件。{{ui:prop.teardropTipAngle}} 為 90°,所以兩側在 45° 相接。大多數印表機都能乾淨處理;尖端越平需要越多高度,越陡則越省高度。 + +把淚滴孔設為孔,並與零件群組。其長度沿深度方向,尖端朝上。要在另一個方向開孔,就讓它繞垂直軸旋轉 90°。 + +側放的**螺紋孔**同樣會在頂部下垂。給它配一個自己的淚滴孔:新增一個 {{ui:shape.teardrop}} 孔,其 {{ui:prop.teardropDiameter}} 為螺紋芯部,即螺牙讓出的直徑(M10 約 8.4 mm),長度與螺紋孔相同,然後同時選取兩者。點擊 {{ui:editor.tool.align}},讓它們在中央對齊——淚滴孔的中心是其圓部的中心,而不是含尖端外框的中心,所以兩個圓彼此重合——再把兩者與零件群組。螺紋照常切出,尖端打開孔的頂部,因此不需支撐即可列印。 + +## 沉頭孔與錐形沉頭孔 + +螺絲頭常常不該凸出。{{ui:shape.counterbore}} 為內六角螺絲(DIN 912)切出圓形沉頭孔,{{ui:shape.countersink}} 為沉頭螺絲(DIN 7991)切出錐形沉頭孔。兩者都以頭部一端朝上:{{ui:prop.screwHoleHead}} 是沉頭孔或錐面的直徑,{{ui:prop.screwHoleShaft}} 是其下方的孔,{{ui:prop.screwHoleLength}} 是總長度。沉頭孔上你設定 {{ui:prop.screwHoleHeadDepth}},錐形沉頭孔上設定 {{ui:prop.screwHoleAngle}}(90° 適合沉頭螺絲)。預設值適合 M3 螺絲。 + +{{ui:shape.doubleCountersink}} 是兩面都倒角的孔,用於正面與背面都要整潔的板件。它在形狀庫裡沒有獨立項目:取用 {{ui:shape.countersink}},並在其屬性中開啟 {{ui:prop.screwHoleBothSides}}(本身就是雙面錐形沉頭孔的實體已顯示該開關開啟):兩端各有一個錐面張開到 {{ui:prop.screwHoleHead}},中間是 {{ui:prop.screwHoleShaft}}。你照舊設定 {{ui:prop.screwHoleAngle}} 與 {{ui:prop.screwHoleLength}}。如果孔太短,容不下兩個完整的錐面,它們會以該角度在中央相接,桿部會比你設定的更寬:10 mm 的頭部、6 mm 的桿部、90° 與 2 mm 的長度,會形成兩個從 10 mm 收窄到 8 mm 的錐面。作為孔,它像其他孔一樣被推穿零件。 + +把形狀設為孔,並與零件群組。讓它的頂端略高於頭部應貼合的表面,使沉頭孔開口乾淨。要為六角螺帽做沉頭孔,就用六邊的 {{ui:shape.polygon}} 當作孔。 diff --git a/docs/guide/zh-tw/10-measuring-and-notes.md b/docs/guide/zh-tw/10-measuring-and-notes.md new file mode 100644 index 00000000..71fdfd65 --- /dev/null +++ b/docs/guide/zh-tw/10-measuring-and-notes.md @@ -0,0 +1,79 @@ +--- +title: 量測與備註 +summary: 捲尺、標尺與角尺,到原點的距離,附著在零件上的備註,以及可供吸附的參考點。 +--- + +要精確做出一個零件,就得量測。layerling 為此準備了幾種工具,它們都不會出現在匯出檔案裡。零件內部的壁厚與間隙,最好在[剖視圖](chapter:view-and-workplane)中用 {{ui:camera.sectionMeasure}} 量測。 + +## 捲尺 + +捲尺位於左側邊緣相機列的下端({{ui:camera.tapeTools}})。它量測角、邊與面之間的距離。點擊它會展開五個按鈕。如果它們擋住你想量測的地方,就抓住左側的握柄,把它們拖到工作平面上的任何位置;雙擊握柄即可歸位: + +![捲尺及其按鈕:新增量測、移動量測點、移除量測、整條邊、刪除所有量測。](shot:tape-menu) + +1. **{{ui:camera.addMeasurement}}:** 點擊一個點,拖到下一個點再點擊,距離就會標示出來。在相對的邊或面上,當指標靠近時,第二個點會以直角對齊第一個點吸附;或者按住 [[Shift]],就能落在該邊或該面上的任何位置。在同一面內或工作平面上,[[Shift]] 會讓量測沿主軸保持筆直。 +2. **{{ui:camera.moveMeasurement}}:** 抓住這些點拖曳,數字會跟著跑。 +3. **{{ui:camera.deleteMeasurement}}:** 之後點擊某一條量測即可將它移除。**{{ui:camera.addMeasurement}}** 作用中時,按住 [[Shift]] 或 [[Ctrl]](Mac 上為 [[Cmd]])點擊量測點或量測線,就能直接刪除,不必切換模式。 +4. **{{ui:camera.tapeWholeEdges}}:** 點擊一條邊會量測它的全長,例如一個圓的周長。關閉這項後,點擊會改為在邊上放一個點,第二個點則可放到任何位置,因此能量測直徑或任何其他距離。按著 [[Alt]] 會讓這個開關對該次點擊反轉。在圓上,當指標靠近時,與第一個點相對的點會自動吸附,而且點會落在真正的圓周上,所以量出的直徑是精確的。 +5. **{{ui:camera.deleteAllMeasurements}}:** 一次移除所有量測。由於無法復原,layerling 會先詢問;沒有量測時則無事可做。 +6. **{{ui:camera.tapeMarkMiddle}}:** 每一條量測的數字下方都有一個小十字準星按鈕。它會在量測的正中央放一個[參考點](#reference-points):點擊圓形的邊(例如孔的邊緣)後,點會落在該圓的圓心,匯入的網格也一樣,那裡沒有別的東西標出孔心;若量的是直徑或任何直線距離,則落在其中點。之後拖曳形狀時,形狀會以自身中心吸附到該點。已經存在的點不會重複建立。捲尺吸附參考點的方式就跟吸附角一樣,因此可以從圓心或線段中點開始量測:先標記,再點擊該點。 + +按 [[Esc]] 離開量測模式。 + +## 標尺 + +從形狀庫中取出{{ui:shape.ruler}}。它純粹是量測工具:不會出現在任何匯出中,也不能群組或剪下。對於每一個碰到或與標尺重疊的實體,它會直接在檢視畫面中以浮動數字顯示其範圍。你可以就地修改這個數字,實體會跟著改變。浮動的加號會建立被量測形狀的複本。它印出的刻度以公釐為單位;把單位切換為英吋後(右下角的開關),刻度就是英吋,每十六分之一英吋一條線,整英吋處標有數字。 + +## 角尺 + +有時從直角方向量測會更方便。點擊相機列中的 {{ui:camera.cornerRulerTool}},再點擊工作平面。一把兩臂成直角、帶有像直角尺般刻度線的角尺便會放在那裡。它本身同樣不是實體。點擊實體角落附近,該角就會精確吸附到那裡。 + +角尺平放在工作平面上。如果該平面位於某個實體的側面上,角尺也平放在那個側面上,參見[檢視與工作平面](chapter:view-and-workplane)。在垂直牆面上標尺寸就是這麼做:把工作平面放到牆上,將角尺放在左上角,然後點擊握把,直到兩臂指向右與下。 + +- **拖曳握把**可移動它。 +- **短促地點擊握把**會讓它旋轉 90°。 +- **旁邊的 ×** 可將它移除。 +- **握把左側的小按鈕**切換量測基準:實體的外側(端點,帶線條的圖示)或實體的中間(中點,十字準星)。每個綠色數字旁都有一個同類的小開關,只設定該數字:以直立的圓柱來說,兩臂方向取中間、高度取底部;橫躺的圓柱則是橫向取中間、軸向取一端。當三者再度一致時,握把上的按鈕就會顯示共同的模式。 + +如果實體站在其中一條臂上,角尺會自動顯示它們的尺寸。這只在基板上有效,放在實體側面則無效。 + +選取一個實體後,角尺會以綠色顯示它距角點多遠,包括沿兩臂的方向與高度。點擊綠色數字輸入距離,實體就會精確移到那裡。選取多個實體時,它們會視為一個整體:標尺量測它們共同的外輪廓,輸入數值會讓它們一起移動,而彼此的相對位置不變。 + +綠色數字的引導線沿著地面(也就是角尺所在的平面)延伸到實體下方或旁邊的點;高度則有自己的箭頭。每個數字的開關位於該數字的邊框內。兩臂與刻度是空間中的線條:擋在它們前面的實體會遮住它們,就像一把真正的角尺會被遮住一樣。握把下方的小眼睛圖示可切換這一點:眼睛帶斜線時,實體會遮住角尺(初始狀態);眼睛打開時,角尺會一直顯示在所有東西之上。當實體擋在兩臂前面時,臂上的數字會淡出。 + +使用中點模式時,綠色數字會量到實體的中間,高度也一樣。這樣就能把球體的中心放在距某條邊正好 15 mm 的位置,不必再減去半徑。在牆面上,要讓孔距左邊 40 mm、距頂部 190 mm,可以這樣做:選取孔、切換到中點、輸入 40 和 190。此時高度是從牆面往外算。 + +捲尺和角尺在你進入草圖、再回到 3D 檢視的過程中都會留在原處。它們不會隨設計儲存,也不會進入歷史記錄,重新載入頁面後就會消失。 + +## 到原點的距離與移動時的距離 + +在設定的 {{ui:workspace.appearance}} 底下,有兩個用於即時尺寸的開關: + +- {{ui:workspace.showMoveDimensions}} 顯示拖曳時移動了多少。 +- {{ui:workspace.showOriginDimensions}} 顯示選取物件到平台原點的距離,選取多個實體時同樣有效。 + +啟用 {{ui:workspace.dimensionsAlwaysVisible}} 後,尺寸會一直可見。 + +## 備註 + +備註記錄的是幾何本身說不出來的事:『這顆螺絲緊了 0.3 mm』、『蓋子還沒印』、『尺寸是 Peter 給的』。用 {{ui:editor.tool.note}} 或 [[N]] 鍵放一條備註。 + +- 如果把備註放在**實體上**,它會跟著實體移動。 +- 如果放在**旁邊**,它會留在工作平面上({{ui:note.free}})。 +- {{ui:note.detach}} 會把附著的備註從實體上解下。 +- {{ui:editor.tool.group}} 會把附著的備註收進群組;{{ui:editor.tool.ungroup}} 會把它交給下方可見的零件,包含其中的群組。用 {{ui:group.edit}} 開啟群組時,備註會跟著它們下方的零件移動,再用 {{ui:group.done}} 回到群組裡;取消的話則回復原樣。 +- 如果它依附的實體被刪除,或下方已經沒有可見的實體,備註會留在原處,也就是工作平面上。 +- 拖曳圖釘可移動備註。點擊圖釘會把卡片收起,只留下小數字;再點一次就會重新展開。點進文字即可編輯。 +- 輸入時,[[Enter]] 會儲存文字,[[Esc]] 會還原成你開始編輯前的內容;[[Shift]]+[[Enter]] 會換行。 + +備註會儲存在設計中,不會出現在任何匯出裡,可用 {{ui:visibility.notes}} 顯示或隱藏(位於 {{ui:editor.visibilityOptions}},即眼睛圖示旁的箭頭)。 + +## 參考點 + +參考點是空間中的一個單純標記,就像工作坊裡的鉛筆記號或放樣點:它不屬於任何實體,永遠不會被列印,其他東西會吸附到它上面。在實體上按右鍵,選擇 {{ui:contextMenu.markCenter}}、{{ui:contextMenu.markCorners}} 或 {{ui:contextMenu.markMidpoints}}:點會出現在實體的頂面(如果選取了多個,則出現在整個選取範圍的頂面)。 + +- 拖曳點可移動它,或點擊它查看座標並輸入新座標;座標會使用你設定的單位。如果卡片擋住了東西,可以抓住標題把它單獨拖開:其他卡片留在原處,雙擊標題即可歸位。你最後動過的卡片會排在其他卡片前面。卡片中的 **Delete all**,或右鍵選單(在實體上,或在 3D 檢視空白處)中的 **Delete all reference points**,會一次刪除所有點。{{ui:common.delete}} 會將它移除。 +- 捲尺也能標記點:{{ui:camera.tapeMarkMiddle}},即量測下方的十字準星按鈕,會在量測中間放一個點,例如圓孔的中心。它也能從一個點開始量測:捲尺吸附參考點就像吸附角一樣。 +- 拖曳形狀時,它的邊與中心會吸附到點,就像吸附到其他形狀一樣({{ui:workspace.objectSnap}})。角尺也會吸附到點。 +- 點會儲存在設計中,不會出現在任何匯出裡,並與備註一起由 {{ui:visibility.notes}} 顯示或隱藏。 +- AI 可以用 `layerling_add_reference_points`、`layerling_list_reference_points` 和 `layerling_remove_reference_points` 標記、列出與移除它們。 diff --git a/docs/guide/zh-tw/11-printing.md b/docs/guide/zh-tw/11-printing.md new file mode 100644 index 00000000..de34de40 --- /dev/null +++ b/docs/guide/zh-tw/11-printing.md @@ -0,0 +1,57 @@ +--- +title: 為 3D 列印做準備 +summary: 選擇自己的印表機、在零件放不下時收到警告,以及正確擺放零件。 +--- + +## 選擇印表機 + +開啟設定(功能區裡的齒輪圖示,{{ui:editor.workspaceSettings}}),切換到 {{ui:workspace.workplane}} 區段。在 {{ui:workspace.printer}} 下,可以從超過 220 種常見機型的清單中選擇自己的印表機,包括 Bambu Lab、Prusa、Creality、Anycubic、Elegoo 等眾多品牌。 + +![已選擇印表機的工作平面設定。列印床與最大列印高度來自切片軟體的設定檔。](shot:settings-workplane) + +會發生三件事: + +- 工作平面會採用列印床的尺寸。 +- 工作平面的角落會顯示印表機名稱與其建構體積。如果這些文字擋住視線,可以用 {{ui:workspace.showPlateLabels}} 關閉(在 {{ui:workspace.workplane}} 下);左前方的設計名稱也一樣。 +- 零件放不下時,layerling 會**警告**。 + +印表機設定來自 OrcaSlicer,因此和你的切片軟體所認得的完全相同。如果不想使用印表機,選擇 {{ui:workspace.printerNone}}。也可以手動設定工作平面的尺寸。 + +## 零件放不下時 + +伸出列印平台邊緣的實體會被標示。訊息會指出是哪幾側超出、超出多少。零件**太高**時也一樣:高度從最低的實體算起,就跟切片軟體把模型放下的方式一樣。 + +![這個長方體比 Bambu Lab A1 mini 的列印床還寬。底部的訊息說明了超出多少。](shot:printer-overhang) + +警告不會阻止你繼續操作。它只是提示,免得你到了切片軟體裡才發現零件太大。太大的零件通常可以分割:用 {{ui:editor.tool.split}} 切成兩半,分別列印。 + +如果刻意把零件停放在平台旁邊,點擊訊息中的小叉。警告就會對這些實體消失。一旦其中一個重新放得下、之後又被你移出去,或者有別的實體伸出,訊息就會再次出現。隱藏的實體永遠不列入計算,所以把停放的零件隱藏起來也同樣有效。 + +## 正確擺放零件 + +零件在平台上的擺放方式,決定它的強度與外觀。{{ui:editor.group.arrange}} 區段中的兩個工具可以幫上忙: + +- {{ui:editor.tool.layFlat}}:點擊一個面,零件就會以該面朝下平放。一鍵找到最佳列印方向。 +- {{ui:editor.tool.dropToWorkplane}}([[D]]):零件懸在空中時,把它放回工作平面。 + +關於方向,有幾條經驗法則: + +- 大平面朝下。這樣黏得最牢。 +- 細長且受力的零件,擺放時不要讓層紋與受力方向垂直。層與層之間是最弱的方向。 +- 避免超過 45° 的懸垂,或在切片軟體中為它加上支撐。 + +## 尋找懸垂 + +在眼睛圖示旁的下拉選單({{ui:editor.group.visibility}})中,**顯示懸垂**會開啟懸垂標示。所有向下傾斜超過 45° 的面都會以紅白斜線標示——那裡就是印表機會需要支撐的地方。貼在平台上的面不會被標示。如此一來,在設計時就能看出球體、拱形或水平孔能否不加支撐列印;[淚滴孔](chapter:threads-and-mechanics)正是為此而設。轉動零件,或用 {{ui:editor.tool.layFlat}} 讓它以另一個面朝下,斜線會立刻跟著更新。 + +印表機應付得了多陡的斜面,可在設定的 {{ui:workspace.appearance}} 下調整:從 30°(保守)到 70°(適合散熱良好的印表機)。搭在另一個實體上的面仍會被標示——layerling 只看面本身。 + +## 壁厚、間隙與倒角 + +- 壁厚至少要有兩條擠出線的寬度,也就是使用 0.4 mm 噴嘴時要有 0.8 mm。結構結實的零件需要 1.2 到 2 mm。 +- 兩個零件互相配合的地方需要間隙:通常為 0.2 到 0.4 mm,視印表機而定。列印大件之前,先做一組小測試件。 +- 很多人會把貼在平台上的底邊稍微倒角。這樣可以避免第一層向外擴散(「象腳」)。 + +## 準備就緒時 + +點擊 {{ui:editor.export}},然後選擇 **STL** 或 **3MF**。STL 是最簡單的格式。3MF 會保留各個實體的名稱與顏色,因此多色列印時很方便。匯出視窗也會顯示零件以實心列印時需要多少克、多少公尺線材。更多內容見[檔案與儲存](chapter:files-and-saving)。 diff --git a/docs/guide/zh-tw/12-files-and-saving.md b/docs/guide/zh-tw/12-files-and-saving.md new file mode 100644 index 00000000..5b82f069 --- /dev/null +++ b/docs/guide/zh-tw/12-files-and-saving.md @@ -0,0 +1,106 @@ +--- +title: 檔案、儲存與分享 +summary: 設計存放在哪裡、如何備份、layerling 能匯入與匯出哪些格式,以及在自己的共用伺服器上可以做什麼。 +--- + +## 設計存放在哪裡 + +layerling 把所有東西都儲存在你電腦的瀏覽器裡。不需要帳號,也不會上傳任何內容。每一次變更都會自動儲存。起始頁上的預覽圖片,顯示的是你按 {{ui:editor.homeDashboard}} 返回起始頁之前,最後呈現在眼前的畫面。即使過了幾天,只要在同一個瀏覽器裡開啟 layerling,一切都還在。 + +如果你從一個空無一物的設計返回起始頁,layerling 會詢問是否要保留它。{{ui:confirm.yes}} 或 [[Enter]] 會保留,{{ui:confirm.no}} 則會移除,這樣空設計才不會越堆越多。如果設計位於伺服器上的共用資料夾,{{ui:confirm.no}} 會把檔案從伺服器刪除,所有使用該資料夾的人都會失去它。 + +這有個缺點:清除瀏覽器儲存空間或換用另一台電腦的人,設計就會消失。**所以要把重要的工作備份成檔案。** + +## 設計的資料夾 + +設計累積到幾十個時,單一清單就不夠用了。在起始頁上,{{ui:shared.newFolder}} 會為這個瀏覽器的設計建立資料夾;點擊資料夾即可開啟。資料夾裡可以再放資料夾。 + +- **移入資料夾:** 把設計拖曳到資料夾上,或在設計的選單中選擇 {{ui:shared.moveTo}},選單會列出所有資料夾。在資料夾開啟的狀態下建立的設計,以及開啟或匯入的檔案,都會放進該資料夾。 +- **移出資料夾:** 資料夾裡的第一個圖磚 `..`,以及 {{ui:dashboard.projects}} 底下那一行,都能帶你回到上一層;也可以把設計拖放到上面。把資料夾拖曳到另一個資料夾上,就會放進該資料夾裡。 +- **重新命名與刪除** 都在資料夾的選單裡。刪除資料夾不會刪除任何設計:原本在裡面的設計會往上移一層。 +- **搜尋** 會搜尋所有資料夾;找到的設計會顯示所在的資料夾,點擊它即可開啟該資料夾。 + +{{ui:dashboard.backupAll}} 會保留資料夾:設計會連同資料夾一起放進備份檔案,還原備份時也會放回原本的資料夾。這個瀏覽器的資料夾與伺服器上的資料夾是分開的。卡片圖片也會寫進檔案裡,所以還原後馬上就會出現。 + +## 備份與轉交 + +在起始頁上,每個設計都有一個選單,可以重新命名、複製與刪除。用 {{ui:dashboard.backupAll}} 可以把所有設計打包成單一檔案。旁邊的 {{ui:dashboard.restoreBackup}} 位於關於「設計儲存在瀏覽器」的提示中(全新的電腦上、還沒有任何設計時也會出現),可以把這些設計還原回來,換一個瀏覽器或換一台電腦都行;{{ui:dashboard.importGeometry}} 也能開啟同一個檔案。這個瀏覽器的 {{ui:myShapes.title}} 會跟著同一個檔案一起走,放在 `Custom shapes` 資料夾裡,參見[形狀](chapter:shapes)。如果把備份還原到已經有其中部分設計的瀏覽器,那些設計不會重複加入;提示會說明有多少個本來就已經存在。 + +在編輯器中備份單一設計:{{ui:editor.export}},選擇 **LYL** 格式,然後點擊 {{ui:export.saveProject}}。LYL 檔案是 layerling 自己的設計格式,包含所有內容:形狀、群組、草圖、CAD 資料、匯入的原始檔,以及歷史記錄,也就是復原步驟。在 {{ui:export.historyTitle}} 底下可以選擇要帶上最近多少個步驟;初始值沿用設定(功能區裡的齒輪)在 {{ui:workspace.history}} 保留的步數。最後一檔 {{ui:export.historyNone}} 只儲存設計目前的狀態——這是分享不帶復原步驟的檔案的方法。匯出的是副本,檔名由你在 {{ui:export.fileName}} 中指定;瀏覽器裡的設計仍保有自己的歷史記錄。舊版本留下的 `.skf` 檔案仍可開啟,開啟後會存成 `.lyl`。 + +**儲存到自己的資料夾(Chrome 與 Edge)。** 在這些瀏覽器中,按鈕會開啟系統的儲存對話方塊,你可以自己挑選資料夾與檔名,也可以取代既有的檔案。之後按 [[Ctrl]]+[[S]] 就會把設計再次儲存到同一個檔案,不會再跳出對話方塊。用 {{ui:dashboard.importGeometry}} 或匯出視窗的開啟按鈕從 `.lyl` 檔案開啟的設計,也會存回該檔案。瀏覽器可能會詢問一次修改檔案的權限。頁面重新載入後,設計就會忘記自己對應的檔案,下一次 [[Ctrl]]+[[S]] 時會再詢問一次;對話方塊會從你上次使用的資料夾開始。Firefox 與 Safari 不允許網頁這樣寫入檔案。在這些瀏覽器裡,檔案會像以前一樣下載到「下載」資料夾,[[Ctrl]]+[[S]] 會再次下載;Firefox 可以在「設定 > 一般 > 下載」中設定每次詢問資料夾。 + +## 匯出 + +點擊 {{ui:editor.export}},或按 [[Ctrl]]+[[E]]。 + +![匯出視窗,包含 STL、3MF、OBJ、STEP、SVG、PNG、LYL 與 2D 格式。](shot:export-panel) + +最上方是檔名,下方選擇格式。有選取項目時只匯出選取的內容,否則匯出整個設計。如果選取範圍漏掉了可見的部件,視窗裡會明確提示,{{ui:export.selectAll}} 可以一鍵選取所有可見內容。檔案寫好後,視窗會自動關閉;如果匯出失敗,視窗會保持開啟並顯示訊息。 + +| 格式 | 用途 | 注意事項 | +| --- | --- | --- | +| **STL** | 切片軟體與 3D 列印 | 三角網格。最簡單、最普遍的格式。STL 沒有部件之分:重疊的實體會合併成一個網格。若要保留成獨立部件,請匯出 3MF。在 Chrome 與 Edge 中,第一次匯出 STL 會詢問儲存位置,之後這個設計的 STL 匯出都會寫入該檔案,直到你在檔名欄位輸入別的名字,或按 {{ui:export.stlSaveAs}}。 | +| **3MF** | 帶顏色的切片軟體 | 每個實體都會保持為獨立部件,並帶有名稱與顏色。重疊的實體只有在顏色相同時才會合併;當某個形狀位於另一種顏色的實體內部時(例如板子上的標誌),先建立的實體會讓出空間給後建立的。適合 PrusaSlicer、Bambu Studio、OrcaSlicer 與 Cura。Bambu Studio 與 OrcaSlicer 開啟時會詢問如何把顏色對應到你的線材,並稱這個檔案「不是來自 Bambu」——這則訊息沒有影響。 | +| **OBJ** | 建模與交換 | 廣泛支援的網格格式。顏色以頂點色儲存在同一個檔案裡,不需要額外的 `.mtl`。Bambu Studio 與 OrcaSlicer 能讀取這些顏色,並像 3MF 一樣詢問如何對應到線材;其他程式只會看到形狀。與 3MF 相同,重疊的實體只有在顏色相同時才會合併。 | +| **STEP** | 完整的 CAD 程式 | 把方塊、圓柱、球體與圓錐保留為精確幾何,因此也包含由輪廓建立的形狀(星形、心形、橢圓、管、半球、圓弧屋頂、圓角方塊、燕尾、孔等)、彎管、螺紋、彈簧與齒輪,以及圓角與倒角。每個工作階段第一次匯出 STEP 時,會載入一次 CAD 核心(約 22 MB)。 | +| **SVG** | 雷射切割機與繪圖儀 | 以公釐為單位的乾淨俯視圖,包含孔與曲線輪廓。在 {{ui:export.svg.view}} 底下,{{ui:export.svg.viewFootprint}} 只會輸出物件立在工作平面上的輪廓。 | +| **PNG** | 論壇貼文、列印網站、提問 | 目前視圖的圖片,解析度為兩倍,而且不含控點、選取框與尺寸標註。{{ui:export.png.plate}} 與 {{ui:export.png.transparent}} 在視窗中設定。先旋轉與縮放到畫面正確為止;這裡的選取範圍不影響結果。 | +| **LYL** | layerling 本身 | 可編輯的設計,包含所有屬於它的內容。 | +| **2D** | 工坊、車床與銑床、說明文件 | 1:1 的圖面,可輸出為 PDF 或 SVG:ISO 圖紙上的前視圖、俯視圖與右視圖。詳見下文。 | + +**把 STL 存到自己的資料夾(Chrome 與 Edge)。** 在這些瀏覽器中,某個設計第一次匯出 STL 時會開啟系統的儲存對話方塊,你可以自行選擇資料夾與檔名,也可以取代既有檔案。之後這個設計每次匯出 STL 都會寫入同一個檔案,不再跳出對話方塊;匯出視窗會顯示是哪個檔案,匯出按鈕旁邊的 **另存新檔…** 可以另選檔案。對話方塊會記住自己的資料夾,與設計用的資料夾分開,這樣切片軟體的檔案就能和切片軟體放在一起。頁面重新載入後,設計會忘記自己的 STL 檔案,下次匯出時會再詢問一次。Firefox 與 Safari 仍會像以前一樣下載檔案。 + +沒有群組的孔,在你匯出時會從它接觸到的每個實體上挖除,與視圖顯示的一致。所以不必在每次匯出前先群組。有選取項目時,只有選取的孔會計入。孔不能單獨匯出;layerling 會指出這一點。 + +STEP 只包含精確的 CAD 實體。無法精確寫出的內容,例如以 STL 匯入的網格,會被略過。匯出後的訊息會列出這些實體並說明原因。要給印表機使用時,請選擇 STL 或 3MF,它們能包含所有內容。 + +### 工坊用圖面 + +選擇 **2D** 格式(將滑鼠游標移到上面會顯示「圖面」),並在檔名下方選擇 PDF 或 SVG。有選取項目時只繪製選取的內容,否則繪製整個可見設計;沒有群組的孔仍會切掉它們接觸到的部件。 + +layerling 會以第一角投影繪製前視圖、俯視圖與右視圖(右視圖在前視圖左側,俯視圖在前視圖下方),使用容得下的最小 ISO 圖紙,從 A4 到 A0,零件需要時也可用更大的圖紙。比例一律為 1:1。每個視圖都會標上總寬與總高,看不見的邊以虛線表示。與視圖方向平行的圓孔會加上中心十字與標記(F1、T1、R1),底部的表格會列出它們的直徑與位置,位置從視圖左下角量起。右下角的標題欄包含名稱、比例、單位、日期與圖號。圖紙上的文字會跟隨介面語言。 + +以 100 % 或「實際大小」列印,否則長度會對不上。圖面做不到的事:螺紋、深度、公差與斜向孔都不標註尺寸,而且尺寸來自模型網格,因此是標稱值。零件若過於複雜(超過 100,000 個三角形)或孔超過 200 個,會被拒絕並顯示訊息;這時請少選一些物件。 + +這項投影功能基於 WC3D 的 Cadverix-3D 繪圖成果。 + +### 需要多少線材? + +對 STL、3MF、OBJ 與 STEP,{{ui:export.estimateTitle}} 方塊會顯示所匯出內容的體積、重量與 1.75 mm 線材長度。它的計算方式與檔案一致:只算可見實體、扣掉孔、重疊只算一次。右側選擇線材——PLA、PETG、ABS、ASA、TPU 或 PA(尼龍)——重量會依其密度而定。體積是實體本身的體積。重量與線材用量是針對帶壁與填充的列印所做的粗略估計:在標題底下設定 {{ui:export.estimateInfillLabel}}(初始 15 %)與 {{ui:export.estimateWallsLabel}}(2),方塊會說明它計算了什麼,以及同一個零件實心時會有多重。實際數字由切片軟體自己的設定決定,所以把它當作參考:適合用來比較設計,也適合判斷線軸夠不夠用。填充 100 % 時,方塊會把零件當成實心計算,這是上限。 + +## 匯入 + +用 {{ui:editor.import}} 或 [[Ctrl]]+[[I]] 把外部檔案帶進設計。 + +![匯入視窗:開啟或插入設計,拖放幾何資料。](shot:import-panel) + +- **{{ui:import.openProject}}:** layerling 設計(`.lyl`,或較舊的 `.skf`)會以新設計的形式回來。 +- **{{ui:import.insertProject}}:** layerling 設計的實體會加入目前開啟的設計。很適合需要反覆使用的基本形狀:建立一次、儲存,之後每次帶進來。 +- **新增幾何資料:** 把 STL、OBJ、3MF、STEP、SVG、PNG 或 JPG 檔案拖進視窗,或點擊選擇檔案。匯入的網格可以旋轉、移動、用孔切割,也可以在上面繼續建模。SVG 會以草圖實體匯入,來自 picsvg.com 或 Inkscape「描摹點陣圖」這類描摹工具的也一樣:它的輪廓會變成草圖的直線與曲線,高 4 mm,從上方看與圖面方向一致。在屬性面板中設定它的 {{ui:prop.sketchFill}}(區域,或向外、向內、居中的描邊),{{ui:prop.sketchSilhouette}} 則會略過孔,參見[草圖](chapter:sketches)的「填充與剪影」。點本身要在草圖模式中修改。如果要依自己的尺寸匯入,先在匯入視窗的 **SVG 與圖片:寬度(mm)** 中輸入寬度,與 Tinkercad 一樣:圖面會縮放到這個寬度,高度與深度也跟著縮放,而且這個欄位在匯入一次後就會清空;留空時,SVG 會以自身尺寸匯入,圖片則寬 50 mm。只有超過 2500 條直線與曲線、非常複雜的 SVG 才會以固定網格匯入。PNG 或 JPG 圖片會被描摹成輪廓,並以同樣方式匯入成寬 50 mm 的草圖實體,之後可以再調整大小:圖片中不是背景的部分會保留,而背景是佔據圖片邊緣較多面積的部分。只含一張圖片的 SVG 也會以同樣方式描摹。無法構成實體的形狀,例如自我交錯或在一點自我接觸的輪廓,會被略過,匯入後 layerling 會說明有多少個。這時可以在繪圖程式中把重疊的部分接合、閉合輪廓,然後重新儲存檔案。在同一頁上繪製的圖面(例如把同一份文件的多個圖層分別匯出成檔案)會重新對齊,只要在匯入前開啟匯入視窗中的 {{ui:import.keepSvgPage}}:每個圖面都會保留自己在頁面上的位置,否則每個都會以自身為中心。有顏色的 OBJ 或 3MF 會依顏色匯入成一個個實體,各自留在原位。在 OBJ 中,顏色可能存放在檔案本身(例如 layerling 匯出的 OBJ),或放在旁邊的 `.mtl` 裡。兩者都要選取,或者直接匯入整個 ZIP,就像 Tinkercad 提供 OBJ 的方式。3MF 本身就帶著顏色,而在 Bambu Studio、OrcaSlicer 或 PrusaSlicer 的專案中,每個部件會採用其線材的顏色。含有多個物件的 3MF(例如每個列印平台一個物件的專案)會匯入成每個物件一個實體;切片軟體裡的修飾體、負體積與支撐阻擋器會被略過。在切片軟體中塗在面上的顏色不會被讀取。 + +用**較新版本的 layerling**儲存的設計,可能含有你的版本還不認識的東西,例如新形狀、新設定或自訂字型。如果 layerling 因此無法開啟,訊息會寫出兩邊的版本。如果能開啟,提示會說明較新的內容在這裡可能看起來不一樣。無論哪種情況,重新整理頁面都有幫助:layerling.com 總是提供最新版本。安裝版應用程式會在下次啟動時取得更新;在自己的伺服器上,則要自己安裝更新。 + +模板圖片是在草圖模式中新增的,參見[草圖](chapter:sketches)。 + +## 簡化匯入的網格 + +掃描或雕刻出來的網格,三角形數量往往遠超過其形狀所需,而你在移動、切割與儲存時,每一個三角形都會被帶著走。「修改」群組中的 {{ui:simplify.title}}(或在實體的右鍵選單裡)會把目前的網格,與選定保留比例所留下的結果並排顯示;兩個視圖都會跟著工作平面的滑鼠按鍵一起旋轉與縮放。用百分比或三角形數量設定要保留多少,{{ui:simplify.apply}} 就會採用較輕的網格。結果是一般網格:若針對切割或合併的結果使用,{{ui:group.edit}} 與它的原始部件都會被捨棄。 + +切割、合併與交集匯入的網格是在你的瀏覽器中計算的,所以工作區設定會限制這類網格可以有多少個三角形({{ui:workspace.booleanTriangleLimit}})。超過上限的網格不會被處理,訊息會寫出它的三角形數量;請先簡化網格,或者如果電腦撐得住,再提高上限。 + +## 回報問題 + +如果 layerling 做出意料之外的事,可以儲存一份 {{ui:editor.bugReport}}:連結位於底部的頁尾,就在論壇旁邊。它是一個 ZIP 檔案,因為 GitHub 與許多論壇不接受單獨的 .lyl:裡面有你的設計(.lyl),以及一個簡短的文字檔,記錄版本、瀏覽器、螢幕尺寸、最後的訊息與任何錯誤。起始頁可以像備份一樣開啟這個 ZIP,或者你也可以解壓縮後開啟裡面的 .lyl。裡面沒有任何個人資料。把檔案附在論壇或 GitHub 的貼文中,這樣就能用完全相同的設計來追查問題。 + +如果 layerling 因錯誤而停止,會顯示一個帶有錯誤訊息的視窗,而不是空白頁面。你可以從中把瀏覽器最後儲存的設計狀態存成 .lyl 檔案、回到起始頁,或建立新設計。視窗中的錯誤訊息與儲存下來的檔案,在你回報問題時很有幫助。 + +## 伺服器上的共用設計 + +當 layerling 執行在你自己的電腦或網頁伺服器上時,它可以提供一個共用資料夾,讓所有使用者都在裡面儲存設計。在起始頁上,它會顯示為 {{ui:dashboard.sharedProjects}}。你可以在那裡建立資料夾、拖曳設計來移動,並搜尋整個資料夾。存放在那裡的設計會自動存回該處。這個瀏覽器裡的設計,可以把卡片拖曳到伺服器圖磚上,或使用卡片選單中的 {{ui:dashboard.sendToServer}},放到伺服器上。你開啟的備份會先落在這個瀏覽器裡,就像你開啟的任何設計一樣;再從那裡把設計放到伺服器上。起始頁以檔名顯示設計,所以不論在卡片上或編輯器頂端重新命名設計,都會一併重新命名伺服器上的檔案。刪除設計或資料夾會永久移除它,連同這個瀏覽器裡的工作副本。儲存在伺服器上的自訂形狀位於其 `Custom shapes` 資料夾中,參見[形狀](chapter:shapes)。 + +有兩件事可以讓這件事更快:起始頁上的 {{ui:dashboard.sendAllToServer}} 可以一次把這個瀏覽器的所有設計放到伺服器上;勾選 {{ui:dashboard.newOnServer}} 則會讓每個新設計都從伺服器資料夾開始,因此從第一次變更起就儲存在那裡。這個勾選狀態會儲存在此瀏覽器中。無法放上去的設計(例如名稱在伺服器上已被佔用)會留在瀏覽器裡,訊息會說明有多少個。 + +這不是同時編輯:每個開啟檔案的人都在自己的副本上工作。如果別人在這段期間改過該檔案,layerling 會拒絕覆蓋它。 + +在 layerling.com 上,這項功能並未開啟。如何在自己的伺服器上設定,請見 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.md)。 diff --git a/docs/guide/zh-tw/13-shortcuts.md b/docs/guide/zh-tw/13-shortcuts.md new file mode 100644 index 00000000..4614a38b --- /dev/null +++ b/docs/guide/zh-tw/13-shortcuts.md @@ -0,0 +1,38 @@ +--- +title: 鍵盤快速鍵 +summary: 所有按鍵一覽,直接取自程式,因此清單始終正確。 +--- + +只要工作平面取得焦點,快速鍵就會生效。在欄位中輸入文字時,它們不會介入。在 Mac 上,此處列出 [[Ctrl]] 的地方一律改按 [[Cmd]]。 + +在編輯器中,{{ui:editor.group.help}} 區域裡的 {{ui:editor.keyboardShortcuts}} 會以視窗開啟同一份清單。視窗中的印表機按鈕({{ui:shortcuts.print}})會單獨列印這份清單,白底黑字,整份清單分三欄排在一張 A4 或 Letter 紙的一面,方便放在手邊速查;瀏覽器的列印對話方塊也可以將它儲存為 PDF。 + +![編輯器中的鍵盤快速鍵視窗。](shot:shortcuts) + +## 命令搜尋 + +找不到某個工具?按 [[Ctrl]]+[[K]],或點擊 {{ui:editor.group.help}} 區域中的放大鏡,然後輸入要找的內容:工具(「圓角」「鏡像」)、形狀(「圓柱」)或命令(「匯出」「復原」)。用方向鍵移動,按 [[Enter]],或點擊該項目。 + +- 搜尋同時看得懂英文和德文,並且忽略大小寫與變音符號:「aushoehlen」也能找到 {{ui:editor.tool.hollow}}。 +- 每個項目都會顯示等效的按鍵,以及它所屬的功能區區域,讓你記住它的位置。 +- 反灰的項目目前無法執行,通常是因為沒有選取任何東西。它們仍留在清單中,讓搜尋依然能告訴你工具在哪裡。 + +你正在閱讀的這份指南也有搜尋框,位於每一頁的頂端:輸入一兩個詞,它就會列出同時包含這些詞的章節,並標出相符的詞。點擊其中一項,或按 [[Enter]] 前往第一項,就能直接跳到該處。 +- 形狀的名稱會將該形狀加到工作平面,就像在形狀選單中點擊它一樣。 +- 搜尋框為空時,搜尋會把你最近用過的命令列在最上方。 +- 設計中的實體名稱可以找到並選取該實體,在設計包含許多零件時很有幫助。實體只在你開始輸入後才會出現。 +- 它在草圖模式下也適用,可搜尋草圖工具。 + +## 互動式說明 + +找不到某個按鈕或欄位的說明在哪裡?讓程式帶你過去。點擊 {{ui:editor.group.help}} 區域中的問號,或按 [[Shift]]+[[F1]]。指標會變成問號,它下方的任何東西都會標上外框。 + +- 點擊按鈕、欄位、開關、控點、功能區的群組或視窗的標題列。它**不會**執行原本的功能,而是開啟一個小視窗,裡面有該元素的名稱、本指南相關部分的簡短摘要、最多另外兩處提到它的位置,以及 {{ui:interactiveHelp.open}}。 +- 說明針對的是你指向的元素,而不是它周圍的整個視窗。沒有自己名稱的元素會沿用最接近的有名元素;在視窗內部,則退回該視窗的問號。 +- {{ui:interactiveHelp.open}} 會在新分頁中開啟指南的該章節。該章節會以彩色標出外框,從標題一直到末尾,讓你看出它的起訖位置。 +- 如果指南沒有提到該元素,視窗會如實說明,並提供 {{ui:interactiveHelp.search}}。 +- 按 [[Esc]] 或再點一次問號即可離開這個模式。觸控螢幕沒有游標懸停:輕點元素就會直接開啟視窗。 + +這個視窗和其他視窗一樣,可以拖曳標題列移動。程式會依元素名稱——按鈕上的標籤、欄位的名稱——找到對應章節,因為本指南的每個按鈕都照程式裡的叫法書寫。它會用你目前使用的語言,在指南每頁頂端搜尋框所用的同一套搜尋中查找,而且完全在你的瀏覽器中執行。 + +{{shortcuts}} diff --git a/docs/guide/zh-tw/14-ai-with-mcp.md b/docs/guide/zh-tw/14-ai-with-mcp.md new file mode 100644 index 00000000..72b615a7 --- /dev/null +++ b/docs/guide/zh-tw/14-ai-with-mcp.md @@ -0,0 +1,118 @@ +--- +title: 用 AI 建模(MCP) +summary: Gemini、Claude 或 Codex 等 AI 助手如何在已開啟的編輯器中建立與修改形狀、把形狀群組起來,並為檢視畫面拍照。 +--- + +layerling 內建 MCP 伺服器。MCP 是一種標準,讓 AI 助手能使用其他程式中的工具。透過它,Gemini、Claude 或 Codex 等 AI 用戶端能看到已開啟的編輯器分頁並在其中工作:建立形狀、修改尺寸、群組、切割、為邊做圓角、讀取場景,以及為檢視畫面拍照。你描述零件,AI 負責建立,你在旁邊觀看,隨時都能接手。 + +AI 用戶端與編輯器之間的橋接**在你自己的電腦上本機執行**。但請留意:AI 讀取的內容,也就是場景與檢視畫面圖片,會像其他任何輸入一樣,傳送到你的 AI 用戶端供應商。 + +> **重要:** MCP 橋接只存在於你在自己電腦上啟動的開發伺服器。在 layerling.com 以及採用靜態主機代管的安裝中,它是關閉的。自行架設的副本(例如 NAS 上的 Docker 映像檔)可以用存取權杖開啟;參見下文「NAS 或伺服器上的副本」。 + +## 設定 + +1. 從 [GitHub](https://github.com/henmedia/layerling) 取得 layerling,並在專案資料夾中以 `npm run dev` 啟動。必須安裝 Node.js。在 Windows 上,README 中的快速開始指令會幫你處理。 +2. 開啟一個編輯器分頁,例如 `http://127.0.0.1:3000/?editor=1`。也可以交給 AI:沒有編輯器開啟時,第一個需要編輯器的工具會啟動瀏覽器並開啟編輯器,然後等待它連線。這對你自己電腦上的 layerling 有效;NAS 或伺服器上的副本則需要你自行開啟編輯器。若要關閉這個行為,請為 MCP 伺服器設定 `LAYERLING_MCP_OPEN_EDITOR=0`。 +3. 把你的 AI 用戶端連線到 MCP 伺服器。用戶端會自行以 `node scripts/layerling-mcp-server.mjs` 啟動它。 + +### Claude Code + +無需安裝:專案自帶 `.mcp.json` 來註冊伺服器,以及 `.claude/skills/layerling-mcp-skill` 下的技能。在 Claude Code 中開啟 layerling 資料夾,然後這樣提問,例如:「用 layerling MCP 工具列出我開啟的編輯器,並檢查場景。」 + +### Claude Desktop + +Claude Desktop 不會讀取專案檔案。要在它自己的設定中加入伺服器。可拿專案中的 `docs/mcp/claude-desktop-config.example.json` 當範本,把指令碼路徑換成你電腦上的絕對路徑,然後重新啟動 Claude Desktop。 + +### Codex + +把 `docs/skills/layerling-mcp-skill` 的技能複製到 Codex 的技能資料夾,參考 `docs/mcp/codex-config.example.toml` 把伺服器寫進 Codex 設定,然後重新啟動 Codex。 + +### Gemini & Antigravity + +Antigravity 會自動找到 `.agents/skills/layerling-mcp-skill` 中的工作區技能。使用 Gemini CLI 時,把 `docs/skills/layerling-mcp-skill` 的技能複製到全域技能資料夾(`~/.gemini/skills/`),參考 `docs/mcp/gemini-config.example.json` 把伺服器加入設定,然後重新啟動用戶端。 + +各用戶端的詳細說明見 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.md#layerling-mcp-skill)。 + +## NAS 或伺服器上的副本 + +自行架設的副本可以讓 AI 用戶端透過網路驅動它已開啟的編輯器。這項功能預設關閉,因為能驅動橋接的人就能讀取並修改已開啟的設計。在伺服器上,把 `LAYERLING_MCP_REMOTE` 設為 `true`,並把 `LAYERLING_MCP_TOKEN` 設為至少 16 個字元的密鑰(Docker 映像檔寫在 compose 檔案的 `environment:` 下;不需重新建置)。開啟該副本的一個編輯器分頁並保持開啟,然後把位址與同一個權杖交給 MCP 用戶端:`LAYERLING_URL=http://nas:3000` 和 `LAYERLING_MCP_TOKEN=`。 + +只有持有權杖的用戶端才能列出或驅動編輯器。編輯器頁面本身不需要權杖,但只有在僅限自家網路使用的位址或名稱下才會被認可(IP 位址、不含點的名稱,或以 `.local` 或 `.lan` 結尾的名稱);若經過反向代理使用真實網域名稱,要寫進 `LAYERLING_MCP_ALLOWED_HOSTS`。請在可信任的網路上使用,跨出該網路時改用 HTTPS。詳情見 README。 + +## AI 能做什麼 + +AI 使用的是與你相同的功能,走的也是你在編輯器中操作時的同一條路徑。layerling 新增的功能會立刻有對應的 MCP 動作。工具如下: + +| 工具 | 作用 | +| --- | --- | +| `layerling_list_editors` | 列出已開啟的編輯器分頁 | +| `layerling_open_editor` | 在你的預設瀏覽器中開啟新的編輯器分頁,並等待它連線(僅限你自己的電腦) | +| `layerling_read_scene` | 讀取場景、選取範圍、單位,以及所有物件的精確尺寸 | +| `layerling_list_objects` | 列出所有物件及其尺寸、位置、旋轉與 id | +| `layerling_select_objects` | 選取物件 | +| `layerling_delete_objects` | 刪除物件 | +| `layerling_create_shape` | 建立形狀:方塊、圓柱、文字(也能彎曲)、螺紋、齒輪、草圖實體,以及其他所有形狀 | +| `layerling_import_file` | 像匯入視窗一樣匯入檔案:彩色 OBJ 或 3MF 會依顏色各成一個實體,含多個物件的 3MF 則依物件各成一個實體 | +| `layerling_add_font` | 為文字新增自訂字型,支援 TrueType、OpenType 或 WOFF 檔案;字型會留在瀏覽器中,設計只保留用到的字母 | +| `layerling_list_fonts` | 列出內建字型與自訂字型,含 id 與名稱 | +| `layerling_import_mesh` | 把三角網格帶入設計 | +| `layerling_update_object` | 修改尺寸、位置、顏色、名稱、實體或孔,以及構成該形狀的其他所有設定,包括文字的字母邊緣 | +| `layerling_align_objects` | 讓物件彼此對齊 | +| `layerling_scale_objects` | 依百分比縮放物件,可一起縮放,或各自在原位縮放 | +| `layerling_lay_flat` | 讓物件以某個面平放在平台上 | +| `layerling_place_on_face` | 把物件放到另一個物件的面上,斜面也可以,就像 C 鍵 | +| `layerling_perforate_face` | 在平面上切出孔陣列;孔仍會以孔的形式與實體群組在一起 | +| `layerling_sweep_sketch` | 沿著由點構成的路徑,把矩形或圓形斷面掃掠成一個精確實體;封閉路徑會形成圓環 | +| `layerling_push_face` | 把平面推出,或在其中挖出凹槽,可設定距邊緣的內縮與轉角半徑;新零件是與實體群組在一起的草圖實體 | +| `layerling_mate_faces` | 把一個物件的面貼到另一個物件的面,可面對面或齊平 | +| `layerling_open_group` | 開啟群組,以便逐一修改其中的部件,開啟中的群組內還能再開啟群組 | +| `layerling_close_group` | 再次關閉群組(「完成」)或取消 | +| `layerling_group_objects` | 群組物件 | +| `layerling_ungroup_objects` | 取消群組 | +| `layerling_boolean_cut` | 用孔切割實體 | +| `layerling_intersect_objects` | 只保留物件共同的部分(交集) | +| `layerling_separate_parts` | 把形狀分離成各自的鬆散部件;草圖實體則依輪廓拆成每個輪廓一個實體 | +| `layerling_split_objects` | 用平面把實體或孔切成兩半 | +| `layerling_list_edges` | 列出一個物件真實的 CAD 邊 | +| `layerling_apply_edge_treatment` | 對選定的邊倒角或圓角 | +| `layerling_hollow_object` | 以均勻壁厚抽殼實體 | +| `layerling_list_faces` | 列出精確實體的面 | +| `layerling_delete_faces` | 刪除面並補平缺口 | +| `layerling_array_objects` | 以直線排列或環繞圓周複製 | +| `layerling_bundle_objects` | 像 Ctrl+B 一樣綁定物件:它們一起移動、保留各自的顏色與類型,匯出時分開輸出 | +| `layerling_layer_text` | 把文字變成多色列印用的分層堆疊(字母、較寬的外框、無孔底板),或再次重建這樣的堆疊,可加入鑰匙圈孔、設定每層轉角,以及圓角或倒角的字母邊緣;給出名稱清單時,每個名稱做一個名牌 | +| `layerling_layer_icon` | 把 SVG 圖示(檔案中的文字,或擠出後的草圖實體)變成多色列印用的分層圖示牌——圖示、較寬的外框、無孔底板——或以新的寬度或層數重建;給出數量時,用副本鋪滿平台 | +| `layerling_create_qr_code` | 從文字或網址產生 QR Code,就像形狀庫中的 {{ui:shape.qrCode}}——可只留 QR Code 本身、在平台上凸起或雕刻,並設定糾錯等級、寬度、高度與靜區,也能指定做成孔;模組小於 0.8 mm 時會提出警告 | +| `layerling_measure_section` | 在兩點之間的剖切平面上量測,兩點會吸附到輪廓——壁厚、間隙、配合 | +| `layerling_show_overhangs` | 開啟或關閉懸垂剖面線、設定角度,並回報每個實體需要支撐的面積 | +| `layerling_estimate_print` | 估算選取範圍或整個設計的體積、重量與線材用量:以實心實體計算,也像匯出視窗那樣以壁厚與填充做粗略估計 | +| `layerling_add_reference_points` | 標記參考點——可落在物件的中心、角落或邊中點,也可指定精確位置——形狀會吸附到這些點 | +| `layerling_list_reference_points` | 列出參考點及其 id 與位置 | +| `layerling_remove_reference_points` | 依 id 刪除參考點,或全部刪除 | +| `layerling_inspect_errors` | 顯示最後一則訊息與最後一個錯誤,以及本次工作階段的訊息與錯誤 | +| `layerling_wrap_around_cylinder` | 把平放的實體(例如 SVG 或文字)包覆到圓柱上,可向外,或向內作為雕刻 | +| `layerling_simplify_mesh` | 減少匯入網格的三角面數量,可縮減到某個百分比,或指定三角面數 | +| `layerling_save_custom_shape` | 把實體儲存為自訂形狀,可儲存在伺服器或瀏覽器,之後插入其他設計 | +| `layerling_list_custom_shapes` | 列出伺服器與瀏覽器中的自訂形狀 | +| `layerling_insert_custom_shape` | 把自訂形狀插入開啟中的設計,可指定 x/z 位置 | +| `layerling_delete_custom_shape` | 移除自訂形狀;已插入的實體會保留 | +| `layerling_show_workplane` | 隱藏或顯示帶格線的平台,例如為了拍攝底面(只影響檢視) | +| `layerling_set_section_view` | 沿平面剖開檢視以查看內部(只影響檢視,不會真的切開任何東西) | +| `layerling_saved_view` | 把目前檢視儲存到按鍵 7、8、9 或 0,之後可回到該檢視,就像 Shift+按鍵與單按該鍵(只影響檢視) | +| `layerling_clear_history` | 永久刪除所有復原步驟,就像歷史記錄檢視的「刪除歷史記錄」按鈕;需要 `confirm: true` | +| `layerling_set_history_view` | 回看專案較早的狀態,就像歷史記錄檢視(實際設計不受影響;會修改設計的工具會等到它關閉) | +| `layerling_restore_from_history` | 把物件(也包括群組內的部件)從較早的狀態以副本帶回設計,就像歷史記錄檢視的「帶入設計」——復原時一步就能撤回 | +| `layerling_export_section_svg` | 以 1:1 的 SVG 回傳剖切平面上的輪廓,所用實體與匯出時相同 | +| `layerling_export_drawing` | 製作「2D」匯出的工程圖:在 ISO 圖紙上以 1:1 繪出三個視圖,標註整體尺寸並附圓孔表格,可輸出 SVG 文字或 PDF | +| `layerling_export_mesh` | 寫出匯出視窗的檔案,可為 STL、3MF、OBJ 或 SVG(俯視或底面輪廓),所用實體相同;可寫到這台電腦上的路徑,或以 base64 回傳 | +| `layerling_save_project` | 把整個可編輯設計儲存成 .lyl 檔,寫到執行 MCP 伺服器的那台電腦上的路徑,不會跳出對話方塊;既有檔案只有在指定 `overwrite` 時才會被取代,寫入時會先經過暫存檔,而編輯器中 Ctrl+S 的目標維持不變 | +| `layerling_set_workplane` | 把工作平面放到實體的某個面,或放回底板,並可隱藏或顯示 | +| `layerling_capture_image` | 擷取檢視畫面:前視、上視、側視、從角落斜看等 | + +這樣 AI 就能自我檢查:建立東西、拍張圖片、看一看再改進。 + +## 範例 + +你說:「幫我做一個直徑 60 mm、高 40 mm、壁厚 2.5 mm、頂部開口的圓盒,再加一個平的蓋子,上面用弧形排列寫出『Tea』。」AI 會建立圓柱、把其中一個抽殼、把彎曲的文字放到蓋子上,最後拍幾張圖片看看合不合。 + +> **提示:** 給 AI 具體的尺寸,並告訴它零件的用途(「12 mm 圓桿的固定座,適用 Bambu Lab A1」)。這樣它做的決定會更合理。也看著它建立:你隨時都能自己接手,因為用的是同一個編輯器。 diff --git a/docs/guide/zh-tw/15-offline-and-install.md b/docs/guide/zh-tw/15-offline-and-install.md new file mode 100644 index 00000000..997a0068 --- /dev/null +++ b/docs/guide/zh-tw/15-offline-and-install.md @@ -0,0 +1,50 @@ +--- +title: 安裝為應用程式、離線使用與自架 +summary: 像一般程式一樣啟動 layerling,即使沒有網路也行,以及在自己電腦上執行它的方法。 +--- + +## 安裝為應用程式 + +layerling 可以像一般程式一樣安裝。安裝後它會有自己的圖示和視窗,沒有網址列。第一次造訪之後,即使**沒有網路**也能啟動。你的設計留在自己的電腦上。值得安裝:應用程式啟動更快,因為不必每次都重新載入;沒有網路也能用,還能減輕伺服器的負擔。你什麼都不會失去,layerling 仍會在新版本推出時通知你。 + +如果你的瀏覽器支援,起始頁上會出現帶有 {{ui:installHint.install}} 的提示。否則: + +- **Chrome 與 Edge:** 點擊網址列右側的安裝圖示,或在瀏覽器選單中選擇「安裝為應用程式」。 +- **Mac 上的 Safari:** 「檔案」選單,然後「加入 Dock」。 +- **iPhone 與 iPad 上的 Safari:** 分享圖示,然後「加入主畫面」。 +- **Firefox:** 無法安裝應用程式。layerling 仍可在其分頁中離線啟動。 + +起始頁上的提示可以用 {{ui:installHint.dismiss}} 關閉。在 Chrome 或 Edge 中第二次啟動已安裝的應用程式時,會把已開啟的視窗帶到最前面,而不是再開一個。 + +在電腦上,Chrome 或 Edge 中安裝的 layerling 也會註冊為 `.lyl` 檔案的程式:在檔案管理員中雙擊設計,就會在 layerling 中開啟,而 [[Ctrl]]+[[S]] 會存回該檔案。在 Android 上這行不通,那裡的瀏覽器不為已安裝的網頁應用程式提供檔案關聯;請在起始頁用 {{ui:dashboard.importGeometry}} 開啟設計。 + +## 更新 + +有新版本時,layerling 會在起始頁顯示。透過 {{ui:dashboard.updateBannerLink}} 可以閱讀變更內容。版本號碼在右下角。重新載入頁面後就是新版本。 + +在 layerling.com 和其他網頁伺服器上,已開啟的頁面會自行察覺更新。它會不時向伺服器詢問版本,當你回到該分頁時也會,而如果它需要的某個程式檔案消失了,就立刻詢問。若期間安裝了新東西,右下角的卡片會說明並列出新內容。{{ui:newVersion.reload}} 會先把目前開啟的設計寫入瀏覽器,然後重新載入頁面;設計會以你離開時的模樣回來。{{ui:newVersion.later}} 會把卡片延後 15 分鐘。請儘快重新載入:停留在舊版本的頁面可能會載入新版本中不相容的部分。這種情況已經發生時也會出現同一張卡片:CAD 工作執行緒只在第一次需要時載入,它們會說明自己來自哪個建置;如果不是頁面本身的建置——更新之後,或使用了舊版本的儲存副本——卡片會要求重新載入,以免兩者互相誤解。 + +layerling 同時在好幾個分頁開啟時,它們會互相留意:如果另一個分頁已經在執行較新的版本,舊分頁底部會有提示,請你重新載入它。而如果同一個設計在兩個分頁中開啟,兩邊都會警告你,因為它們會自動儲存,會互相覆蓋。如果已經有一個分頁開著,你又在另一個分頁開啟 layerling,新分頁會建議在舊分頁中繼續,並提議關閉自己。如果你刻意要兩個分頁,比如並排放兩個設計,就在那裡點擊 {{ui:tabs.keepHere}}。本指南也會開在獨立的分頁中:當 layerling 就在旁邊開著時,它右上角的按鈕會顯示「返回編輯器」,點擊會關閉指南,而不是再開一次編輯器。 + +## 語言與外觀 + +在右上角從語言清單中選擇語言。旁邊的配色方案提供 {{ui:theme.short.system}}(跟隨作業系統)、{{ui:theme.short.light}}、{{ui:theme.short.dark}} 與 {{ui:theme.short.graphite}},一種中性的深灰色。 + +## 自行執行 + +layerling 是自由軟體(AGPL-3.0),可以執行在自己的電腦或伺服器上,例如工作坊、社團或學校。有幾種方式,說明見 [GitHub 上的 README](https://github.com/henmedia/layerling/blob/main/README.zh-tw.md#快速上手): + +- **Windows 快速開始:** 在 PowerShell 中輸入一行指令就能安裝全部內容,並在桌面放一個捷徑。當 layerling 已經在執行時,再次雙擊不會啟動第二個伺服器,只會開啟頁面。 +- **Docker:** 適合 NAS 裝置和家用伺服器,不必安裝 Node.js。每個版本都以現成映像 `henmedia/layerling` 發布在 Docker Hub(也有 `ghcr.io/henmedia/layerling`),支援 amd64 與 arm64;`docker run -d -p 3000:3000 -v layerling-thumbnails:/app/.codex/project-thumbnails henmedia/layerling:latest` 就能啟動,在 NAS 上則在容器管理員的映像倉庫中搜尋。磁碟區 `layerling-thumbnails` 能讓起始頁的預覽圖片在更新後保留下來;沒有它,每次重新建立容器後預覽圖片都會不見,直到你開啟該設計。 +- **靜態匯出:** 結果是一般的檔案,任何網頁伺服器都能提供。它們要放在網址的根目錄(`https://layerling.example.com/` 或 `http://192.168.0.5:8080/`),不能放在子資料夾,也不能直接從磁碟開啟;步驟見 README。若 `index.html` 旁邊有可寫的 `store` 資料夾,且伺服器裝有 PHP,它也會成為設計的共用儲存空間。 + +AI 助理用的 MCP 橋接只存在於開發伺服器,見[用 AI 建構](chapter:ai-with-mcp)。 + +## 說明與回饋 + +- 在編輯器中,{{ui:editor.group.help}} 區域有 {{ui:editor.guide}},包含最重要的操作與[鍵盤快速鍵](chapter:shortcuts)起始頁。快速指南的每一節都有一個問號,會帶你到這裡對應的章節。 + +![編輯器中的快速指南。頂部列出他人的影片,每一節都有一個問號。](shot:quick-guide) + +- 問題、願望與錯誤回報都歡迎到[論壇](https://forum.drucktipps3d.de/forum/board/127-layerling/)與 [GitHub](https://github.com/henmedia/layerling/discussions) 提出。 +- 哪個版本改了什麼,見版本說明,位於起始頁與編輯器的底部。 diff --git a/docs/guide/zh-tw/16-videos.md b/docs/guide/zh-tw/16-videos.md new file mode 100644 index 00000000..932ab458 --- /dev/null +++ b/docs/guide/zh-tw/16-videos.md @@ -0,0 +1,20 @@ +--- +title: 關於 layerling 的影片 +summary: 其他人製作的 layerling 影片。 +--- + +## 其他人製作 + +這些影片並非由本專案製作。連結會在新分頁中開啟 YouTube;在你點擊之前,不會從那裡載入任何內容。 + +- [I'm 100% In on Layerling - The Next Big Free CAD](https://youtu.be/IO7S-7bxS5o) – Printology(英語)。一位 Tinkercad 使用者的初次試用:layerling 在哪些方面做得比 Tinkercad 好、哪些地方仍待改進,以及現在是否值得改用。 +- [10 Things Layerling Can Do That Tinkercad Can't!](https://youtu.be/cx0OVHgUsJM) – Print N Repeat(英語)。該頻道的第二支影片:layerling 能做到而 Tinkercad 做不到的十件事。 +- [Layerling la nueva herramienta gratuita de modelado 3D, más completo que Tinkercad](https://youtu.be/-EEt0RSINoY) – Fulcro 1900(西班牙語)。一支關於 layerling 的影片:這款新的免費 3D 建模工具比 Tinkercad 更完整。 +- [Layerling - Tussen Tinkercad en Fusion 360 in, en Helemaal Gratis!](https://youtu.be/X-UuvsfDI-s) – Werkplaats Marc(荷蘭語)。給 Tinkercad 使用者的 layerling 初探:抽殼、圓角、孔陣列、帶間隙的螺紋、自訂字型與印表機設定,並分別列印有間隙與無間隙的螺栓來展示差異。 +- [Layerling](https://www.youtube.com/playlist?list=PLYqVFeqYBrPE) – TECHNOBENTO(英語)。一個關於 layerling 的播放清單,目前收錄「A new way to sketch in Layerling」。 +- [The PERFECT FREE CAD Program Between Tinkercad and Fusion 360!](https://youtu.be/GIoG-IHPXyg) – Print N Repeat(英語)。一支關於 layerling 的影片:它是介於 Tinkercad 與 Fusion 360 之間的免費 CAD 程式。 +- [Layerling Tutorials](https://www.youtube.com/playlist?list=PLZ-ZWS0D1JIk) – HL ModTech(英語)。一位 Tinkercad 使用者的播放清單,目前包含約 23 分鐘的 layerling 概觀(免費、以瀏覽器執行、延伸 Tinkercad 能力的 CAD)、對其功能的深入介紹,以及關於列印螺紋的簡短更新。 +- [Layerling – Playlist](https://www.youtube.com/playlist?list=PLCsBmX2kOGWs) – Making Layers(英語)。一個關於 layerling 的系列,目前收錄「Tinkercad alternative / upgrade? Introducing Layerling!」——寫給從 Tinkercad 轉來的人的概觀,以及講解草圖工具的「Layerling Sketch Tools!」。 +- [Tinkercad Too Basic? Fusion 360 Too Much? Meet Layerling for 3D Printing](https://youtu.be/kzV7fQ3rXhw) – 3D Jesus | 3D Printing & Design(英語)。在完全沒有手冊的情況下初次試用 layerling:圓角與倒角、抽殼、螺紋、草圖、旋轉實體、陣列、匯入與印表機設定。 + +你知道其他影片,或自己也拍了一支?在[討論區](https://github.com/henmedia/layerling/discussions)告訴我們,它就會被新增到這裡。 diff --git a/docs/guide/zh-tw/17-tablet-and-touch.md b/docs/guide/zh-tw/17-tablet-and-touch.md new file mode 100644 index 00000000..39da2a80 --- /dev/null +++ b/docs/guide/zh-tw/17-tablet-and-touch.md @@ -0,0 +1,52 @@ +--- +title: 平板與觸控 +summary: 用手指或觸控筆操作:選取多個實體、轉動與縮放視圖、長按選單,以及在 iPad 上需要知道的事項。 +--- + +## 手指與觸控筆 + +layerling 可在平板的瀏覽器中執行,也可從主畫面以應用程式的方式執行。手指的作用相當於滑鼠左鍵。平板沒有的三樣東西——滑鼠右鍵、Shift 鍵和滾輪——各有自己的替代方式: + +| 你想要 | 在平板上 | +| --- | --- | +| 選取一個實體 | 輕觸它。 | +| 選取多個實體 | 手指按住不動半秒,選擇 {{ui:contextMenu.selectMultiple}},然後逐一輕觸實體。再次輕觸已選取的實體會將它移出選取範圍。 | +| 全選實體 | 在空白處按住手指不動半秒,選擇 {{ui:contextMenu.selectAll}}。 | +| 開啟右鍵選單 | 在實體上或空白處按住手指不動半秒。 | +| 移動實體 | 拖曳它。 | +| 調整實體大小、旋轉或抬高 | 拖曳它的控制柄,也就是周圍的小方塊和箭頭。手指稍微偏一點也抓得到。 | +| 轉動視圖 | 在空白處用一根手指,或拖曳視圖立方體。 | +| 縮放視圖 | 兩根手指:張開以拉近,捏合以拉遠。 | +| 移動視圖 | 兩根手指併攏滑動。 | +| 清除選取 | 輕觸空白處。但在 {{ui:camera.touchRotate}} 開啟時不行,那時單指用於轉動視圖;而在 {{ui:contextMenu.selectMultiple}} 中,第一次輕觸空白處只會結束該模式並保持選取不變,再輕觸一次才會清除。 | + +## 選取多個實體 + +沒有 Shift 鍵時,長按選單中的 {{ui:contextMenu.selectMultiple}} 就等同於電腦上的 Shift+點擊。開啟期間會有訊息提示,每次輕觸實體會將它加入選取範圍或移出。輕觸空白處,或在鍵盤上按 [[Esc]],會結束該模式並保持選取不變。這段期間手指在空白處仍可轉動視圖。之後 {{ui:editor.tool.group}}、{{ui:editor.tool.align}} 或移動操作都會作用於你選取的所有實體。 + +同一選單中還有 {{ui:contextMenu.carry}},也就是觸控螢幕上的 [[C]] 鍵。選取範圍接著會跟著手指越過其他實體的各個面;輕觸一下即可將它放到你輕觸的那個面上,斜面也可以,而且第一次輕觸就足夠。也可以搜尋「set down」或「cruise」找到這個選單項目(指令搜尋,鍵盤上為 [[Ctrl]]+[[K]])。 + +## 轉動與縮放視圖 + +在空白處用一根手指轉動視圖,兩根手指縮放並移動視圖。從實體上開始的手指操作的是實體,不是視圖。如果你希望它改為轉動視圖,請在相機列開啟 {{ui:camera.touchRotate}}:此後無論從哪裡開始,單指都會轉動視圖而不是選取。這個開關只在有觸控螢幕的裝置上顯示。 + +左上角的視圖立方體在拖曳時會轉動視圖,輕觸它的某個側面、角或邊則會跳到該視圖。參見[視圖與工作平面](chapter:view-and-workplane)。 + +## 控制柄、小點與觸控筆 + +指尖會遮住它所瞄準的東西。layerling 讓手指比滑鼠指標伸得更遠一點,也夠得到控制柄、點、線和邊,但觸控筆更精細。這適用於平板辨識為筆的筆,例如 Apple Pencil 或 S Pen。帶橡膠筆尖的普通觸控筆會被螢幕當成手指,並不比手指精細,所以只能像手指一樣使用。在 iPad 上,懸停在螢幕上方的 Apple Pencil 稍後也會用一個小氣泡顯示控制項的名稱,就像滑鼠指標的工具提示那樣。 + +如果實體在兒童或匆忙的手觸碰時會滑動,請在設定中開啟 {{ui:workspace.selectBeforeMoving}}:這樣必須先選取實體,只有下一次拖曳才會移動它。 + +## 在 iPad 或 iPhone 上 + +- **將它安裝為應用程式。** 在 Safari 中輕觸分享圖示,選擇「加入主畫面」。應用程式會在自己的視窗中開啟,沒有網址列,而且沒有連線也能使用,參見[離線與安裝](chapter:offline-and-install)。 +- **你的設計存在瀏覽器中。** 沒有帳號,也不會上傳任何內容。Safari 有自己的防追蹤規則:如果七天內沒有在 Safari 造訪某個網站,它就會刪除該網站儲存的內容。加入主畫面的網頁應用程式不受這條規則限制,WebKit 的文件如此說明。這也是更應該從主畫面使用應用程式,並備份重要作品的理由:起始頁上的 {{ui:dashboard.backupAll}} 會把所有設計打包成一個檔案。 +- **檔案。** Safari 只允許頁面透過下載寫入檔案,所以 {{ui:editor.export}} 會把檔案放進「檔案」應用程式的「下載項目」,鍵盤上的 [[Ctrl]]+[[S]] 會再次下載它;參見[檔案與儲存](chapter:files-and-saving)。 +- **不需要鍵盤。** 每個工具在功能區都有按鈕,數字欄位會叫出螢幕鍵盤。iPad 上的鍵盤則會帶來[鍵盤快速鍵](chapter:shortcuts)。 + +## 帶兒童的工作坊 + +手指和橡膠筆尖的觸控筆在這裡用法相同。有兩項設定能讓課堂更輕鬆:{{ui:workspace.selectBeforeMoving}} 讓觸碰不會意外移動實體,{{ui:camera.touchRotate}} 讓單指一律轉動視圖。功能區的「說明」群組中的問號按鈕會開啟 {{ui:interactiveHelp.title}}:此時輕觸任何按鈕、欄位或控制柄都會得到說明,再按同一按鈕或按 [[Esc]] 即可離開。 + +要讓整個班級使用,請在設定中開啟 {{ui:workspace.simpleMode}}。功能區之後只保留工作坊會用到的工具(複製、貼上、建立副本、刪除、復原、群組、鏡像、倒角、圓角、抽殼、對齊、匯出),形狀庫只留一份簡短清單,按鈕更大,起始頁只顯示設計,別無其他:沒有最新消息、沒有歡迎文字、沒有說明按鈕,也沒有連到 layerling 之外的連結。開啟只需輕觸一下;關閉則要按住接著取代它的那個按鈕兩秒。以 `?mode=simple` 結尾的連結會為開啟它的裝置開啟此模式,`?mode=full` 會再次關閉。在伺服器上執行 layerling 的人可以用 `LAYERLING_SIMPLE_MODE=true` 讓所有人一開始就進入此模式,或用 `always` 為所有人固定下來,讓程式沒有離開此模式的開關;參見 README。 diff --git a/scripts/sync-videos.mjs b/scripts/sync-videos.mjs index 3680960d..c4af81fd 100644 --- a/scripts/sync-videos.mjs +++ b/scripts/sync-videos.mjs @@ -20,7 +20,7 @@ const END = ""; const DISCUSSION_NUMBER = 296; /** README file -> the guide language its list is taken from. */ -export const README_LANGUAGES = { "README.md": "en", "README.de.md": "de", "README.nl.md": "nl" }; +export const README_LANGUAGES = { "README.md": "en", "README.de.md": "de", "README.nl.md": "nl", "README.zh-cn.md": "zh-cn", "README.zh-tw.md": "zh-tw" }; /** The lines of the video chapter of a language: "- [title](https://...) - channel (language). description". */ export function chapterVideoLines(language, base = root) { diff --git a/tests/unit/guideAllLanguages.test.ts b/tests/unit/guideAllLanguages.test.ts index 32a09476..471f876b 100644 --- a/tests/unit/guideAllLanguages.test.ts +++ b/tests/unit/guideAllLanguages.test.ts @@ -19,8 +19,8 @@ const LANGUAGES = readdirSync(guideRoot).filter((name) => name !== "images" && s type Chapter = { file: string; number: string; body: string }; describe("the guide in every language", () => { - it("covers the twelve guide languages", () => { - expect(LANGUAGES.sort()).toEqual(["ar", "cs", "da", "de", "en", "es", "fr", "hu", "nl", "pl", "ru", "sl"]); + it("covers the fourteen guide languages", () => { + expect(LANGUAGES.sort()).toEqual(["ar", "cs", "da", "de", "en", "es", "fr", "hu", "nl", "pl", "ru", "sl", "zh-cn", "zh-tw"]); }); it("writes headings with a plain space, so they render as headings", async () => { diff --git a/tests/unit/i18nLanguages.test.ts b/tests/unit/i18nLanguages.test.ts index 58c0e56e..c58333c9 100644 --- a/tests/unit/i18nLanguages.test.ts +++ b/tests/unit/i18nLanguages.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; import { analyseCatalogue } from "../../scripts/i18n-status.mjs"; import { effectiveChapters } from "../../scripts/build-guide.mjs"; -import { createCatalogueStore } from "@/lib/i18n"; +import { LANGUAGE_BOOT_SCRIPT, createCatalogueStore } from "@/lib/i18n"; import { LANGUAGE_INFO, LANGUAGES, isLanguage, languageFromTag } from "@/lib/languages"; import { MESSAGES_EN } from "@/lib/messages.en"; @@ -64,6 +64,30 @@ describe("the language registry", () => { it("recognises a browser's language by its primary tag", () => { for (const language of LANGUAGES) expect(languageFromTag(`${language.toUpperCase()}-xx`)).toBe(language); }); + + it("recognises Simplified and Traditional Chinese by script and region", () => { + expect(languageFromTag("zh-Hans-CN")).toBe("zh-cn"); + expect(languageFromTag("zh-Hans")).toBe("zh-cn"); + expect(languageFromTag("zh-TW")).toBe("zh-tw"); + expect(languageFromTag("zh-HK")).toBe("zh-tw"); + expect(languageFromTag("zh-MO")).toBe("zh-tw"); + expect(languageFromTag("zh-Hant-CN")).toBe("zh-tw"); + expect(languageFromTag("zh-Hant")).toBe("zh-tw"); + }); + + it("gives the page the same lang before paint that the app will use", () => { + const painted = (languages: string[], stored: string | null = null) => { + const documentElement = { lang: "" }; + const run = new Function("document", "navigator", "localStorage", LANGUAGE_BOOT_SCRIPT); + run({ documentElement }, { languages, language: languages[0] }, { getItem: () => stored }); + return documentElement.lang; + }; + expect(painted(["zh-Hant-TW"])).toBe("zh-TW"); + expect(painted(["zh-Hans-CN"])).toBe("zh-CN"); + expect(painted(["zh-HK"])).toBe("zh-TW"); + expect(painted(["en-US"])).toBe("en"); + expect(painted(["en-US"], "zh-tw")).toBe("zh-TW"); + }); }); describe("what every language's sentences must be", () => {