命令行工具使用

第11章 命令行工具使用

11.1 命令行工具概述

11.1.1 solvespace-cli简介

SolveSpace提供命令行工具 solvespace-cli,用于批量处理和自动化操作。

主要功能

  • 批量导出各种格式
  • 自动化测试
  • 持续集成
  • 脚本化工作流

11.1.2 构建命令行工具

# 仅构建CLI工具
mkdir build
cd build
cmake .. -DENABLE_GUI=OFF -DENABLE_CLI=ON
make

# 生成文件: build/bin/solvespace-cli

或同时构建GUI和CLI

cmake .. -DENABLE_GUI=ON -DENABLE_CLI=ON
make

11.1.3 安装位置

Linux

  • 系统安装: /usr/bin/solvespace-cli
  • 本地构建: build/bin/solvespace-cli

Windows

  • 安装目录: C:\Program Files\SolveSpace\solvespace-cli.exe

macOS

  • 应用包内: SolveSpace.app/Contents/MacOS/solvespace-cli

11.2 基本用法

11.2.1 命令格式

solvespace-cli <命令> [选项] <输入文件> [输出文件]

11.2.2 帮助信息

# 显示帮助
solvespace-cli --help

# 显示版本
solvespace-cli --version

11.2.3 通用选项

--chord-tol=<值>    设置弦公差 (mm)
--verbose           详细输出
--quiet             静默模式

11.3 导出命令

11.3.1 导出三角网格

导出STL

solvespace-cli export-mesh input.slvs output.stl

# 指定弦公差
solvespace-cli export-mesh --chord-tol=0.01 input.slvs output.stl

导出OBJ

solvespace-cli export-mesh input.slvs output.obj

11.3.2 导出精确几何

导出STEP

solvespace-cli export-step input.slvs output.step

11.3.3 导出2D视图

导出PDF

solvespace-cli export-view input.slvs output.pdf

指定视图方向

# XY平面视图(俯视)
solvespace-cli export-view --view=xy input.slvs output.pdf

# YZ平面视图(右视)
solvespace-cli export-view --view=yz input.slvs output.pdf

# ZX平面视图(前视)
solvespace-cli export-view --view=zx input.slvs output.pdf

导出SVG

solvespace-cli export-view input.slvs output.svg

导出DXF

solvespace-cli export-view input.slvs output.dxf

11.3.4 导出剖面

solvespace-cli export-section input.slvs output.dxf

11.3.5 导出缩略图

# 导出PNG图像
solvespace-cli thumbnail input.slvs output.png

# 指定尺寸
solvespace-cli thumbnail --size=512 input.slvs output.png

# 指定视图
solvespace-cli thumbnail --view=iso input.slvs output.png

11.4 分析命令

11.4.1 检查文件

# 检查文件完整性
solvespace-cli check input.slvs

输出示例:

文件: input.slvs
组数: 5
参数: 127
实体: 45
约束: 32
状态: OK
自由度: 0

11.4.2 测量信息

# 显示测量信息
solvespace-cli measure input.slvs

输出:

体积: 12500.00 mm³
表面积: 3400.00 mm²
边界框: (0, 0, 0) 到 (50, 50, 10)

11.5 批处理脚本

11.5.1 批量导出STL

Bash脚本

#!/bin/bash
# export_all_stl.sh

INPUT_DIR="./designs"
OUTPUT_DIR="./exports"

mkdir -p "$OUTPUT_DIR"

for file in "$INPUT_DIR"/*.slvs; do
    name=$(basename "$file" .slvs)
    echo "导出: $name"
    solvespace-cli export-mesh "$file" "$OUTPUT_DIR/${name}.stl"
done

echo "完成!"

Windows批处理

@echo off
REM export_all_stl.bat

setlocal enabledelayedexpansion

set INPUT_DIR=.\designs
set OUTPUT_DIR=.\exports

if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"

for %%f in (%INPUT_DIR%\*.slvs) do (
    set name=%%~nf
    echo 导出: !name!
    solvespace-cli export-mesh "%%f" "%OUTPUT_DIR%\!name!.stl"
)

echo 完成!

11.5.2 批量生成缩略图

#!/bin/bash
# generate_thumbnails.sh

for file in *.slvs; do
    name=$(basename "$file" .slvs)
    solvespace-cli thumbnail --size=256 "$file" "${name}_thumb.png"
done

11.5.3 多格式导出

#!/bin/bash
# export_multi_format.sh

INPUT="$1"
NAME=$(basename "$INPUT" .slvs)

echo "导出 $NAME 为多种格式..."

# 3D格式
solvespace-cli export-mesh "$INPUT" "${NAME}.stl"
solvespace-cli export-step "$INPUT" "${NAME}.step"
solvespace-cli export-mesh "$INPUT" "${NAME}.obj"

# 2D视图
solvespace-cli export-view --view=xy "$INPUT" "${NAME}_top.pdf"
solvespace-cli export-view --view=zx "$INPUT" "${NAME}_front.pdf"
solvespace-cli export-view --view=yz "$INPUT" "${NAME}_right.pdf"

# 缩略图
solvespace-cli thumbnail --view=iso "$INPUT" "${NAME}_preview.png"

echo "完成!"

11.5.4 条件导出

#!/bin/bash
# conditional_export.sh

for file in *.slvs; do
    # 检查文件状态
    result=$(solvespace-cli check "$file" 2>&1)
    
    if echo "$result" | grep -q "状态: OK"; then
        echo "OK: $file - 导出中"
        name=$(basename "$file" .slvs)
        solvespace-cli export-mesh "$file" "${name}.stl"
    else
        echo "错误: $file - 跳过"
    fi
done

11.6 持续集成

11.6.1 GitHub Actions示例

# .github/workflows/export-models.yml
name: Export CAD Models

on:
  push:
    paths:
      - 'designs/*.slvs'

jobs:
  export:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install SolveSpace
        run: |
          sudo snap install solvespace
      
      - name: Export Models
        run: |
          mkdir -p exports
          for file in designs/*.slvs; do
            name=$(basename "$file" .slvs)
            solvespace-cli export-mesh "$file" "exports/${name}.stl"
          done
      
      - name: Upload Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: stl-exports
          path: exports/*.stl

11.6.2 GitLab CI示例

# .gitlab-ci.yml
stages:
  - export

export-models:
  stage: export
  image: ubuntu:latest
  before_script:
    - apt-get update && apt-get install -y snapd
    - snap install solvespace
  script:
    - mkdir -p exports
    - |
      for file in designs/*.slvs; do
        name=$(basename "$file" .slvs)
        solvespace-cli export-mesh "$file" "exports/${name}.stl"
      done
  artifacts:
    paths:
      - exports/

11.6.3 构建验证

#!/bin/bash
# verify_designs.sh
# 用于CI中验证设计文件

exit_code=0

for file in *.slvs; do
    echo "检查: $file"
    result=$(solvespace-cli check "$file" 2>&1)
    
    if echo "$result" | grep -q "状态: OK"; then
        echo "  ✓ 通过"
    else
        echo "  ✗ 失败"
        echo "$result"
        exit_code=1
    fi
done

exit $exit_code

11.7 高级用法

11.7.1 管道处理

# 列出所有设计文件的信息
find . -name "*.slvs" -exec solvespace-cli check {} \;

# 筛选有问题的文件
for f in *.slvs; do
    solvespace-cli check "$f" 2>&1 | grep -q "错误" && echo "$f"
done

11.7.2 参数化导出

虽然CLI不直接支持修改参数,但可以通过脚本预处理:

#!/bin/bash
# 使用sed修改slvs文件中的参数值(需谨慎)

# 注意:直接修改slvs文件需要理解其格式
# 更安全的方法是使用Python绑定

# 示例:仅用于简单的数值替换
# sed 's/val=50\.000000/val=60.000000/g' input.slvs > modified.slvs
# solvespace-cli export-mesh modified.slvs output.stl

11.7.3 并行处理

#!/bin/bash
# parallel_export.sh - 使用GNU parallel进行并行导出

# 安装: apt install parallel

find . -name "*.slvs" | parallel -j4 '
    name=$(basename {} .slvs)
    solvespace-cli export-mesh {} "{.}.stl"
    echo "完成: $name"
'

11.7.4 日志记录

#!/bin/bash
# export_with_log.sh

LOG_FILE="export.log"
echo "导出开始: $(date)" > "$LOG_FILE"

for file in *.slvs; do
    name=$(basename "$file" .slvs)
    echo "处理: $name" >> "$LOG_FILE"
    
    start_time=$(date +%s)
    result=$(solvespace-cli export-mesh "$file" "${name}.stl" 2>&1)
    end_time=$(date +%s)
    
    duration=$((end_time - start_time))
    echo "  耗时: ${duration}秒" >> "$LOG_FILE"
    
    if [ $? -eq 0 ]; then
        echo "  状态: 成功" >> "$LOG_FILE"
    else
        echo "  状态: 失败" >> "$LOG_FILE"
        echo "  错误: $result" >> "$LOG_FILE"
    fi
done

echo "导出完成: $(date)" >> "$LOG_FILE"

11.8 常见问题

11.8.1 命令找不到

问题: solvespace-cli: command not found

解决:

# 检查安装路径
which solvespace-cli

# 如果使用snap安装
snap run solvespace-cli

# 或添加到PATH
export PATH=$PATH:/snap/bin

11.8.2 导出失败

问题: 导出返回错误

诊断:

# 使用详细模式
solvespace-cli --verbose export-mesh input.slvs output.stl

# 先检查文件
solvespace-cli check input.slvs

11.8.3 权限问题

问题: 无法写入输出文件

解决:

# 检查目录权限
ls -la output_dir/

# 确保目录存在
mkdir -p output_dir/

# 检查磁盘空间
df -h

11.8.4 内存不足

问题: 大文件导出时内存不足

解决:

# 增加弦公差减少多边形数量
solvespace-cli export-mesh --chord-tol=0.5 large_file.slvs output.stl

# 或分批处理

11.9 命令参考

11.9.1 完整命令列表

solvespace-cli <命令> [选项] <参数>

命令:
  export-mesh     导出三角网格 (STL/OBJ)
  export-step     导出STEP格式
  export-view     导出2D视图 (PDF/SVG/DXF)
  export-section  导出剖面
  thumbnail       生成缩略图
  check           检查文件
  measure         测量信息

选项:
  --chord-tol=<mm>   弦公差
  --view=<方向>      视图方向 (xy/yz/zx/iso)
  --size=<像素>      图像尺寸
  --verbose          详细输出
  --quiet            静默模式
  --help             显示帮助
  --version          显示版本

11.10 总结

本章介绍了SolveSpace命令行工具的使用:

  1. 概述: 工具功能、构建、安装
  2. 基本用法: 命令格式、帮助、选项
  3. 导出命令: 网格、精确几何、2D视图、缩略图
  4. 分析命令: 检查、测量
  5. 批处理: Shell脚本、多格式导出
  6. 持续集成: GitHub Actions、GitLab CI
  7. 高级用法: 管道、并行、日志
  8. 问题排查: 常见问题解决

下一章将介绍C语言库API的详细使用。


导航


posted @ 2026-01-10 13:15  我才是银古  阅读(29)  评论(0)    收藏  举报