ACIS基础培训课程课件_第1页
ACIS基础培训课程课件_第2页
ACIS基础培训课程课件_第3页
ACIS基础培训课程课件_第4页
ACIS基础培训课程课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACIS基础培训课程安排属性3ACISMFC3历史机制3错误处理3HOOPS介绍3MFC环境和ACIS31属性(Attribute)所有从ENTITY派生的类都可以拥有属性属性是在属性类ATTRIB中实现的属性可以保存两个主要目的为了实现功能所做的记号由SPATIAL开发和实现由开发者定义&实现作为属性信息,应用程序的最终用户将会用到由开发者定义,应用程序的最终用户使用2实体和属性之间的关系ENTITYATTRIBATTRIBATTRIBATTRIBNULLNULL3ATTRIB类ENTITYATTRIBOrganizationAttributeClassApplicationSpecificAttributeClass从ENTITY类派生是一个抽象类组织实行(OrganizationAttribute)类从ATTRIB类派生应用程序特定属性(ApplicationSpecificAttribute)类从组织属性类派生4SPATIAL定义的属性每个组件有各自的属性实现特定的功能如混合(blend)的半径和颜色普通属性(GentricAttribute)普通属性类来存储一个字符串或一个字符串及其相关联的一个属性值(value)—ATTRIB_GEN_NAME属性值可以是integer,real,string,position,vector,pointer,指向ENTITY的指针—从ATTRIB_GEN_NAME派生缩短了用户开发的时间良好的兼容性5用户自定义属性定义组织属性类用户有必要使用”sentinel”,SPATIAL的技术支持应用程序特定属性类应该从组织属性类派生其它子类可以从应用程序特定属性类中派生开发者可以定义属性中包含的数据因为ATTRIB类是从ENTITY类派生的,因此用户在定义自己的属性时,掌握保存/恢复机制是很有帮助的,尤其是用户自定义的属性中包含ENTITY*时6以颜色属性为例在ACIS中颜色是通过属性来实现的ENTITYATTRIBATTRIB_STATTRIB_RGB组织属性类应用程序特定属性类7ATTRIB类的重要方法virtualvoidATTRIB::split_owner(ENTITY*)virtualvoidATTRIB::merge_owner(ENTITY*,lotical)virtualvoidATTRIB::trans_owner(SPAtransfconst&)8ACISMFCACISMFC从ACISR11开始,完全放弃使用ACISMFC原因是ACIS的一些显示组件(如GL和GI)已经完全放弃使用9ACISHOOPSAppWizardACISHOOPSAppWizard提供类似ACISMFC的基本功能由SPATIALJAPAN开发和维护10ACISHOOPSAppWizard主要特点使用HOOPS不用学习HOOPS就可以使用HOOPS基本的图形功能如果用户仅仅需要用到一些基本的图形功能,那么就不需要直接用HOOPS来编程,也就是说使用这个AppWizard就已经足够了使得开发者在开发地初级间断可以将经理集中在ACIS上如果需要的话,开发者可以直接使用HOOPS来扩展应用程序的图形显示能力提供一些示例源代码可以学习如何使用ACIS和InterOp和ACISMFC结构类似利用原有的AICSMFC用户顺利地使用GI/GL组件过度到使用HOOPS来显示快速搭建测试环境11历史机制(Historymechanism)历史机制是什么?可以实现撤销/恢复(Undo/Redo)Undo—向后滚动(rollback)Redo—向前滚动(rollforward)四个主要的类BULLETINBULLETIN_BOARDDELTA_STATEHISTORY_STREAM最常用的API函数api_part_start_state()api_part_note_state()12历史的基本类DELTA_STATE是实现Undo/Redo的一个单元BULLETIN_BOARD基本上调用一个API函数都会创建一个BULLETIN记录ENTITY改变前和改变后的状态DSDSBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB13练习:历史机制目标是通过使用ACISHOOPSAppWizard增加对历史机制的理解使用ACISHOOPSAppWizard创建一个新的工程“History”作为示例AppWizard重一斤个实现SolidBlock的创建编译和构建工程将实现函数“api_make_gear”的文件复制到该工程文件夹,并加入到该工程中在菜单中加入“Gear”,参考SolidBlock的实现,实现创建齿轮的命令14练习:历史机制续上页注释掉”API_BEGIN”和“API_END”宏,并哼名一个outcome类型的变量result使用“api_solid_cylinder_cone”函数创建一个半径为3,高度为20的圆柱从gearbody中湔区圆柱注释掉”check_outcome(result);”行intdepth=0;api_part_start_state(depth);//API_BEGIN outcomeresult=api_make_gear(pBody);

//check_outcome(result); //创建圆柱

//从齿轮中减去该圆柱

if(result.ok())m_pAHDoc->AddEntity(pBody);//API_ENDapi_part_note_state(result,depth);15练习:历史机制intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(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);DSBBBBBBBBBBBBBBB16练习:历史机制修改UNDO/REDO创建菜单“Gear2”并复制Gear实现的代码按下面的程序进行相应的修改intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

if(result.ok())m_pAHDoc->AddEntity(pBody);api_part_note_state(result,depth);api_part_start_state(depth); BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(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);17练习:历史机制intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

if(result.ok())m_pAHDoc->AddEntity(pBody);api_part_note_state(result,depth);api_part_start_state(depth); BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(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);DSBBBBBDSDSBBBBBBBBBB18BULLETIN类存储ENTITY类对象在创建、删除或修改时的信息拥有指向新的ENTITY和原来ENTITY的指针DSBBBBBold_entity_ptr()new_entity_ptr()BULLETINENTITYENTITYBULLETINnext()previous()19BULLETIN类old_entity_ptr()new_entity_ptr()BULLETINENTITYold_entity_ptr()new_entity_ptr()BULLETINNULLENTITYENTITYold_entity_ptr()new_entity_ptr()BULLETINENTITY新创建的ENTITY改变之后的ENTITY修改之前的ENTITY拷贝删除的ENTITYChangeBulletinDeleteBulletinCreateBulletin20BULLETIN_BOARD类一般来说一个API创建一个BULLETIN_BOARDAPI函数中的API_BEGIN,API_END宏对创建一个BULLETIN_BOARD通过API函数中的返回值outcome可以得到指向相应的BULLETIN_BOARD的指针包含一个或多个BULLETINDSBBBBBend_bulletin()start_bulletin()BULLETIN_BOARDBULLETIN_BOARDnext()BULLETINBULLETINBULLETIN21DELTA_STATE类每个UNDO/REDO操作需要有一个DELTA_STATE每个DELTA_STATE可以包含一个或多个BULLETIN_BOARDDSBBBBBnext()prev()DELTA_STATEDELTA_STATEBULLETINBULLETINBULLETINpartner()bb()22DELTA_STATE类线性历史(Linearhistory)DSDSDSDS分支历史(Branchhistory)DSDSDSDSDSDSDSDSDS23HISTORY_STREAM类管理DELTA_STATE的实用类缺省情况下,系统启动时定义了一个HISTORY_STREAMapi_get_default_history()开发者可以设置rollback(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或REDOapi_part_name_state() state命名api_part_rooo_to_state() 移动到指定名称的state中PART::history_stream() 得到HISTORY_STREAM24HISTORY_STREAM类HISTORY_STREAMget_root_ds()get_active_ds()get_current_ds()DELTA_STATEDELTA_STATEDELTA_STATEDELTA_STATE根DS当前活动DS创建DS25API_BEGIN,API_END宏intdepth=0;api_part_start_state(depth); result=api_make_gear();

result=api_solid_cylinder_cone();

result=api_subtract();api_part_note_state(result,depth);DSBBBBBDSDSBBBBBBBBBBAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_END26API_BEGIN,API_END宏intdepth=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_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDDSBBBBBBBB27API_BEGIN,API_END宏intdepth=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_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_NOP_BEGINAPI_NOP_ENDDSBBBBBBBBBBBBBBAPI_NOP_BEGIN和API_NOP_END的效果和取消操作的效果一致,对应

的两个宏之间的所有创建、修改和删除是无效的,因此用户需要注意在该宏

对之内的ENTITY是否有效28出错处理(errorhandling)可以知道API函数调用的结果outcome::error_number()outcome::ok()check_outcome()函数为了创建稳定的API,这是必要的调用系统错误出错处理宏EXCEPTION_BEGIN,EXCEPTION_TRY,

EXCEPTION_CATCH,EXCEPTION_ENDAPI_BEGIN,API_END29出错处理(errorhandling)明确地指出错误,并跟踪该过程中发生了些什么将api_solid_cylinder_cone()函数中的半径参数设置为0首先注释掉API_BEGIN和API_END运行程序,尝试Undo/Redo操作intdepth=0;api_part_start_state(depth);//API_BEGIN outcomeresult=api_make_gear(pBody);

BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(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_ENDapi_part_note_state(result,depth);30出错处理(errorhandling)明确地指出错误,并跟踪该过程中发生了些什么(续上页)取消注释API_BEGIN和API_END移去api_make_gear()前的“outcome”在图示位置在每个api函数调用之后添加“check_outcome(result);”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论