ACIS-HOOPS新手上手方法(2)

2020-04-15 05:29

api_start_modeler(0);//生成内部数据结构 api_initialize_\组件\

//api函数和直接函数调用 api_terminata_\组件\

api_stop_modeler();//删除内部数据结构

例子:

void main(){

api_start_modellor(0); //启动造型器 api_initialize_constructors(); //初始化应用程序组件 BODY *block; //声明一个指针 api_make_cuboid(100,50,200,block); //调用ACIS的API函数构造几何体 FILE *output = fopen(“cube.dbg”,”w”); //打开一个文件 debug.size(block,output); //调用调式功能的函数将数据结构存入文件 fclose(output); //关闭文件 api_terminate_constructors(); //中断组件,释放组件所占用的组件 api_stop_modeller(); //停止造型器 }

利用ACIS和HOOPS来开发三维图形软件,编程时的基本思路; 启动:

api_start_modeller(0); ……

造型:

HC_Open_Segment_By_Key(m_pHView->GetViewKey());

BODY* sphere_body;

api_make_sphere(radius, sphere_body); ……

转换:

HA_Set_Rendering_Option();

HA_Render_Entity((ENTITY*) sphere_body); HC_Close_Segment(); ……

终止:

HA_Close();

api_stop_modeller();

在工程中实现对四面体的“实时拖动变形”功能

1 建立ACIS/HOOPS造型平台acispartview。

2 在acispartview中构造ACIS数据结构的四面体模型。 参考教材14.5。

3 实现在Hoops中显示该四面体模型。

参考程序1。添加了两个成员变量: m_iIndexVertex、m_positon[4]。 4 响应顶点(Vertex)被选中的消息。 参考程序2。

5 实现“实时拖动变形”功能:将某一顶点拖动到屏幕任意位置后,重新构造新四面体。 参考程序3。 6 完善该程序。 6.1 将构件四面体的功能添加到菜单功能中; 6.2 拖拽鼠标,构造四面体动态线框,以表达拖拽的实时性。

参考程序1:

“CSolidHoopsView.h”下添加如下两个成员变量: public: int m_iIndexVertex; //标示当前被选中顶点的序号@zxc SPAposition* m_positon[4]; //四面体的四个顶点@zxc

void CSolidHoopsView::OnTetra() { HSolidModel* pSolidModel = (HSolidModel*)(m_pHView->GetModel()); if (!pSolidModel) return ; pSolidModel->m_bSolidData = true; // 将m_bSolidData设为TURE,则可以选中顶点 pSolidModel->m_bSolidModel = true; pSolidModel->SetBRepGeometry(true); pSolidModel->SetModelHandedness(HandednessSetLeft); //构造一个四面体 m_positon[0] = new SPAposition(0.0,0.0,0.0); m_positon[1] = new SPAposition(10.0,0.0,0.0); m_positon[2] = new SPAposition(0.0,10.0,0.0); m_positon[3] = new SPAposition(0.0,0.0,10.0); BODY *block; Tetrahedron(block); //四面体的构造函数,参考教材14.5 pSolidModel->AddAcisEntity(block); HC_Open_Segment_By_Key(m_pHView->GetModelKey()); }

HA_Render_Entity(block);// ha_bridge将ACIS几何体转换为Hoops几何体 HC_Close_Segment(); m_pHView->Update();

参考程序2:

void CSolidHoopsView::OnLButtonDown(UINT nFlags, CPoint point)

{

CHoopsView::OnLButtonDown(nFlags,point);

//判断顶点是否选中,如果选中,记录被选择点的序号 HSelectionSet* sel_set = m_pHView->GetSelection();

const HSelectionItem *selItem=sel_set->GetSelectionItemAt(0);//@zxc if (selItem != NULL)

{ HC_KEY hKey=selItem->GetKey(); if (hKey!=NULL) { char type[MVO_BUFFER_SIZE]; HC_Show_Key_Type(hKey, type); char* pdest; pdest=strstr(type,\ if (pdest != NULL)

{//

AfxMessageBox(_T(\选中的对象是顶点!\ ENTITY*enty=HA_Compute_Entity_Pointer(hKey); VERTEX* vertex=(VERTEX*)enty;

SPAposition pos=vertex->geometry()->coords(); for (int i=0;i<=3;i++)

{if (*m_positon[i] == pos) {m_iIndexVertex=i+1; break;}}}}}}

参考程序3:

void CSolidHoopsView::OnLButtonUp(UINT nFlags, CPoint point)

{ HSolidModel* pSolidModel = (HSolidModel*)(m_pHView->GetModel()); if (!pSolidModel) return ; if (m_iIndexVertex!=0) { pSolidModel->DeleteAllEntities();//删除原来的四面体,再重构一个新的四面体 HC_Open_Segment_By_Key(m_pHView->GetSceneKey()); HPoint localPixel,world; localPixel.Set(point.x,point.y,0.0); HC_Compute_Coordinates(\ m_positon[m_iIndexVertex-1]->set_x(world.x); m_positon[m_iIndexVertex-1]->set_y(world.y); m_positon[m_iIndexVertex-1]->set_z(world.z);

m_iIndexVertex=0;//标示符m_iIndexVertex清零,重新构造四面体后, HC_Close_Segment(); 可对四面体反复拖拽。 BODY *block;

Tetrahedron(block);

pSolidModel->AddAcisEntity(block); HC_Open_Segment_By_Key(m_pHView->GetModelKey()); HC_Insert_Line(0.0,0.0,0.0,20.0,20.0,20.0);

HA_Render_Entity(block); HC_Close_Segment(); m_pHView->Update(); }

CHoopsView::OnLButtonUp(nFlags,point);}

掌握acispartview工程功能实现机制

通过上面的例子,理解工程中部分功能模块的实现机制

例1:

点击菜单项View->Tetra,在窗口中显示了一个四面体

它的实现机制是:点击tetra后,产生了一个消息COMMAND消息,该消息ID是IDM_TETRA,根据消息ID,系统调用OnTetra()函数,OnTetra()函数里面封装了四面体的实现过程。

例2:

点击

按钮,窗口中四面体显示为实线

点击Wireframe

按钮后,产生了一个COMMAND消息,消息ID为

ID_TOOLS_RENDERMODE_WIREFRAME,系统根据消息ID调用函数,CSolidHoopsView::OnToolsRendermodeWireframe(),该函数封装了将实体用实线表示的方式,同时也产生了一个ON_UPDATE_COMMAND_UI消息,保证了活其中一个。

通过以上例子的学习,利用VC6.0,查看源代码,使我们对acispartview工程中的功能实现有了初步的了解,工具栏和菜单栏中功能的实现基本与上面的例子类似。我们在学习过程中,还应该不断的积累文档内容,了解相关API,这样保证我们在今后的工作中能更加得心应手。

三个toolbars只激

Acispartviewer的修改:实现三维立方体的功能

在acispartviewer窗口中构建一个立方体,首先在资源文件的菜单选项里添加菜单项(lifang),设置其消息ID(IDM_LIFANG)

在CSoildHoopsView类的头文件中添加消息处理函数OnLifang(),


ACIS-HOOPS新手上手方法(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016上海中考一模题分类汇编(课内文言文篇)含答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: