ACIS
1、判断一个Entity是否有效
bool isValidEntity(ENTITY* pEntity)
{
insanity_list *insane_list = NULL;
outcome result = api_check_entity(pEntity, insane_list);
return result.ok();
}
2、获取一个体的boundbox
SPABox getBoundBox(BODY* pBody)
{
SPAbox* pBoxOld = pBody->bound();
SPAbox box = *pBoxOld;
TRANSFORM* tram = pBody->transform();//获取变换矩阵
if(0 != tram) //变换矩阵可能为0
{
SPAtransf transBox = tram->transform(); //施加到boundbox上
box = (*pBoxOld) * transBox;
}
return box;
}
HOOPS
1、设置面为透明
HC_Set_Color("faces = (transmission = (r=0.2 g=0.2 b=0.2))");
2、最后渲染(渲染在最顶层)
HC_Set_Rendering_Options("depth range = ( 0, 0)");
3、让一个面的前后面显示相同的效果
HC_Set_Heuristics("no backplane cull"); //显示后面
HC_Set_Color("face=(r=0.8 g=0.8 b=0.8), back = (r=0.8 g=0.8 b=0.8)"); //相同颜色
HC_Set_Visibility("Lighting=off"); //关掉灯光效果
segment下的用户信息
HC_Set_User_Options
HC_Set_User_Index
可以用来设置segment下的用户自定义信息,HC_Set_User_Options可以保存字符串信息,HC_Set_User_Index 可以保存void*信息,即对象的指针。
HC_Show_One_(Net_)User_Option
HC_Show_One_(Net_)User_Index
获取用户自定义的信息,使用以上两个即可。Net版本当获取不到用户信息时,没有错误提示信息。
如:
long pData = 0;
HC_KEY keyOwner = HC_KShow_Owner_By_Key(key);
HC_Open_Segment_By_Key(keyOwner);
int nResult = HC_Show_One_Net_User_Index(MESHINDEX_GRIDBOX, &pData);
HC_Close_Segment();
if(nResult && pData)
{
....
}
------------------------------------
ACIS和HOOPS 动画
HOOPS可以用来显示ACIS实体,在HOOPS中的Segment中的Geometry可以看作是ACIS数据实体的一种映射。
如我们在ACIS中建立了一个球体api_make_sphere(1.0,body);那么我们就可以在HOOPS中显示这个实体。虽然HOOPS只是操作Geometry,但我在研究运动(HBhvAnimation)时发现,Geometry在运动时,其AICS实体似乎也做相应的运动,这倒是让人费解。
在HOOPS中如何让一个在(1,0,0)的球体绕与过(1,0,0)与(1,1,0)的轴旋转呢?
问题:HBhvInterpolatorAxisRotate只提供了一个SetAxis()函数
思路: 1、使用ACIS的translate_transf()将球体的ACIS数据实体左移(-1,0,0),不能用HOOPS中的Translate_Object()若使用,则模型视图中心就又回到了原来的地方;
2、使用HC_Set_Modelling_Matrix()将球体的模型视图中心移动到点(1,0,0)(模型视图中心默认是在(0,0,0))。那么这时球体也相应的移动到(2,0,0);
3、重新渲染球体HA_ReRender_Entity();
经过这些步骤就可以让该球体绕它的中心轴旋转了。