6.1 将构件四面体的功能添加到菜单功能中;
6.2 拖拽鼠标,构造四面体动态线框,以表达拖拽的实时性。 具体程序可参考附加工程acispartview.dsw。
参考程序1:
void CSolidHoopsView::OnTetra() { }
HSolidModel* pSolidModel = (HSolidModel*)(m_pHView->GetModel()); if (!pSolidModel)
return ;
pSolidModel->m_bSolidData = true; 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);
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);}
FAQ
1
A: ACIS帮助文档的路径是?
2 3 4
Q: ../ACIS_R15_HLP/ACIS.html。
A: 打开帮助文档后,不知道该从哪里查询?
Q: 一般选择主页面右上角的“C++ Master Index”栏检索,如下图所示。 A: HOOPS帮助文档的路径是? Q: ../Hoops1220/docs/index.html。
A: 打开帮助文档后,不知道该从哪里查询?
Q: Hoops的基本函数都可以在HOOPS/3dGS→Reference Manual→HOOPS/3dGS
Functions→Sorted Alphabetically中检索到。
5 A: 查询函数HC_Open_Segment,检索首字母“H”查不到? Q: 应该查询下划线后的首个字母“O”。 6
A: 如何查询坐标系转换功能?
Q: HOOPS/3dGS→Programming Guide→3.1 Coordinate systems,阅读这部分内容可知,
用函数HC_Compute_Coordinates,可以实现local window、outer window、local pixels、outer pixels、projection、viewpoint、world、camera、object之间的相互转换。 7 8 9
A:如何下载Hoops1220、ACISR15和ACIS_R15_HLP? Q:请联系小组组长或小组其他成员。
A:登录SourceSafe,没有用户名和密码怎么办? Q:联系课题组长申请注册。
A: 创建工程InteSolid时,去掉该工程中的项目bbI2a files和ften files后,编译工程时仍然报错怎么办?
Q:关闭工程InteSolid后,再打开。
10 A:在我的SourceSafe中,为什么总打不开数据库\\\\10.8.21.254\\vss_intesolid$\\? Q:打开数据库时,先要登录到服务器\\\\10.8.21.254,登录时的用户名为guest,密码为welcome。
11 A: 在win32 console控制台下建立了教材13.1中的程序的工程,生成的cube.dbg文件为什么是空的? Q: 该程序中的debug_size函数无法在win32 console Application中运行,应将该工程建立成MFC应用程序。
12 A:教材第13章中的程序,在编译时,找不到如下的数据类型:vector,unit_vector,positon? Q: 这些数据类型都是ACIS的几何元数据类型,相应地改为SPAvector、SPAunit_vector、SPAposition就可以了。也可以添加头文件base.hxx,打开base.hxx可以看到如下的程序: #define vector SPAvector。