keychron-hardware-design

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Keychron Hardware Design Skill

Keychron硬件设计技能

Skill by ara.so — Design Skills collection.
This skill enables AI agents to help developers work with Keychron's production-grade hardware design files for 135+ keyboard and mouse models. The repository contains CAD assets in STEP, DXF, DWG, and PDF formats covering C Pro 8K, Q, Q Pro, Q HE, Q Max, K Pro, K Max, K HE, V Max, P HE series keyboards and M/G series mice.
ara.so提供的技能——设计技能合集。
该技能可让AI Agent协助开发者使用Keychron针对135+款键盘和鼠标型号提供的专业级硬件设计文件。仓库中包含STEP、DXF、DWG和PDF格式的CAD资源,覆盖C Pro 8K、Q、Q Pro、Q HE、Q Max、K Pro、K Max、K HE、V Max、P HE系列键盘以及M/G系列鼠标。

Project Overview

项目概述

Repository:
Keychron/Keychron-Keyboards-Hardware-Design

Stars: 3,376 (80 stars/day)
License: Source-available (personal/educational use; original compatible accessories exempt from commercial restrictions)
File Types: STEP (.stp), DXF, DWG, PDF
Component Categories: Cases, plates, encoders, stabilizers, keycaps, full models, shells
仓库地址:
Keychron/Keychron-Keyboards-Hardware-Design

星标数: 3376(日均80个星标)
许可证: 源码可用(个人/教育用途;原创兼容配件不受商用限制)
文件类型: STEP(.stp)、DXF、DWG、PDF
组件分类: 外壳、定位板、编码器、卫星轴、键帽、完整模型、壳体

Installation

安装步骤

Clone the repository to access the CAD files:
bash
git clone https://github.com/Keychron/Keychron-Keyboards-Hardware-Design.git
cd Keychron-Keyboards-Hardware-Design
Files are organized by series and model in dedicated folders. For example:
Q-Series/Q1/
K-Pro-Series/K8-Pro/
Q-Max-Series/Q6-Max/
Mice/M1/
克隆仓库以获取CAD文件:
bash
git clone https://github.com/Keychron/Keychron-Keyboards-Hardware-Design.git
cd Keychron-Keyboards-Hardware-Design
文件按系列和型号存放在专属文件夹中,示例如下:
Q-Series/Q1/
K-Pro-Series/K8-Pro/
Q-Max-Series/Q6-Max/
Mice/M1/

Repository Structure

仓库结构

Major Series Categories

主要系列分类

C-Pro-8K-Series/          # Wired keyboards (C1, C2, C3 Pro 8K)
Q-Series/                 # Flagship mechanical (Q0-Q12, Q60, Q65)
Q-Pro-Series/             # Wireless Q variants (Q1-Q14 Pro)
Q-HE-Series/              # Hall Effect models (Q0-Q12 HE)
Q-HE-8K-Series/           # 8K polling Hall Effect (Q1-Q16 HE 8K)
Q-Max-Series/             # Premium Q series (Q0-Q15 Max)
Q-Ultra-8K-Series/        # Ultra series (Q1, Q3, Q5, Q6, Q13 Ultra 8K)
K-Pro-Series/             # K Pro keyboards (K1-K17 Pro)
K-Max-Series/             # K Max keyboards (K0-K17 Max)
K-HE-Series/              # K Hall Effect (K2, K4, K6, K8, K10 HE)
K-QMK-Series/             # QMK firmware models (K1-K10 QMK)
L-Series/                 # Aluminum keyboards (L1, L3)
V-8K-Series/              # V series 8K polling (V1, V3, V5, V6)
V-Ultra-8K-Series/        # V Ultra series (V0, V1, V3, V5, V6, V10)
V-Max-Series/             # V Max series (V1-V10 Max)
P-HE-Series/              # Lemokey Hall Effect (P1-P3 HE)
Mice/                     # Mouse models (M1-M7, G1-G2)
Keycap-Profiles/          # Cherry, KSA, LSA, MDA, OEM, OSA
C-Pro-8K-Series/          # 有线键盘(C1、C2、C3 Pro 8K)
Q-Series/                 # 旗舰机械键盘(Q0-Q12、Q60、Q65)
Q-Pro-Series/             # Q系列无线版本(Q1-Q14 Pro)
Q-HE-Series/              # 霍尔效应型号(Q0-Q12 HE)
Q-HE-8K-Series/           # 8K polling霍尔效应型号(Q1-Q16 HE 8K)
Q-Max-Series/             # 高端Q系列(Q0-Q15 Max)
Q-Ultra-8K-Series/        # Ultra系列(Q1、Q3、Q5、Q6、Q13 Ultra 8K)
K-Pro-Series/             # K Pro系列键盘(K1-K17 Pro)
K-Max-Series/             # K Max系列键盘(K0-K17 Max)
K-HE-Series/              # K系列霍尔效应型号(K2、K4、K6、K8、K10 HE)
K-QMK-Series/             # 搭载QMK固件的型号(K1-K10 QMK)
L-Series/                 # 铝合金键盘(L1、L3)
V-8K-Series/              # V系列8K polling型号(V1、V3、V5、V6)
V-Ultra-8K-Series/        # V Ultra系列(V0、V1、V3、V5、V6、V10)
V-Max-Series/             # V Max系列(V1-V10 Max)
P-HE-Series/              # Lemokey霍尔效应型号(P1-P3 HE)
Mice/                     # 鼠标型号(M1-M7、G1-G2)
Keycap-Profiles/          # Cherry、KSA、LSA、MDA、OEM、OSA键帽轮廓

File Format Guide

文件格式指南

STEP Files (.stp)

STEP文件(.stp)

Primary 3D CAD format for mechanical design. Compatible with:
  • FreeCAD (Open source)
  • Fusion 360 (Autodesk)
  • SolidWorks
  • Onshape
  • Rhino
Opening a STEP file in FreeCAD:
bash
undefined
机械设计的核心3D CAD格式,兼容以下软件:
  • FreeCAD(开源)
  • Fusion 360(Autodesk)
  • SolidWorks
  • Onshape
  • Rhino
在FreeCAD中打开STEP文件:
bash
undefined

Install FreeCAD

安装FreeCAD

Ubuntu/Debian

Ubuntu/Debian

sudo apt install freecad
sudo apt install freecad

macOS

macOS

brew install --cask freecad
brew install --cask freecad

Open file

打开文件

freecad K-Pro-Series/K8-Pro/K8-Pro-Case.stp
undefined
freecad K-Pro-Series/K8-Pro/K8-Pro-Case.stp
undefined

DXF/DWG Files

DXF/DWG文件

2D CAD formats for plate designs and dimensional drawings. Compatible with:
  • LibreCAD (Open source)
  • QCAD
  • AutoCAD
  • DraftSight
Opening DXF in LibreCAD:
bash
undefined
用于定位板设计和尺寸图纸的2D CAD格式,兼容以下软件:
  • LibreCAD(开源)
  • QCAD
  • AutoCAD
  • DraftSight
在LibreCAD中打开DXF文件:
bash
undefined

Install LibreCAD

安装LibreCAD

sudo apt install librecad
sudo apt install librecad

Open file

打开文件

librecad Q-Series/Q1/Q1-Plate.dxf
undefined
librecad Q-Series/Q1/Q1-Plate.dxf
undefined

PDF Files

PDF文件

Reference documentation and dimensional drawings viewable in any PDF reader.
参考文档和尺寸图纸,可在任意PDF阅读器中查看。

Common Workflows

常见工作流程

1. Inspecting Keyboard Dimensions

1. 检查键盘尺寸

To check dimensions for a Q1 Pro case:
bash
undefined
检查Q1 Pro外壳的尺寸:
bash
undefined

Navigate to model folder

进入型号文件夹

cd Q-Pro-Series/Q1-Pro/
cd Q-Pro-Series/Q1-Pro/

List available files

列出可用文件

ls -lh
ls -lh

Expected: Q1-Pro-Case.stp, Q1-Pro-Plate.stp, Q1-Pro-Full-Model.stp

预期文件:Q1-Pro-Case.stp、Q1-Pro-Plate.stp、Q1-Pro-Full-Model.stp

Open in FreeCAD to measure

在FreeCAD中打开以测量

freecad Q1-Pro-Case.stp

In FreeCAD:
1. Select **Measure** → **Distance**
2. Click two points to measure
3. View dimensions in property panel
freecad Q1-Pro-Case.stp

在FreeCAD中:
1. 选择**测量** → **距离**
2. 点击两个点进行测量
3. 在属性面板中查看尺寸

2. Designing a Compatible Plate Modification

2. 设计兼容的定位板改装件

Example: Adding extra mounting holes to a K8 Pro plate.
python
undefined
示例:为K8 Pro定位板添加额外安装孔。
python
undefined

Python script using FreeCAD API

使用FreeCAD API的Python脚本

import FreeCAD import Part
import FreeCAD import Part

Load original plate

加载原始定位板

doc = FreeCAD.open("K-Pro-Series/K8-Pro/K8-Pro-Plate.stp") plate = doc.Objects[0]
doc = FreeCAD.open("K-Pro-Series/K8-Pro/K8-Pro-Plate.stp") plate = doc.Objects[0]

Add mounting holes at specific coordinates

在指定坐标添加安装孔

hole_diameter = 3.0 # mm hole_positions = [ (10, 10, 0), (350, 10, 0), (10, 120, 0), (350, 120, 0) ]
for pos in hole_positions: cylinder = Part.makeCylinder(hole_diameter / 2, 5, FreeCAD.Vector(*pos)) plate.Shape = plate.Shape.cut(cylinder)
hole_diameter = 3.0 # 毫米 hole_positions = [ (10, 10, 0), (350, 10, 0), (10, 120, 0), (350, 120, 0) ]
for pos in hole_positions: cylinder = Part.makeCylinder(hole_diameter / 2, 5, FreeCAD.Vector(*pos)) plate.Shape = plate.Shape.cut(cylinder)

Export modified plate

导出修改后的定位板

plate.Shape.exportStep("K8-Pro-Plate-Modified.stp") doc.saveAs("K8-Pro-Plate-Modified.FCStd")
undefined
plate.Shape.exportStep("K8-Pro-Plate-Modified.stp") doc.saveAs("K8-Pro-Plate-Modified.FCStd")
undefined

3. Creating a Custom Case Add-on

3. 定制外壳附加件

Example: Designing a magnetic feet attachment for Q6 Max.
python
undefined
示例:为Q6 Max设计磁吸脚垫附件。
python
undefined

FreeCAD Python console script

FreeCAD Python控制台脚本

import FreeCAD import Part
import FreeCAD import Part

Load Q6 Max case

加载Q6 Max外壳

doc = FreeCAD.open("Q-Max-Series/Q6-Max/Q6-Max-Case.stp") case = doc.Objects[0]
doc = FreeCAD.open("Q-Max-Series/Q6-Max/Q6-Max-Case.stp") case = doc.Objects[0]

Get case bottom dimensions

获取外壳底部尺寸

bbox = case.Shape.BoundBox width = bbox.XLength depth = bbox.YLength
bbox = case.Shape.BoundBox width = bbox.XLength depth = bbox.YLength

Create magnetic feet holder (4 corners)

创建磁吸脚垫支架(4个角落)

feet_diameter = 10 # mm feet_height = 3 # mm inset = 15 # mm from edges
feet_positions = [ (inset, inset), (width - inset, inset), (inset, depth - inset), (width - inset, depth - inset) ]
feet_parts = [] for x, y in feet_positions: foot = Part.makeCylinder(feet_diameter / 2, feet_height, FreeCAD.Vector(x, y, -feet_height)) feet_parts.append(foot)
feet_diameter = 10 # 毫米 feet_height = 3 # 毫米 inset = 15 # 距离边缘的毫米数
feet_positions = [ (inset, inset), (width - inset, inset), (inset, depth - inset), (width - inset, depth - inset) ]
feet_parts = [] for x, y in feet_positions: foot = Part.makeCylinder(feet_diameter / 2, feet_height, FreeCAD.Vector(x, y, -feet_height)) feet_parts.append(foot)

Combine all feet

合并所有脚垫

feet_holder = feet_parts[0] for foot in feet_parts[1:]: feet_holder = feet_holder.fuse(foot)
feet_holder = feet_parts[0] for foot in feet_parts[1:]: feet_holder = feet_holder.fuse(foot)

Export for 3D printing

导出用于3D打印

feet_holder.exportStl("Q6-Max-Magnetic-Feet.stl")
undefined
feet_holder.exportStl("Q6-Max-Magnetic-Feet.stl")
undefined

4. Extracting Plate DXF for Laser Cutting

4. 提取定位板DXF文件用于激光切割

bash
undefined
bash
undefined

Navigate to desired model

进入目标型号文件夹

cd Q-Series/Q3/
cd Q-Series/Q3/

Verify DXF exists

验证DXF文件是否存在

ls *.dxf
ls *.dxf

Q3-Plate.dxf

Q3-Plate.dxf

Open in LibreCAD to verify dimensions

在LibreCAD中打开以验证尺寸

librecad Q3-Plate.dxf
librecad Q3-Plate.dxf

Export with correct units for laser cutting service

导出适合激光切割服务的正确单位文件

In LibreCAD: File > Export > DXF

在LibreCAD中:文件 > 导出 > DXF

Set units to millimeters

设置单位为毫米

Set version to R12/LT2 for maximum compatibility

设置版本为R12/LT2以获得最大兼容性

undefined
undefined

5. Converting STEP to STL for 3D Printing

5. 将STEP转换为STL用于3D打印

Using FreeCAD command line:
bash
undefined
使用FreeCAD命令行:
bash
undefined

Convert K2 HE case to STL

将K2 HE外壳转换为STL

freecad -c << EOF import FreeCAD import Mesh
doc = FreeCAD.open("K-HE-Series/K2-HE/K2-HE-Case.stp") obj = doc.Objects[0]
freecad -c << EOF import FreeCAD import Mesh
doc = FreeCAD.open("K-HE-Series/K2-HE/K2-HE-Case.stp") obj = doc.Objects[0]

Export with reasonable resolution

以合理分辨率导出

Mesh.export([obj], "K2-HE-Case.stl") EOF

Or using Python script:

```python
import FreeCAD
import Mesh
import sys

input_file = sys.argv[1]  # "K2-HE-Case.stp"
output_file = sys.argv[2]  # "K2-HE-Case.stl"

doc = FreeCAD.open(input_file)
shape = doc.Objects[0]
Mesh.export([obj], "K2-HE-Case.stl") EOF

或使用Python脚本:

```python
import FreeCAD
import Mesh
import sys

input_file = sys.argv[1]  # "K2-HE-Case.stp"
output_file = sys.argv[2]  # "K2-HE-Case.stl"

doc = FreeCAD.open(input_file)
shape = doc.Objects[0]

Higher mesh deviation = smoother surface

偏差值越小,网格越平滑(0.01为高质量)

mesh = shape.Shape.tessellate(0.01) Mesh.Mesh(mesh[0], mesh[1]).write(output_file)
undefined
mesh = shape.Shape.tessellate(0.01) Mesh.Mesh(mesh[0], mesh[1]).write(output_file)
undefined

6. Batch Processing Multiple Models

6. 批量处理多个模型

Extract all plate files from Q Series:
bash
#!/bin/bash
提取Q系列的所有定位板文件:
bash
#!/bin/bash

Find all STEP plate files in Q-Series

在Q系列中查找所有STEP格式的定位板文件

find Q-Series -name "*Plate.stp" -type f > plate_files.txt
find Q-Series -name "*Plate.stp" -type f > plate_files.txt

Convert each to STL

将每个文件转换为STL

while IFS= read -r file; do base=$(basename "$file" .stp) dir=$(dirname "$file")
echo "Converting $file..."
freecad -c << EOF
import FreeCAD import Mesh
doc = FreeCAD.open("$file") obj = doc.Objects[0] Mesh.export([obj], "$dir/${base}.stl") EOF done < plate_files.txt
undefined
while IFS= read -r file; do base=$(basename "$file" .stp) dir=$(dirname "$file")
echo "正在转换 $file..."
freecad -c << EOF
import FreeCAD import Mesh
doc = FreeCAD.open("$file") obj = doc.Objects[0] Mesh.export([obj], "$dir/${base}.stl") EOF done < plate_files.txt
undefined

Working with Keycap Profiles

键帽轮廓使用说明

The repository includes reference keycap profiles:
bash
cd Keycap-Profiles
仓库包含以下参考键帽轮廓:
bash
cd Keycap-Profiles

Available profiles

可用的键帽轮廓

ls -1
ls -1

Cherry-Profile/

Cherry-Profile/

KSA-Profile/

KSA-Profile/

LSA-Profile/

LSA-Profile/

MDA-Profile/

MDA-Profile/

OEM-Profile/

OEM-Profile/

OSA-Profile/

OSA-Profile/


Load a keycap profile for custom keycap design:

```python
import FreeCAD
import Part

加载键帽轮廓以进行自定义键帽设计:

```python
import FreeCAD
import Part

Load OSA profile reference

加载OSA轮廓参考文件

doc = FreeCAD.open("Keycap-Profiles/OSA-Profile/OSA-R1-1u.stp") keycap = doc.Objects[0]
doc = FreeCAD.open("Keycap-Profiles/OSA-Profile/OSA-R1-1u.stp") keycap = doc.Objects[0]

Clone and modify for custom legend

克隆并修改以添加自定义字符

custom = keycap.Shape.copy()
custom = keycap.Shape.copy()

Add custom text engraving (simplified example)

添加自定义文字雕刻(简化示例)

text_height = 1.0 # mm deep
text_height = 1.0 # 深度:毫米

... perform boolean cut operation for legend

... 执行布尔切割操作添加字符

undefined
undefined

Configuration & Best Practices

配置与最佳实践

File Organization

文件组织

bash
undefined
bash
undefined

Recommended local structure

推荐的本地文件结构

keychron-mods/ ├── original/ # Clone of official repo ├── modified/ # Your modifications │ ├── plates/ │ ├── cases/ │ └── accessories/ ├── exports/ # STL/DXF exports for production └── scripts/ # Automation scripts
undefined
keychron-mods/ ├── original/ # 官方仓库的克隆版本 ├── modified/ # 您的修改文件 │ ├── plates/ │ ├── cases/ │ └── accessories/ ├── exports/ # 用于生产的STL/DXF导出文件 └── scripts/ # 自动化脚本
undefined

CAD Software Settings

CAD软件设置

FreeCAD Preferences:
  • Units: Millimeters (default for Keychron files)
  • Grid spacing: 1mm
  • Snap to grid: Enabled for precision
Fusion 360 Import:
  • File format: STEP AP214
  • Unit: mm (auto-detected)
  • Stitching tolerance: 0.001 mm
FreeCAD偏好设置:
  • 单位:毫米(Keychron文件默认单位)
  • 网格间距:1毫米
  • 启用网格吸附以保证精度
Fusion 360导入设置:
  • 文件格式:STEP AP214
  • 单位:毫米(自动检测)
  • 拼接公差:0.001毫米

3D Printing Guidelines

3D打印指南

For printing keyboard parts from this repository:
yaml
undefined
打印本仓库中的键盘部件时:
yaml
undefined

Recommended PLA/PETG settings

推荐的PLA/PETG打印设置

layer_height: 0.2mm wall_thickness: 1.2mm (3 walls) infill: 20-30% supports: Usually required for cases bed_adhesion: Brim for large flat parts orientation: Mounting face down for plates

Example Cura profile snippet:

```python
layer_height: 0.2mm wall_thickness: 1.2mm (3层壁厚) infill: 20-30% supports: 外壳通常需要支撑 bed_adhesion: 大型扁平部件使用裙边 orientation: 定位板以安装面朝下摆放

Cura配置文件示例片段:

```python

cura_keychron_profile.py

cura_keychron_profile.py

settings = { 'layer_height': 0.2, 'wall_thickness': 1.2, 'top_bottom_thickness': 1.0, 'infill_sparse_density': 25, 'support_enable': True, 'support_type': 'buildplate', 'adhesion_type': 'brim', 'brim_width': 5 }
undefined
settings = { 'layer_height': 0.2, 'wall_thickness': 1.2, 'top_bottom_thickness': 1.0, 'infill_sparse_density': 25, 'support_enable': True, 'support_type': 'buildplate', 'adhesion_type': 'brim', 'brim_width': 5 }
undefined

Measurement & Validation

测量与验证

Validating Plate Tolerances

验证定位板公差

python
import FreeCAD
import Part
python
import FreeCAD
import Part

Load plate and switch reference

加载定位板和开关参考文件

plate = FreeCAD.open("Q-Series/Q1/Q1-Plate.stp").Objects[0]
plate = FreeCAD.open("Q-Series/Q1/Q1-Plate.stp").Objects[0]

Cherry MX switch cutout should be 14mm x 14mm

Cherry MX开关开孔应为14mm x 14mm

Measure actual cutout dimensions

测量实际开孔尺寸

def measure_switch_cutout(plate_shape): # Find rectangular faces on top surface faces = [f for f in plate_shape.Faces if f.Area > 180 and f.Area < 200]
for face in faces:
    bbox = face.BoundBox
    width = bbox.XLength
    height = bbox.YLength
    
    if 13.8 <= width <= 14.2 and 13.8 <= height <= 14.2:
        print(f"Switch cutout: {width:.2f}mm x {height:.2f}mm")
        return True

print("Warning: Standard switch cutout not found")
return False
measure_switch_cutout(plate.Shape)
undefined
def measure_switch_cutout(plate_shape): # 查找顶面的矩形面 faces = [f for f in plate_shape.Faces if f.Area > 180 and f.Area < 200]
for face in faces:
    bbox = face.BoundBox
    width = bbox.XLength
    height = bbox.YLength
    
    if 13.8 <= width <= 14.2 and 13.8 <= height <= 14.2:
        print(f"开关开孔尺寸: {width:.2f}mm x {height:.2f}mm")
        return True

print("警告:未找到标准开关开孔")
return False
measure_switch_cutout(plate.Shape)
undefined

Common Issues & Troubleshooting

常见问题与故障排除

Issue: STEP file won't open

问题:STEP文件无法打开

bash
undefined
bash
undefined

Verify file integrity

验证文件完整性

file K-Pro-Series/K8-Pro/K8-Pro-Case.stp
file K-Pro-Series/K8-Pro/K8-Pro-Case.stp

Expected: "K8-Pro-Case.stp: ISO-10303 STEP data"

预期输出:"K8-Pro-Case.stp: ISO-10303 STEP data"

Try converting with Open CASCADE

尝试使用Open CASCADE转换

STEPFILE="K8-Pro-Case.stp" python3 << EOF import OCC.Core.STEPControl as STEP reader = STEP.STEPControl_Reader() status = reader.ReadFile("$STEPFILE") if status == 1: print("File valid") else: print("File corrupted or invalid") EOF
undefined
STEPFILE="K8-Pro-Case.stp" python3 << EOF import OCC.Core.STEPControl as STEP reader = STEP.STEPControl_Reader() status = reader.ReadFile("$STEPFILE") if status == 1: print("文件有效") else: print("文件损坏或无效") EOF
undefined

Issue: Units appear incorrect

问题:单位显示错误

All Keychron files are in millimeters. If dimensions appear wrong:
python
undefined
所有Keychron文件均使用毫米单位。如果尺寸显示错误:
python
undefined

FreeCAD unit conversion

FreeCAD单位转换

import FreeCAD
doc = FreeCAD.open("Q1-Case.stp") obj = doc.Objects[0]
import FreeCAD
doc = FreeCAD.open("Q1-Case.stp") obj = doc.Objects[0]

Check bounding box in mm

以毫米为单位检查边界框

bbox = obj.Shape.BoundBox print(f"Width: {bbox.XLength}mm") print(f"Depth: {bbox.YLength}mm") print(f"Height: {bbox.ZLength}mm")
bbox = obj.Shape.BoundBox print(f"宽度: {bbox.XLength}mm") print(f"深度: {bbox.YLength}mm") print(f"高度: {bbox.ZLength}mm")

Expected for Q1: ~360mm x ~140mm x ~30mm

Q1预期尺寸:约360mm x 140mm x 30mm

undefined
undefined

Issue: Missing files for specific model

问题:特定型号文件缺失

Check the model's README for download links:
bash
undefined
查看该型号的README文件获取下载链接:
bash
undefined

Each model folder contains a README with download links

每个型号文件夹都包含带有下载链接的README文件

cat Q-Max-Series/Q6-Max/README.md
cat Q-Max-Series/Q6-Max/README.md

Look for "Downloads" section

查找"Downloads"章节


Many models have placeholder folders with README/product pages but CAD files are uploaded incrementally. Check repository updates.

许多型号的文件夹为占位符,包含README/产品页面,但CAD文件会逐步上传,请关注仓库更新。

Issue: Exported STL has gaps or errors

问题:导出的STL存在间隙或错误

Increase mesh resolution:
python
import FreeCAD
import Mesh

doc = FreeCAD.open("source.stp")
obj = doc.Objects[0]
提高网格分辨率:
python
import FreeCAD
import Mesh

doc = FreeCAD.open("source.stp")
obj = doc.Objects[0]

Lower deviation = smoother mesh (0.01 is high quality)

偏差值越小,网格越平滑(0.01为高质量)

mesh = obj.Shape.tessellate(0.01) Mesh.Mesh(mesh[0], mesh[1]).write("output-high-res.stl")
undefined
mesh = obj.Shape.tessellate(0.01) Mesh.Mesh(mesh[0], mesh[1]).write("output-high-res.stl")
undefined

License Compliance

许可证合规说明

Allowed:
  • Personal use and modifications
  • Educational projects
  • Creating original compatible accessories
  • Studying and remixing designs
  • 3D printing parts for personal keyboards
Not Allowed:
  • Copying and selling Keychron keyboards/mice
  • Using Keychron trademarks as your own brand
  • Mass manufacturing clones for commercial sale
Gray Area (Original Accessories ARE Allowed): The license explicitly states: "Original compatible accessories and add-ons are not subject to the commercial-use restriction."
This means you CAN sell:
  • Custom plates that fit Keychron cases
  • Aftermarket cases for Keychron PCBs
  • Mounting brackets and stands
  • Cable management solutions
  • Foam inserts and dampeners
允许的行为:
  • 个人使用与改装
  • 教育项目
  • 创建原创兼容配件
  • 研究与重新设计
  • 为个人键盘3D打印部件
禁止的行为:
  • 复制并销售Keychron键盘/鼠标
  • 将Keychron商标用作自有品牌
  • 大规模制造仿制品用于商业销售
灰色区域(原创配件允许商用): 许可证明确规定:"原创兼容配件和附加件不受商用限制。"
这意味着您可以销售:
  • 适配Keychron外壳的定制定位板
  • 适配Keychron PCB的售后外壳
  • 安装支架与底座
  • 线缆管理配件
  • 泡棉内衬与减震件

Contributing Modifications

贡献改装方案

If you improve dimensions or fix issues:
bash
undefined
如果您优化了尺寸或修复了问题:
bash
undefined

Fork the repository

Fork仓库

gh repo fork Keychron/Keychron-Keyboards-Hardware-Design
gh repo fork Keychron/Keychron-Keyboards-Hardware-Design

Create feature branch

创建功能分支

git checkout -b fix/q1-plate-tolerance
git checkout -b fix/q1-plate-tolerance

Make changes to STEP files

修改STEP文件

Use FreeCAD or other CAD software

使用FreeCAD或其他CAD软件

Export corrected version

导出修正后的版本

Include both STEP and source format (.FCStd for FreeCAD)

同时包含STEP和源格式文件(FreeCAD为.FCStd)

Commit with descriptive message

提交并添加描述性信息

git add Q-Series/Q1/Q1-Plate.stp git add Q-Series/Q1/Q1-Plate.FCStd git commit -m "Fix Q1 plate switch cutout tolerance to 14.0mm ±0.05mm"
git add Q-Series/Q1/Q1-Plate.stp git add Q-Series/Q1/Q1-Plate.FCStd git commit -m "Fix Q1 plate switch cutout tolerance to 14.0mm ±0.05mm"

Push and create PR

推送并创建PR

git push origin fix/q1-plate-tolerance gh pr create --title "Fix Q1 plate switch cutout tolerance"
undefined
git push origin fix/q1-plate-tolerance gh pr create --title "Fix Q1 plate switch cutout tolerance"
undefined

Additional Resources

额外资源

This skill enables comprehensive support for users working with Keychron's hardware design files for modification, accessory creation, and education.
该技能为使用Keychron硬件设计文件进行改装、配件创作和学习的用户提供全面支持。