Creo开发中的一些数据类型转换

这篇博客介绍了C/C++中将字符串转换为数值类型的函数,包括atoi用于将字符串转为整型,atof转换为浮点数,以及atol转换为长整型。示例代码展示了如何从UI对话框获取double类型输入值,以及如何将char**类型的列表项转换为int和wchar_t*。这些函数在处理用户输入和数据解析时非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. atoi(const char *_Str)        //函数用于把一个字符串转换为一个整型数据
  2. atof(const char *_String)   //把字符串转换成浮点数
  3. atol(const char *_Str)         //把字符串转换成长整型数

atof  ----如用ui Editor做出的对话框  如要获取输入框中的值 double类型:

 ProUIInputpanelValueGet(dialog_Create,"InputPanel2",&Inp_a2);  
 ProWstringToString (C_a2,Inp_a2);     
 //转换为char*
 double a2 = atof(C_a2);          //转换为double型

atoi   --如何把 char**   转换为 int 类型

 //给出列表中当前选定项目的名称   

ProUIListSelectednamesGet(dialog_CeShi,"list",&n_sel,&selection); 

 //行号转化为int类型  以便用 ProUIListLabelsGet()  得到列表的文本

int i=atoi(*selection);     

如何把char**  转为 wchar_t * r  如下:

char **Lable; 

ProName  name;

ProStringToWstring(name,*Lable);

#include <ProToolkit.h> #include <ProSizeConst.h> #include <ProSimprep.h> #include <ProSimprepdata.h> #include <ProSelection.h> #include <ProUtil.h> #include <ProSolid.h> #include <ProAsmcomppath.h> #include <ProMessage.h> #include <TestError.h> ProLine msg_fil21; #define MSG_FIL ProStringToWstring(msg_fil21,"msg_ugsrep.txt") /*====================================================================*\ Function : UserSimpRepCreate Purpose : Create a simple simplified represenation \*====================================================================*/ int UserSimpRepCreate () { ProMdl owner; ProMdlType mdl_type; ProSelection *sels; ProSimprepAction sr_action; ProSimprepitem item; ProSimprep simp_rep; ProSimprepdata *data; ProAsmcomppath comp_path; ProModelitem model_item; ProError status = PRO_TK_NO_ERROR; wchar_t wname[PRO_NAME_SIZE]; char selecting[20]; wchar_t wselecting[20]; int num, i; /*--------------------------------------------------------------------*\ What is going to be selected? \*--------------------------------------------------------------------*/ selecting[0] = '\0'; status = ProMdlCurrentGet(&owner); ERROR_CHECK("UserSimpRepCreate","ProMdlCurrentGet",status); if (status != 0) return (PRO_TK_GENERAL_ERROR); status = ProMdlTypeGet(owner, &mdl_type); ERROR_CHECK("UserSimpRepCreate","ProMdlTypeGet",status); if (status != PRO_TK_NO_ERROR) return (status); else if ( PRO_PART == mdl_type ) strcpy(selecting, "feature"); else if ( PRO_ASSEMBLY == mdl_type ) strcpy(selecting, "part"); else return (PRO_TK_GENERAL_ERROR); ProStringToWstring (wselecting, selecting ); ERROR_CHECK("UserSimpRepCreate","ProStringToWstring",status); ProStringToWstring (wname, "SIMP_EXPLE"); ERROR_CHECK("UserSimpRepCreate","ProStringToWstring",status); /*--------------------------------------------------------------------*\ Initialize the simplified rep to include by default and be permanent. \*--------------------------------------------------------------------*/ status = ProSimprepdataAlloc(wname,PRO_B_FALSE,PRO_SIMPREP_INCLUDE,&data); ERROR_CHECK("UserSimpRepCreate","ProSimprepdataAlloc",status); if (PRO_TK_NO_ERROR == status ) { status = ProMessageDisplay(MSG_FIL, "USER Select a %0w to exclude from the simplified rep", wselecting ); ERROR_CHECK("UserSimpRepCreate","ProMessageDisplay",status); status = ProSelect (selecting, -1, NULL,NULL,NULL,NULL, &sels, &num); ERROR_CHECK("UserSimpRepCreate","ProSelect",status); if (status == PRO_TK_NO_ERROR && num > 0) { /*--------------------------------------------------------------------*\ Reverse the default rule, so in this case the component or feature will be excluded. \*--------------------------------------------------------------------*/ status = ProSimprepActionInit (PRO_SIMPREP_REVERSE,NULL,&sr_action); ERROR_CHECK("UserSimpRepCreate","ProSimprepActionInit",status); if (status == PRO_TK_NO_ERROR) { for (i = 0; i < num; i++) { status = ProSelectionAsmcomppathGet(sels[i], &comp_path); ERROR_CHECK("UserSimpRepCreate", "ProSelectionAsmcomppathGet",status); status = ProSelectionModelitemGet(sels[i], &model_item); ERROR_CHECK("UserSimpRepCreate", "ProSelectionModelitemGet",status); status = ProSimprepdataitemInit( comp_path.comp_id_table, comp_path.table_num, model_item.id, &sr_action, &item); ERROR_CHECK("UserSimpRepCreate","ProSimprepdataitemInit", status); if (status == PRO_TK_NO_ERROR) { status = ProSimprepdataitemAdd (data, &item); ERROR_CHECK("UserSimpRepCreate", "ProSimprepdataitemAdd",status); } } status = ProSimprepCreate ((ProSolid)owner, data, &simp_rep); ERROR_CHECK("UserSimpRepCreate","ProSimprepCreate", status); } if (status == PRO_TK_NO_ERROR) { status = ProSimprepActivate ((ProSolid)owner, &simp_rep); ERROR_CHECK("UserSimpRepCreate","ProSimprepActivate", status); } /*--------------------------------------------------------------------*\ Once activated the a call to ProSolidDisplay() must be made to display the simplified rep. \*--------------------------------------------------------------------*/ status = ProSolidDisplay ((ProSolid)owner); ERROR_CHECK("UserSimpRepCreate","ProSolidDisplay", status); } status = ProSimprepdataFree (&data); ERROR_CHECK("UserSimpRepCreate","ProSimprepdataFree", status); } return status; } #undef MSG_FIL
最新发布
05-12
<think>好的,我现在需要分析用户提供的关于Creo Toolkit中创建简化表示的C代码。首先,用户给出的代码是UserSimpRepCreate函数,其目的是在Creo(Pro/ENGINEER)中创建一个简化的装配表示,排除用户选择的某些部件或特征。 首先,我需要理解代码的结构和各个函数的作用。代码开始包含了一些头文件,比如ProToolkit.h和其他相关的API头文件,这些是Creo Toolkit的标准库,用于访问Creo的功能。然后定义了一些变量,比如ProMdl owner用于获取当前模型,ProSimprepdata*data用于存储简化表示的数据。接下来,代码检查当前模型是零件还是装配体,以确定用户选择的是特征还是部件。如果是零件,选择的是特征;如果是装配体,选择的是部件。这部分通过ProMdlTypeGet实现。 然后,代码使用ProSimprepdataAlloc分配一个新的简化表示数据,设置默认操作为包含(PRO_SIMPREP_INCLUDE),这意味着默认包含所有元素,之后添加的排除项会反转这个默认行为。 用户被提示选择要排除的元素,使用ProMessageDisplay显示消息,ProSelect进行选择。获取用户选择后,代码遍历每个选中的元素,获取其路径和模型项,初始化一个反向动作(PRO_SIMPREP_REVERSE),这样原本的包含默认动作会被反转,选中的元素会被排除。 每个选中的项通过ProSimprepdataitemInit和ProSimprepdataitemAdd添加到简化表示数据中。然后调用ProSimprepCreate创建简化表示,并激活它,最后调用ProSolidDisplay刷新显示。 在分析过程中,我需要确认各个API函数的作用和参数是否正确使用。例如,ProSimprepdataAlloc的参数是否正确,特别是PRO_SIMPREP_INCLUDE作为默认动作,而后续使用PRO_SIMPREP_REVERSE是否正确反转了默认行为。此外,ProSelectionAsmcomppathGet和ProSelectionModelitemGet是否正确获取了选中项的路径和模型信息,这对于正确生成排除项至关重要。可能存在的错误点包括:是否正确处理了装配路径(comp_path),尤其是在多层级装配中是否正确初始化了ProAsmcomppath;是否正确释放了分配的资源,如ProSimprepdataFree是否被正确调用;错误处理是否周全,每个API调用后是否有ERROR_CHECK宏进行错误检查。 用户可能的问题可能涉及如何修改代码以实现不同的默认动作,如何处理更复杂的简化表示规则,或者如何将代码集成到Creo的插件中。此外,可能对API函数的参数和返回值有疑问,或者如何调试在创建简化表示时遇到的常见错误。</think>代码是使用Creo Toolkit(Pro/TOOLKIT)API创建简化表示的示例。主要功能是在当前模型中创建一个新的简化表示,并将用户选择的组件或特征排除在外。以下是代码的核心解释: ```c #include <ProToolkit.h> #include <ProSimprep.h> // ... 其他头文件 int UserSimpRepCreate () { // 1. 获取当前模型 ProMdl owner; ProMdlCurrentGet(&owner); // 2. 确定模型类型(装配体或零件) ProMdlType mdl_type; ProMdlTypeGet(owner, &mdl_type); // 3. 创建简化表示数据结构 ProSimprepdata *data; ProSimprepdataAlloc(L"SIMP_EXPLE", PRO_B_FALSE, PRO_SIMPREP_INCLUDE, &data); // 4. 用户选择要排除的组件/特征 ProSelection *sels; int num; ProSelect("part", -1, NULL, NULL, NULL, NULL, &sels, &num); // 5. 创建反向操作(排除选中的项目) ProSimprepAction sr_action; ProSimprepActionInit(PRO_SIMPREP_REVERSE, NULL, &sr_action); // 6. 遍历所有选中的对象 for (int i=0; i<num; i++) { ProAsmcomppath comp_path; ProSelectionAsmcomppathGet(sels[i], &comp_path); ProModelitem model_item; ProSelectionModelitemGet(sels[i], &model_item); // 7. 将每个选中项添加到简化表示 ProSimprepitem item; ProSimprepdataitemInit(comp_path.comp_id_table, comp_path.table_num, model_item.id, &sr_action, &item); ProSimprepdataitemAdd(data, &item); } // 8. 创建并激活简化表示 ProSimprep simp_rep; ProSimprepCreate((ProSolid)owner, data, &simp_rep); ProSimprepActivate((ProSolid)owner, &simp_rep); // 9. 刷新模型显示 ProSolidDisplay((ProSolid)owner); // 10. 释放资源 ProSimprepdataFree(&data); return status; } ``` 代码关键点解释: 1. `ProSimprepdataAlloc`:创建简化表示数据结构,设置默认包含所有组件 2. `PRO_SIMPREP_REVERSE`:通过反转默认规则实现排除效果 3. `ProSelection*`函数:处理用户交互选择操作 4. `ProSimprepCreate`:最终创建并激活简化表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值