feat: 集成Creo几何优化分析薄壳化API并简化参数设置

- 在creoApi服务中添加startShrinkwrapShell方法,调用/api/creo/shrinkwrap/shell接口
- 更新几何优化默认参数配置,符合用户要求的默认值
- 修改参数设置页面集成API调用,支持异步执行薄壳化分析
- 移除输出文件路径设置UI,简化用户操作流程
- 清理无用的文件名生成逻辑和相关常量

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sladro 2025-09-18 15:28:15 +08:00
parent 088941747a
commit 4aedb9b3be
3 changed files with 49 additions and 43 deletions

View File

@ -27,11 +27,6 @@
<input type="text" class="param-input" v-model="parameters.project_name" readonly>
</div>
<div class="param-group">
<label class="param-label">输出文件路径</label>
<div class="param-description">优化后模型的保存路径和文件名自动生成不可修改</div>
<input type="text" class="param-input" v-model="parameters.output_file_path" readonly>
</div>
</div>
</div>
@ -212,8 +207,9 @@
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ref } from 'vue'
import { getGeometryOptimizationDefaults } from '@/config/cad.js'
import { creoApi } from '@/services/creoApi.js'
// Emits
const emit = defineEmits(['close', 'start-optimization'])
@ -240,7 +236,7 @@ const parameters = ref({
fill_holes: configDefaults.FILL_HOLES,
ignore_small_surfaces: configDefaults.IGNORE_SMALL_SURFACES,
small_surface_percentage: configDefaults.SMALL_SURFACE_PERCENTAGE,
output_file_path: '',
output_file_path: '自定义名字',
output_type: configDefaults.OUTPUT_TYPE,
ignore_quilts: configDefaults.IGNORE_QUILTS,
ignore_skeleton: configDefaults.IGNORE_SKELETON,
@ -257,39 +253,33 @@ const selectMethod = (method) => {
parameters.value.method = method
}
//
const FILE_NAME_CONSTANTS = {
DEFAULT_PROJECT_NAME: 'project',
NAME_LENGTH: 3,
PAD_LENGTH: 2,
PAD_CHAR: '0',
FILE_EXTENSION: '.prt'
}
//
function generateOutputFileName() {
const projectName = parameters.value?.project_name || FILE_NAME_CONSTANTS.DEFAULT_PROJECT_NAME
const baseName = projectName.replace(/\.[^/.]+$/, "")
const simpleName = baseName.replace(/[\s\-_]/g, '').substring(0, FILE_NAME_CONSTANTS.NAME_LENGTH)
const now = new Date()
const month = String(now.getMonth() + 1).padStart(FILE_NAME_CONSTANTS.PAD_LENGTH, FILE_NAME_CONSTANTS.PAD_CHAR)
const day = String(now.getDate()).padStart(FILE_NAME_CONSTANTS.PAD_LENGTH, FILE_NAME_CONSTANTS.PAD_CHAR)
const hour = String(now.getHours()).padStart(FILE_NAME_CONSTANTS.PAD_LENGTH, FILE_NAME_CONSTANTS.PAD_CHAR)
const minute = String(now.getMinutes()).padStart(FILE_NAME_CONSTANTS.PAD_LENGTH, FILE_NAME_CONSTANTS.PAD_CHAR)
const timestamp = `${month}${day}${hour}${minute}`
const fileName = `${simpleName}${timestamp}`
return `${fileName}${FILE_NAME_CONSTANTS.FILE_EXTENSION}`
}
//
const startOptimization = () => {
emit('start-optimization', { ...parameters.value })
const startOptimization = async () => {
// API使""project_name
const apiParams = {
software_type: parameters.value.software_type,
project_name: "通过接口获取",
method: parameters.value.method,
quality: parameters.value.quality,
chord_height: parameters.value.chord_height,
fill_holes: parameters.value.fill_holes,
ignore_small_surfaces: parameters.value.ignore_small_surfaces,
small_surface_percentage: parameters.value.small_surface_percentage,
output_file_path: parameters.value.output_file_path,
output_type: parameters.value.output_type,
ignore_quilts: parameters.value.ignore_quilts,
ignore_skeleton: parameters.value.ignore_skeleton,
assign_mass_properties: parameters.value.assign_mass_properties
}
// API
const result = await creoApi.startShrinkwrapShell(apiParams)
//
emit('start-optimization', { result, parameters: { ...parameters.value } })
}
//
onMounted(() => {
parameters.value.output_file_path = generateOutputFileName()
})
</script>
<style scoped>

View File

@ -49,14 +49,14 @@ const API_CONFIG = {
GEOMETRY_OPTIMIZATION: {
SOFTWARE_TYPE: "creo",
METHOD: "outer_shell",
QUALITY: 8,
CHORD_HEIGHT: 0.1,
FILL_HOLES: true,
IGNORE_SMALL_SURFACES: true,
SMALL_SURFACE_PERCENTAGE: 0.5,
QUALITY: 5,
CHORD_HEIGHT: 0.15,
FILL_HOLES: false,
IGNORE_SMALL_SURFACES: false,
SMALL_SURFACE_PERCENTAGE: 0.0,
OUTPUT_TYPE: "solid_surface",
IGNORE_QUILTS: true,
IGNORE_SKELETON: true,
IGNORE_QUILTS: false,
IGNORE_SKELETON: false,
ASSIGN_MASS_PROPERTIES: false
}
}

View File

@ -191,6 +191,22 @@ class CreoApiService {
})
}
/**
* 执行薄壳化分析 (Shrinkwrap Shell Analysis)
* @param {Object} params - 分析参数
* @returns {Promise<{success: boolean, data?: any, error?: string}>}
*/
async startShrinkwrapShell(params) {
const url = buildApiUrl(this.softwareName, 'optimization')
return await apiClient.post(url, params, {
operationContext: {
software: 'Creo',
operation: '薄壳化分析'
}
})
}
/**
* 导出模型到指定格式
* @param {string} formatType - 导出格式类型 (step, iges, stl, pdf, dwg)