② 点击确定、预览等按钮都可达到显示立方体的功能,那么就需要用消息来传递,当
视图窗口接收到了对话框发来的消息,即可在窗口显示图形。
下面,首先要在CSolodHoopsView中添加自定义的消息处理函数 在头文件中添加自定义的消息ID
在CSolodHoopsView添加消息处理函数
自定义消息处理函数OnFlifang1的代码,实际上就是调用Onlifang()函数进行长方体的构造。
实现对话框在点击确定和预览时都发送WM_MYMESG消息,能够让视图窗口接收到。在它们的代码中添加如下代码即可发送消息
点击预览和确定按钮代码有所区别,点击预览对话框不关闭,具体代码如下:
备注:熟悉MFC中自定义消息传递的用法(具体内容查资料)
③ 实现预览时颜色和点击确定颜色不相同。
设置预览时,实现的颜色为黄色,实现时为绿色,调用 api_rh_set_entity_rgb()对实体进行着色,该函数的用法如下:
api_rh_set_entity_rgb((ENTITY*&)body,rgb_color(r,g,b)); //其中,api_gi_set_entity_rgb是着色函数,(ENTITY*&)body指定实体, body,rgb_color (r,g,b)进行着色。 达到的效果如下
点击预览
点击确定
5 视图中显示多个立方体,预览颜色和非预览颜色同时出现 ,如下图
解决该问题时,将实体类定义为全局变量,前面我们都是用的局部变量,定义后,每次显示时将原实体取消显示即可达到效果,添加代码
附录:(以下内容仅供参考)
ACIS的API相关函数:
api_make_... 坐标原点构建 api_solid_... 给定位置构建 //立方体
api_make_cuboid(length(x),width(y),height(z),BODY)
api_solid_block(SPAposition(左上角顶点坐标), SPAposition(右下角顶点坐标),BODY) //球体
api_make_sphere(半径,BODY)
api_solid_sphere(SPAposition(圆心坐标),半径,BODY) //圆环体
api_make_torus(外环半径,环宽,BODY)
api_solid_torus(SPAposition(环心坐标), 外环半径,环宽,BODY) //圆锥体
api_make_frustum(height(z), length(x),width(y),顶部半径,BODY)
api_solid_cylinder_cone(SPAposition(顶部圆心坐标), SPAposition(底部圆心坐标),m*M_PI(底部长轴),n*M_PI(底部短轴),0(顶部半径),NULL,BODY) //圆柱体
api_make_frustum(height(z), length(x),width(y),顶部半径,BODY)
api_solid_cylinder_cone(SPAposition(顶部圆心坐标), SPAposition(底部圆心坐标),m*M_PI(底部长轴),n*M_PI(底部短轴),0(顶部半径),NULL,BODY) //棱柱
api_make_prism(height(z), length(x),width(y),棱数,BODY) //棱锥
api_make_pyramid(height(z),length(x),width(y),顶部半径,棱数,BODY)
outcome api_ent_area ( ENTITY * ent, double req_rel_accy, double & area, double & est_rel_accy_achieved, AcisOptions * ao = NULL ) //计算面积
api_set_file_info 设置文件头部信息,生成模型文件时这些信息会被自动加入到文件的头部 api_save_entity_list 将实体的ASCII信息写入文件
api_restore_entity_list 将磁盘上的SAT文件读入到内存中
ENTITY_LIST类的成员函数
int add(ENTITY*) 将实体加入列表
int count() 返回列表中实体的个数,包括被删除的实体
int iteration_count() 返回列表中实体的个数,不包括被删除的实体 int lookup(ENTITY*) 在列表中查找实体 int remove(ENTITY*) 在列表中删除实体
ENTITY *operator[](int) 返回给定位置的实体指针 void init() 准备进行列表遍历
ENTITY* next() 依次返回列表中的实体
api_apply_transf(BODY,transf) // 旋转实体
api_unite(body1,body2) //实体求并 结果保存在第二个变量中,第一个变量所表示的实体将被系统删除