Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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.