示例#1
0
void MainFrame::OnMachiningAreaclear(wxCommandEvent& WXUNUSED(event) )
{
    double cr = 3.;
    double fr = 0.;
    double sd = 15.;
    double si = cr / 2.;
    if (RunCoreRoughDlg(cr, fr, sd, si))
    {
        GSTsurface *gstsurf = SelectedSurface();
        GSTtoolpath *gstbound = SelectedBoundary();
        ASSERT((gstsurf != NULL) && (gstbound != NULL));

        if (!(gstsurf || gstbound))
            return;

        MachineParams params;
        // linking parameters
        params.leadoffdz = 0.1;
        params.leadofflen = 1.1;
        params.leadoffrad = 2.0;
        params.retractzheight = gstsurf->zrg.hi + 5.0;
        params.leadoffsamplestep = 0.6;

        // cutting parameters
        params.toolcornerrad = cr;
        params.toolflatrad = fr;
        params.samplestep = 0.4;
        params.stepdown = sd;
        params.clearcuspheight = sd / 3.0;

        // weave parameters
        params.triangleweaveres = 0.51;
        params.flatradweaveres = 0.71;

        // stearing parameters
        // fixed values controlling the step-forward of the tool and
        // changes of direction.
        params.dchangright = 0.17;
        params.dchangrightoncontour = 0.37;
        params.dchangleft = -0.41;
        params.dchangefreespace = -0.6;
        params.sidecutdisplch = 0.0;
        params.fcut = 1000;
        params.fretract = 5000;
        params.thintol = 0.0001;



        GSTtoolpath* gsttpath = new GSTtoolpath;
        gst->gstees.push_back(gsttpath);

        // define the empty surface
        SurfX sx(gstsurf->xrg.Inflate(2), gstsurf->yrg.Inflate(2), gstsurf->zrg);
        gstsurf->PushTrianglesIntoSurface(sx);
        sx.BuildComponents(); // compress thing

        ASSERT(gstbound->ftpaths.size() == 1);
        MakeCorerough(gsttpath->ftpaths, sx, gstbound->ftpaths[0], params);

        // write result to a file
        FILE* fpost = fopen("freesteel.tp", "w");
        ASSERT(fpost);
        PostProcess(fpost, gsttpath->ftpaths, params);
        fclose(fpost);


        gsttpath->toolshape = ToolShape(params.toolflatrad, params.toolcornerrad, params.toolcornerrad, params.toolcornerrad / 10.0);
        gsttpath->bound.Append(gstbound->ftpaths[0].pths);
        gsttpath->UpdateFromPax();
        gsttpath->AddToRenderer(&gst->ren1);

        UpdateActors();
        UpdateAnimate();
    }
}
示例#2
0
void FreesteelWindow::PushTrianglesIntoSurface(int ix, SurfX* sx)
{
	GSTsurface* surf = dynamic_cast<GSTsurface*>(gstees[ix]);
	ASSERT(surf != NULL);
	surf->PushTrianglesIntoSurface(*sx);
}