办公文档
需要 Keychron 键盘/鼠标 CAD 源文件做建模…
从 Keychron 开源硬件设计仓库获取 STEP/DXF/DWG/PDF 文件,并用 Python 脚本做清点、检索、格式转换与打印准备。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要 Keychron 键盘/鼠标 CA通用
解决思路
- 克隆完整仓库:git clone https://github.com/Keychron/Keychron-Keyboards-Hardware-Design.git 然后 cd 进入目录。
- 只取单个型号时用稀疏检出省带宽:git clone --filter=blob:none --sparse <repo>,再 git sparse-checkout set "Q-Series/Q1";取整个系列则 git sparse-checkout set "K-Pro-Series"。
- 按目录结构定位文件:顶层为系列(Q-Series、Q-Pro-Series、K-Pro-Series、V-Max-Series、K-Max-Series、K-HE-Series、Mice、Keycap Profiles、docs),第二层为型号,文件名形如 <型号>-<部件>.stp/.dxf/.dwg/.pdf。
- 运行 inventory.py 扫描仓库,按系列/型号统计 .stp/.step/.dxf/.dwg/.pdf 文件数量、格式与大小,并输出 inventory.json。
- 运行 find_plates.py 用 rglob("*.dxf") 并过滤文件名含 plate,列出可用于激光切割/CNC 的板件 DXF。
- 运行 find_model.py "Q8"(或 "K8 Pro"、"M3")按型号名模糊匹配(忽略空格和连字符)列出该型号全部文件。
- 运行 export_csv.py 导出 keychron_inventory.csv,字段含 series/model/component/filename/format/size_kb/relative_path,并用 _infer_component 从文件名推断部件类型(case/plate/encoder/stabilizer/keycap/full-model/shell/knob)。
- 运行 validate_naming.py 用正则 ^[A-Z0-9][A-Za-z0-9\s\-]+-(Case|Plate|Encoder|Stabilizer|Keycap|Full.Model|Shell|Knob|Knob.*)\.(stp|step|dxf|dwg|pdf)$ 校验文件命名规范并列出不合规文件。
- 运行 parse_step_header.py 直接读取 STEP 的 ASCII 头,用正则提取 FILE_DESCRIPTION、FILE_NAME、FILE_SCHEMA,无需 CAD 软件即可看元数据。
- 用 FreeCAD Python API 打开 STEP:sys.path.append("/usr/lib/freecad/lib")(macOS 为 /Applications/FreeCAD.app/Contents/lib),FreeCAD.newDocument 后 Import.insert(filepath, docname)。
- 用 FreeCAD 无头批量把 STEP 转 STL:Part.insert 后取 obj.Shape,mesh.Mesh = Mesh.Mesh(shape.tessellate(tolerance)),再 Mesh.export([mesh], stl_path),tolerance 默认 0.1。
- 用 cadquery 检查几何:pip install cadquery(Apple Silicon 用 conda install -c cadquery cadquery),cq.importers.importStep(filepath) 后读 BoundingBox 的 X/Y/Z 范围及 faces().size()、edges().size()。
- 用 ezdxf 汇总 DXF:pip install ezdxf,ezdxf.readfile 后遍历 modelspace 统计各类实体(entity.dxftype())数量。
- 3D 打印选材:原型外壳和板件用 PLA 或 PETG,需耐热的承力件用 ABS/ASA。
- 板件加工:用 DXF 激光切割 1.2–1.5mm 钢板或铝板,MX 轴开孔典型尺寸 14mm × 14mm。
- 3D 打印时给外壳加 0.1–0.2mm 间隙,因为源文件是 CNC 精确尺寸;模型单位为毫米 1:1,导入切片软件时确认比例(部分工具默认 cm)。
- 打印外壳时内面朝下摆放以减少支撑材料。
- 遇到问题时:STEP 打不开确认软件支持 AP214/AP242;DXF 比例错把单位设为 mm;文件过大用稀疏检出;缺文件查仓库 issue 或 docs/repo-inventory.md;clone 慢用 --filter=blob:none --sparse。
- 查阅仓库内文档:docs/file-format-guide.md、docs/getting-started.md、docs/3d-printing-guide.md、docs/repo-inventory.md、docs/license-faq.md、CONTRIBUTING.md。
- 遵守许可:仅限个人学习、非商业改装、学术教育用途;禁止销售衍生品、盈利性制造、无署名分发衍生作品。
适用边界 · 注意事项
- 需要商用或盈利性制造、销售基于这些文件的衍生产品时(许可明确禁止)。
- 没有安装 FreeCAD/cadquery/ezdxf 等工具时,无法执行脚本化的打开、转换与几何检查流程。
- 目标型号的文件尚未上传到仓库时(部分型号仍在补充,需先查 docs/repo-inventory.md 或 issue)。