ACIS基础培训课程安排

上传人:xue****ang 文档编号:252939389 上传时间:2024-11-26 格式:PPT 页数:33 大小:312.99KB
返回 下载 相关 举报
ACIS基础培训课程安排_第1页
第1页 / 共33页
ACIS基础培训课程安排_第2页
第2页 / 共33页
ACIS基础培训课程安排_第3页
第3页 / 共33页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,ACIS基础培训课程安排,属性,3,ACIS MFC,3,历史机制,3,错误处理,3,HOOPS介绍,3,MFC环境和ACIS,3,属性(Attribute),所有从ENTITY派生的类都可以拥有属性,属性是在属性类ATTRIB中实现的,属性可以保存,两个主要目的,为了实现功能所做的记号,由SPATIAL开发和实现,由开发者定义实现,作为属性信息,应用程序的最终用户将会用到,由开发者定义,应用程序的最终用户使用,实体和属性之间的关系,ENTITY,ATTRIB,ATTRIB,ATTRIB,ATTRIB,NULL,NULL,ATTRIB类,ENTITY,ATTRIB,Organization Attribute Class,Application Specific Attribute Class,从,ENTITY,类派生,是一个抽象类,组织实行(,Organization Attribute,)类从,ATTRIB,类派生,应用程序特定属性(,Application Specific Attribute,)类从组织属性类派生,SPATIAL定义的属性,每个组件有各自的属性实现特定的功能,如混合(blend)的半径和颜色,普通属性(Gentric Attribute),普通属性类来存储一个字符串或一个字符串及其相关联的一个属性值(value)ATTRIB_GEN_NAME,属性值可以是integer, real, string, position, vector, pointer,指向ENTITY的指针从ATTRIB_GEN_NAME派生,缩短了用户开发的时间,良好的兼容性,用户自定义属性,定义组织属性类,用户有必要使用”sentinel”,SPATIAL的技术支持,应用程序特定属性类应该从组织属性类派生,其它子类可以从应用程序特定属性类中派生,开发者可以定义属性中包含的数据,因为ATTRIB类是从ENTITY类派生的,因此用户在定义自己的属性时,掌握保存/恢复机制是很有帮助的,尤其是用户自定义的属性中包含ENTITY*时,以颜色属性为例,在ACIS中颜色是通过属性来实现的,ENTITY,ATTRIB,ATTRIB_ST,ATTRIB_RGB,组织属性类,应用程序特定属性类,ATTRIB类的重要方法,virtual void ATTRIB:split_owner(ENTITY*),virtual void ATTRIB:merge_owner(ENTITY*, lotical),virtual void ATTRIB:trans_owner(SPAtransf const&),ACIS MFC,ACIS MFC,从ACIS R11开始,完全放弃使用ACIS MFC,原因是ACIS的一些显示组件(如GL和GI)已经完全放弃使用,ACIS HOOPS AppWizard,ACIS HOOPS AppWizard,提供类似ACIS MFC的基本功能,由SPATIAL JAPAN开发和维护,ACIS HOOPS AppWizard主要特点,使用HOOPS,不用学习HOOPS就可以使用HOOPS基本的图形功能,如果用户仅仅需要用到一些基本的图形功能,那么就不需要直接用HOOPS来编程,也就是说使用这个AppWizard就已经足够了,使得开发者在开发地初级间断可以将经理集中在ACIS上,如果需要的话,开发者可以直接使用HOOPS来扩展应用程序的图形显示能力,提供一些示例源代码,可以学习如何使用ACIS和InterOp,和ACIS MFC结构类似,利用原有的AICS MFC用户顺利地使用GI/GL组件过度到使用HOOPS来显示,快速搭建测试环境,历史机制(History mechanism),历史机制是什么?,可以实现撤销/恢复(Undo/Redo),Undo向后滚动(roll back),Redo向前滚动(roll forward),四个主要的类,BULLETIN,BULLETIN_BOARD,DELTA_STATE,HISTORY_STREAM,最常用的API函数,api_part_start_state(),api_part_note_state(),历史的基本类,DELTA_STATE,是实现Undo/Redo的一个单元,BULLETIN_BOARD,基本上调用一个API函数都会创建一个,BULLETIN,记录ENTITY改变前和改变后的状态,DS,DS,BB,BB,BB,B,B,B,B,B,B,B,B,B,BB,BB,BB,B,B,B,B,B,B,B,B,B,练习:历史机制,目标是通过使用ACIS HOOPS AppWizard增加对历史机制的理解,使用,ACIS HOOPS AppWizard创建一个新的工程“History”,作为示例AppWizard重一斤个实现Solid Block的创建,编译和构建工程,将实现函数“api_make_gear”的文件复制到该工程文件夹,并加入到该工程中,在菜单中加入“Gear”,参考Solid Block的实现,实现创建齿轮的命令,练习:历史机制,续上页,注释掉”API_BEGIN”和“API_END”宏,并哼名一个outcome类型的变量result,使用“api_solid_cylinder_cone”函数创建一个半径为3,高度为20的圆柱,从gear body中湔区圆柱,注释掉”check_outcome(result);”行,int depth = 0;,api_part_start_state(depth);,/API_BEGIN,outcome result = api_make_gear(pBody);/check_outcome(result);,/创建圆柱/从齿轮中减去该圆柱if(result.ok() m_pAHDoc-AddEntity(pBody);,/API_END,api_part_note_state(result,depth);,练习:历史机制,int depth = 0;,api_part_start_state(depth);,outcome result = api_make_gear(pBody);BODY* pCyl;,SPAposition p3(0,0,-10);,SPAposition p4(0,0,10);,result = api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);,result = api_subtract(pCyl,pBody);,if(result.ok() m_pAHDoc-AddEntity(pBody);,api_part_note_state(result,depth);,DS,BB,BB,BB,B,B,B,B,B,B,B,B,B,练习:历史机制,修改UNDO/REDO,创建菜单“Gear2”并复制Gear实现的代码,按下面的程序进行相应的修改,int depth = 0;,api_part_start_state(depth);,outcome result = api_make_gear(pBody);if(result.ok() m_pAHDoc-AddEntity(pBody);,api_part_note_state(result,depth);,api_part_start_state(depth);,BODY* pCyl;,SPAposition p3(0,0,-10);,SPAposition p4(0,0,10);,result = api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);if(result.ok() m_pAHDoc-AddEntity(pCyl);,api_part_note_state(result,depth);,api_part_start_state(depth);,result = api_subtract(pCyl,pBody);,if(result.ok() m_pAHDoc-UpdateEntity(pBody);,api_part_note_state(result,depth);,练习:历史机制,int depth = 0;,api_part_start_state(depth);,outcome result = api_make_gear(pBody);if(result.ok() m_pAHDoc-AddEntity(pBody);,api_part_note_state(result,depth);,api_part_start_state(depth);,BODY* pCyl;,SPAposition p3(0,0,-10);,SPAposition p4(0,0,10);,result = api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);if(result.ok() m_pAHDoc-AddEntity(pCyl);,api_part_note_state(result,depth);,api_part_start_state(depth);,result = api_subtract(pCyl,pBody);,if(result.ok() m_pAHDoc-UpdateEntity(pBody);,api_part_note_state(result,depth);,DS,BB,B,B,B,DS,DS,BB,B,B,B,BB,B,B,B,BULLETIN类,存储ENTITY类对象在创建、删除或修改时的信息,拥有指向新的ENTITY和原来ENTITY的指针,DS,BB,B,B,B,old_entity_ptr(),new_entity_ptr(),BULLETIN,ENTITY,ENTITY,BULLETIN,next(),previous(),BULLETIN类,old_entity_ptr(),new_entity_ptr(),BULLETIN,ENTITY,old_entity_ptr(),new_entity_ptr(),BULLETIN,NULL,ENTITY,ENTITY,old_entity_ptr(),new_entity_ptr(),BULLETIN,ENTITY,新创建的ENTITY,改变之后的ENTITY,修改之前的ENTITY拷贝,删除的ENTITY,Change Bulletin,Delete Bulletin,Create Bulletin,BULLETIN_BOARD类,一般来说一个API创建一个BULLETIN_BOARD,API函数中的API_BEGIN, API_END宏对创建一个BULLETIN_BOARD,通过API函数中的返回值outcome 可以得到指向相应的BULLETIN_BOARD的指针,包含一个或多个BULLETIN,DS,BB,B,B,B,end_bulletin(),start_bulletin(),BULLETIN_BOARD,BULLETIN_BOARD,next(),BULLETIN,BULLETIN,BULLETIN,DELTA_STATE类,每个UNDO/REDO操作需要有一个DELTA_STATE,每个DELTA_STATE可以包含一个或多个BULLETIN_BOARD,DS,BB,B,B,B,next(),prev(),DELTA_STATE,DELTA_STATE,BULLETIN,BULLETIN,BULLETIN,partner(),bb(),DELTA_STATE类,线性历史(Linear history),DS,DS,DS,DS,分支历史(Branch history),DS,DS,DS,DS,DS,DS,DS,DS,DS,HISTORY_STREAM类,管理DELTA_STATE的实用类,缺省情况下,系统启动时定义了一个HISTORY_STREAM,api_get_default_history(),开发者可以设置roll back (UNDO) 的最大次数,HISTORY_STREAM:set_max_states_to_keep(),零件(PART)类有一个指向HISTORY_STREAM的指针,如果使用到PART类,开发者可以使用一些有用的API函数,api_part_start_state()标志着一个DS的开始,api_part_note_state()标志着一个DS的结束,api_part_roll_n_states()UNDO或REDO,api_part_name_state()state命名,api_part_rooo_to_state()移动到指定名称的state中,PART:history_stream()得到HISTORY_STREAM,HISTORY_STREAM类,HISTORY_STREAM,get_root_ds(),get_active_ds(),get_current_ds(),DELTA_STATE,DELTA_STATE,DELTA_STATE,DELTA_STATE,根DS,当前活动DS,创建DS,API_BEGIN , API_END宏,int depth = 0;,api_part_start_state(depth);,result = api_make_gear();,result = api_solid_cylinder_cone();,result = api_subtract();,api_part_note_state(result,depth);,DS,BB,B,B,B,DS,DS,BB,B,B,B,BB,B,B,B,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN , API_END宏,int depth = 0;,api_part_start_state(depth);,result = api_make_gear();,result = api_solid_cylinder_cone();,result = api_subtract();,api_part_note_state(result,depth);,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN,API_END,DS,BB,B,B,B,B,B,B,API_BEGIN , API_END宏,int depth = 0;,api_part_start_state(depth);,result = api_make_gear();,result = api_solid_cylinder_cone();,result = api_subtract();,api_part_note_state(result,depth);,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN,API_END,API_BEGIN,API_END,API_NOP_BEGIN,API_NOP_END,DS,BB,B,B,B,B,B,B,BB,B,B,B,B,API_NOP_BEGIN和API_NOP_END的效果和取消操作的效果一致,对应的两个宏之间的所有创建、修改和删除是无效的,因此用户需要注意在该宏对之内的ENTITY是否有效,出错处理(error handling),可以知道,API,函数调用的结果,outcome:error_number,(),outcome:ok,(),check_outcome,(),函数,为了创建稳定的,API,这是必要的,调用系统错误,出错处理宏,EXCEPTION_BEGIN, EXCEPTION_TRY, EXCEPTION_CATCH, EXCEPTION_END,API_BEGIN, API_END,出错处理(error handling),明确地指出错误,并跟踪该过程中发生了些什么,将,api_solid_cylinder_cone,(),函数中的半径参数设置为,0,首先注释掉,API_BEGIN,和,API_END,运行程序,尝试,Undo/Redo,操作,int depth = 0;,api_part_start_state(depth);,/API_BEGIN,outcome result = api_make_gear(pBody);,BODY* pCyl;,SPAposition p3(0,0,-10);,SPAposition p4(0,0,10);,result = api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);,result = api_subtract(pCyl,pBody);,if(result.ok() m_pAHDoc-UpdateEntity(pBody);,/API_END,api_part_note_state(result,depth);,出错处理(error handling),明确地指出错误,并跟踪该过程中发生了些什么,(,续上页,),取消注释,API_BEGIN,和,API_END,移去,api_make_gear,(),前的“,outcome”,在图示位置在每个,api,函数调用之后添加“,check_outcome(result,);”,行,运行程序,尝试,Undo/Redo,操作,int depth = 0;,api_part_start_state(depth);,API_BEGIN,result = api_make_gear(pBody);,check_outcome(result);,BODY* pCyl;,SPAposition p3(0,0,-10);,SPAposition p4(0,0,10);,result = api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);,check_outcome(result);,result = api_subtract(pCyl,pBody);,check_outcome(result);,if(result.ok() m_pAHDoc-UpdateEntity(pBody);,API_END,api_part_note_state(result,depth);,出错处理宏,double *dbls = new doublen;/Temporary memory,delete dbls;,EXCEPTION_BEGIN,ENTITY_LIST list;,double *dbls = NULL;,EXCEPTION_TRY,EDGE *ent = new EDGE(),list.add(ent);,dbls = new doublen;,EXCEPTION_CATCH(TRUE),delete dbls;,EXCEPTION_END,HOOPS演示,模型精细度级别(,Level Of Detail,),支持不同的图形驱动接口,OpenGL/Windows GDI/,切平面,(Cutting Plane),动画,Animation,碰撞检查,Collision detection,全部结束,仅供参考学习,Thanks,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!