找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 20316|回复: 13
打印 上一主题 下一主题

[求助] 再问个关于遍历的问题

[复制链接]
跳转到指定楼层
1
发表于 2010-12-8 20:27:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
基础语言不好,问个简单的问题
typedef struct
{
      ProSolid solid;
      ProFeature **feature;
}ExData;
UserfeatVisit(ProSolid solid_,ProFeature **feature_)
{
ExData data;
data.solid=solid_;
ProSolidFeatVisit( data.solid, FeatVisitAction, FeatFilter, &sdata );
//问题1:怎样把data.feature返回给调用函数
//问题2:在FeatVisitAction中,怎样把符合条件的特征添加到data.feature中
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2010-12-8 20:36:04 | 只看该作者
顶顶顶顶·不懂·
3
发表于 2010-12-8 21:44:49 | 只看该作者
你的例子裡用的struct用了 feature** 太複雜了
先來個簡單的
假如:
typedef struct
{
      ProSolid      solid;
      ProFeature feature;
}ExData;

函數裡:
ExData.solid = solid_
...
ProSolidFeatVisit的最後一個參數是 ProAppData 其實就是 (void*)
也就是用ProSolidFeatVisit( data.solid, FeatVisitAction, FeatFilter, &data );

在FeatVisitAction中應該是:
ProError FeatVisitAction(ProFeature* p_feature, ProError status, ProAppData app_data)
{
ExtData* p_data;

p_data = (ExtData*) app_data;
...
//找到了你要的feature後
p_data->feature.owner = p_feature->owner;
p_data->feature.id = p_feature->id;
p_data->feature.type = p_feature->type;
...
}
這樣就可以了

如果你用了ProFeature** 表示你要的feature不確定數目
那就要用array的方法來做
4
发表于 2010-12-9 18:11:00 | 只看该作者
你的方法只能返回一个feature,而我想返回N个feature
之所以用struct,我是要向FeatVisitAction函数传递三个参数,完整的结构
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature **feature;//用作输出参数
}ExData;
如果要用array的方法,该什么做?
5
发表于 2010-12-9 18:13:58 | 只看该作者
我找到了一个函数
Function ProArrayObjectAdd

Description
Adds an object at a specified location to the array, or appends an object to the end of an array.
For example, if you want to insert one integer in an integer array, call the function as follows:

ProArrayObjectAdd (&int_array, 0, 1, (void *)&int_val);
If you want to insert 3 doubles at the second position in an array of doubles, call the function as follows:

ProArrayObjectAdd (&dbl_array, 2, 3, (void *)dbl3_arr);
NOTE:

Because this call may cause the array to be reallocated, you must pass the address of the array.

Synopsis
#include <ProArray.h>
ProError ProArrayObjectAdd (
ProArray* p_array  
/* (In)
The address of the array.
*/
int index  
/* (In)
The position at which to insert the objects in the array. If you specify a value less than 0 (PRO_VALUE_UNUSED), the function appends the objects to the end of the array.
*/
int n_objects  
/* (In)
The number of objects to add to the array.
*/
void* p_object  
/* (In)
The address from which a contiguous set of object data is to be copied into the array.
*/
6
发表于 2010-12-10 09:59:01 | 只看该作者
5# hyccai
沒錯,可以用ProE API的ProArray做
另外有空的話你可以研究其他container (可以看做是array的一種)
如 C++ STL裡的vector,MFC的CArray
7
发表于 2010-12-13 08:20:07 | 只看该作者
旧的问题材没解决,新的问题又来了
ProFeature *feature;
ProSolidFeatVisit(solid,Action,filter,&feature_);
//Action
ProArray *p_array;
p_array = (ProArray*)((ProFeature**)data_)[0];
ProFeattype p_type;
ProFeatureTypeGet(p_feat,&p_type);
ProMdl model;
ProMdlType mdltype;
status=ProAsmcompMdlGet(p_feat, &model);
status = ProMdlTypeGet (model, &mdltype);
if(mdltype!=PRO_MDL_ASSEMBLY)
       status=ProArrayObjectAdd(p_array,PRO_VALUE_UNUSED,1,p_feat);
else
      status=ProSolidFeatVisit((ProSolid)model,UserAsmFeatVisitAction,UserAsmcompGetFilter,(ProAppData)&data_);
//这地方不对,不知道怎样递归
8
发表于 2010-12-13 08:24:59 | 只看该作者
顺便问下,如果
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature *feature
}ExData;
这样定义,在Action里可不可以将指针指到ExData的Feature成员;
还有怎样给他分配内存
9
发表于 2010-12-13 09:16:04 | 只看该作者
7# hyccai
(ProAppData)&data_
你說這裡不對是因為compile不過嗎?

10
发表于 2010-12-13 09:18:58 | 只看该作者
8# hyccai
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature *feature
}ExData;
这样定义,在Action里可不可以将指针指到ExData的Feature成员; ==>可以
还有怎样给他分配内存
一樣,用ProArrayAlloc,找到再用ProArrayObjectAdd
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-27 01:15 , Processed in 0.033580 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表