Following is sample code on Gather_Capping_Geometry with all options (“segment only”,”ignore matrix”, “section offset”, “refine cuts”
Default: HC_Gather_Capping_Geometry will only generate capping geometry for the given cutting plane.
Common Errors:
1. HOOPS need to render capping geometry. Update must be called before calling Gather_Capping_Geometry
2. Double check key path. Make sure key path is from the leaf to root (driver) segment.
...
Code Block |
---|
void CSolidHoopsView::OnExtraSlot5()
{
HC_Open_Segment_By_Key(m_pHView->GetModelKey()); {
int pcount, flist_count;
pcount = 8;
flist_count = 30;
HPoint pts[8];
int faces[30] = { 4, 0, 1, 2, 3,
4, 1, 5, 6, 2,
4, 5, 4, 7, 6,
4, 4, 0, 3, 7,
4, 3, 2, 6, 7,
4, 0, 4, 5, 1 };
pts[0].Set(0, 0, 0);
pts[1].Set(2, 0, 0);
pts[2].Set(2, 2, 0);
pts[3].Set(0, 2, 0);
pts[4].Set(0, 0, 2);
pts[5].Set(2, 0, 2);
pts[6].Set(2, 2, 2);
pts[7].Set(0, 2, 2);
float planes[] = { 0, 0, -1, -0.0001, 1, 0, 0, -0.0001, 0, 1, 0, -0.0001 };
HC_KEY cutplaneSegment = HC_Open_Segment("cut_plane");
HC_KEY section = HC_Insert_Cutting_Plane(0, 0, -1, -0.0001);
float center[] = { 5, 0, 0 };
HC_Insert_Sphere(center, 2, NULL, NULL);
HC_Insert_Cutting_Plane(1, 0, 0, -0.0001);
HC_Open_Segment("section cuts y");
HC_Insert_Shell(pcount, pts, flist_count, faces);
HC_Translate_Object(-1, -1, -1); // translate to origin
HC_Close_Segment();
HC_Close_Segment();
// In order for HC_Gather_Capping_Geometry to work, calling UPDATE is mandatory
m_pHView->Update();
// key path from shell to SceneKey
HC_KEY keypath[4] = { cutplaneSegment, m_pHView->GetModelKey(), m_pHView->GetIncludeLinkKey(), m_pHView->GetSceneKey() };
HC_Open_Segment("segment only");
HC_Gather_Capping_Geometry(4, keypath, section, "segment only");
HC_Set_Color("face=(red,transmission=gray)");
HC_Close_Segment();
HC_Open_Segment("default");
HC_Gather_Capping_Geometry(4, keypath, section, "");
HC_Set_Color("face=(blue,transmission=blue)");
HC_Translate_Object(0, 5, 0);
HC_Close_Segment();
// Delete cut pland and box to see capping geometry
HC_Delete_By_Key(cutplaneSegment);
} HC_Close_Segment();
m_pHView->Update();
} |
...
Code Block |
---|
void CSolidHoopsView::OnExtraSlot5()
{
HC_Open_Segment_By_Key(m_pHView->GetModelKey()); {
int pcount, flist_count;
pcount = 8;
flist_count = 30;
HPoint pts[8];
int faces[30] = { 4, 0, 1, 2, 3,
4, 1, 5, 6, 2,
4, 5, 4, 7, 6,
4, 4, 0, 3, 7,
4, 3, 2, 6, 7,
4, 0, 4, 5, 1 };
pts[0].Set(0, 0, 0);
pts[1].Set(2, 0, 0);
pts[2].Set(2, 2, 0);
pts[3].Set(0, 2, 0);
pts[4].Set(0, 0, 2);
pts[5].Set(2, 0, 2);
pts[6].Set(2, 2, 2);
pts[7].Set(0, 2, 2);
float planes[] = { 0, 0, -1, -0.0001, 1, 0, 0, -0.0001, 0, 1, 0, -0.0001 };
HC_KEY cutplaneSegment = HC_Open_Segment("cut_plane");
HC_KEY section = HC_Insert_Cutting_Section(3, planes);
HC_Open_Segment("section cuts y");
HC_Insert_Shell(pcount, pts, flist_count, faces);
HC_Translate_Object(-1, -1, -1); // translate to origin
HC_Close_Segment();
HC_Close_Segment();
// In order for HC_Gather_Capping_Geometry to work, calling UPDATE is mandatory
m_pHView->Update();
// key path from shell to SceneKey
HC_KEY keypath[4] = { cutplaneSegment, m_pHView->GetModelKey(), m_pHView->GetIncludeLinkKey(), m_pHView->GetSceneKey() };
HC_Open_Segment("section cuts x");
HC_Gather_Capping_Geometry(4, keypath, section, "section offset = 1, refine cuts");
HC_Set_Color("face=(green,transmission=gray)");
HC_Close_Segment();
HC_Open_Segment("section cuts y");
HC_Gather_Capping_Geometry(4, keypath, section, "section offset = 2, refine cuts");
HC_Set_Color("face=(blue,transmission=gray)");
HC_Close_Segment();
HC_Open_Segment("section cuts z");
HC_Gather_Capping_Geometry(4, keypath, section, "section offset = 0, refine cuts");
HC_Set_Color("face=(red,transmission=gray)");
HC_Close_Segment();
// Delete cut pland and box to see capping geometry
HC_Delete_By_Key(cutplaneSegment);
} HC_Close_Segment();
m_pHView->Update();
} |
Refine Cuts: This option will determine if capping geometry will be refine by all cutting planes in scene. Default (OFF), capping geometry is only generate by one cutting plane
...
To view the sample code, check out our forum post.