iCAx开思工具箱

标题: 再问个关于遍历的问题 [打印本页]

作者: hyccai    时间: 2010-12-8 20:27
标题: 再问个关于遍历的问题
基础语言不好,问个简单的问题
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中
作者: zhangpeijian    时间: 2010-12-8 20:36
顶顶顶顶·不懂·
作者: hust65    时间: 2010-12-8 21:44
你的例子裡用的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的方法來做
作者: hyccai    时间: 2010-12-9 18:11
你的方法只能返回一个feature,而我想返回N个feature
之所以用struct,我是要向FeatVisitAction函数传递三个参数,完整的结构
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature **feature;//用作输出参数
}ExData;
如果要用array的方法,该什么做?
作者: hyccai    时间: 2010-12-9 18:13
我找到了一个函数
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.
*/
作者: hust65    时间: 2010-12-10 09:59
5#  
沒錯,可以用ProE API的ProArray做
另外有空的話你可以研究其他container (可以看做是array的一種)
如 C++ STL裡的vector,MFC的CArray
作者: hyccai    时间: 2010-12-13 08:20
旧的问题材没解决,新的问题又来了
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_);
//这地方不对,不知道怎样递归
作者: hyccai    时间: 2010-12-13 08:24
顺便问下,如果
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature *feature
}ExData;
这样定义,在Action里可不可以将指针指到ExData的Feature成员;
还有怎样给他分配内存
作者: hust65    时间: 2010-12-13 09:16
7#  
(ProAppData)&data_
你說這裡不對是因為compile不過嗎?


作者: hust65    时间: 2010-12-13 09:18
8#  
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature *feature
}ExData;
这样定义,在Action里可不可以将指针指到ExData的Feature成员; ==>可以
还有怎样给他分配内存
一樣,用ProArrayAlloc,找到再用ProArrayObjectAdd
作者: hyccai    时间: 2010-12-13 13:38
编译通过,但是没有把子装配下的零件加进来,
作者: hyccai    时间: 2010-12-13 13:47
hust65 发表于 2010-12-13 09:18
8# hyccai  
typedef struct
{
ProSolid solid;
ProFeattype feattype;
ProFeature *feature
}ExData;
这样定义,在Action里可不可以将指针指到ExData的Feature成员; ==>可以
还有怎样给他分配内存
一樣, ...


能具体吗?用我上面的例子
作者: hyccai    时间: 2010-12-23 18:31
终于搞定了,用vector确实好很多
作者: 528649ssll    时间: 2011-1-13 10:45
大家有没有国标库PTC的,有的越具体越好,就是里面国标的东西基本都有,麻烦发给我啊




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3