﻿ Examples > Surfaces > Flat face with holes

Flat face with holes.

Let's create a flat face with a spline as an outer contour and three circles as holes.

The code of creating the spline as an outer contour:

SG_POINT tmpPnt;

SG_SPLINE* spl2 = SG_SPLINE::Create();

tmpPnt.x = -1.0; tmpPnt.y = -3.0; tmpPnt.z = 0.0;

tmpPnt.x = -3.0; tmpPnt.y = 0.0; tmpPnt.z = 0.0;

tmpPnt.x = -1.0; tmpPnt.y = -1.0; tmpPnt.z = 0.0;

tmpPnt.x = 0.0; tmpPnt.y = 1.0; tmpPnt.z = 0.0;

tmpPnt.x = -1.0; tmpPnt.y = 4.0; tmpPnt.z = 0.0;

tmpPnt.x =3.0; tmpPnt.y = 1.0; tmpPnt.z = 0.0;

tmpPnt.x =2.0; tmpPnt.y = -3.0; tmpPnt.z = 0.0;

tmpPnt.x =1.0; tmpPnt.y = -1.0; tmpPnt.z = 0.0;

tmpPnt.x =1.0; tmpPnt.y = -4.0; tmpPnt.z = 0.0;

spl2->Close();

sgCSpline* spl2_obj = sgCreateSpline(*spl2);

SG_SPLINE::Delete(spl2);

sgGetScene()->AttachObject(spl2_obj);

spl2_obj->SetAttribute(SG_OA_COLOR,0);

spl2_obj->SetAttribute(SG_OA_LINE_THICKNESS, 1);

Holes:

sgC2DObject*  holes[3];

SG_CIRCLE   cirGeo;

SG_POINT    cirC = {0.8, 1.0, 0.0};

SG_VECTOR    cirNor = {0.0, 0.0, 1.0};

holes[0] = sgCreateCircle(cirGeo);

sgGetScene()->AttachObject(holes[0]);

holes[0]->SetAttribute(SG_OA_COLOR,0);

holes[0]->SetAttribute(SG_OA_LINE_THICKNESS, 1);

cirC.x = 1.6; cirC.y = -1.0;

holes[1] = sgCreateCircle(cirGeo);

sgGetScene()->AttachObject(holes[1]);

holes[1]->SetAttribute(SG_OA_COLOR,0);

holes[1]->SetAttribute(SG_OA_LINE_THICKNESS, 1);

cirC.x = 0.0; cirC.y = -1.0;

holes[2] = sgCreateCircle(cirGeo);

sgGetScene()->AttachObject(holes[2]);

holes[2]->SetAttribute(SG_OA_COLOR,0);

holes[2]->SetAttribute(SG_OA_LINE_THICKNESS, 1);

Constructing a face with holes:

sgC3DObject* fcO = (sgC3DObject*)sgSurfaces::Face((const sgC2DObject&)(*spl2_obj),

(const sgC2DObject**)(&holes[0]),3);

sgGetScene()->AttachObject(fcO);

fcO->SetAttribute(SG_OA_COLOR,50);

Then let's move the obtained surface:

SG_VECTOR transV1 = {-5,0,0};

fcO->InitTempMatrix()->Translate(transV1);

fcO->ApplyTempMatrix();

fcO->DestroyTempMatrix();