void TextWindow::ShowStepDimension(void) { Constraint *c = SK.constraint.FindByIdNoOops(shown.constraint); if(!c) { shown.screen = SCREEN_LIST_OF_GROUPS; Show(); return; } Printf(true, "%FtSTEP DIMENSION%E %s", c->DescriptionString()); if(shown.dimIsDistance) { Printf(true, "%Ba %Ftstart%E %s", SS.MmToString(c->valA)); Printf(false, "%Bd %Ftfinish%E %s %Fl%Ll%f[change]%E", SS.MmToString(shown.dimFinish), &ScreenStepDimFinish); } else { Printf(true, "%Ba %Ftstart%E %@", c->valA); Printf(false, "%Bd %Ftfinish%E %@ %Fl%Ll%f[change]%E", shown.dimFinish, &ScreenStepDimFinish); } Printf(false, "%Ba %Ftsteps%E %d %Fl%Ll%f%D[change]%E", shown.dimSteps, &ScreenStepDimSteps); Printf(true, " %Fl%Ll%fstep dimension now%E", &ScreenStepDimGo); Printf(true, "(or %Fl%Ll%fcancel operation%E)", &ScreenHome); }
//----------------------------------------------------------------------------- // The screen that's displayed when the sketch fails to solve. A report of // what failed, and (if the problem is a singular Jacobian) a list of // constraints that could be removed to fix it. //----------------------------------------------------------------------------- void TextWindow::ShowGroupSolveInfo(void) { Group *g = SK.group.FindById(shown.group); if(g->solved.how == System::SOLVED_OKAY) { // Go back to the default group info screen shown.screen = SCREEN_GROUP_INFO; Show(); return; } Printf(true, "%FtGROUP %E%s", g->DescriptionString()); switch(g->solved.how) { case System::DIDNT_CONVERGE: Printf(true, "%FxSOLVE FAILED!%Fd no convergence"); Printf(true, "the following constraints are unsatisfied"); break; case System::SINGULAR_JACOBIAN: Printf(true, "%FxSOLVE FAILED!%Fd inconsistent system"); Printf(true, "remove any one of these to fix it"); break; case System::TOO_MANY_UNKNOWNS: Printf(true, "Too many unknowns in a single group!"); return; } for(int i = 0; i < g->solved.remove.n; i++) { hConstraint hc = g->solved.remove.elem[i]; Constraint *c = SK.constraint.FindByIdNoOops(hc); if(!c) continue; Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", (i & 1) ? 'd' : 'a', c->h.v, (&TextWindow::ScreenSelectConstraint), (&TextWindow::ScreenHoverConstraint), c->DescriptionString()); } Printf(true, "It may be possible to fix the problem "); Printf(false, "by selecting Edit -> Undo."); }
void TextWindow::ShowGroupInfo(void) { Group *pg, *g = SK.group.FindById(shown.group); const char *s = "???"; if(shown.group.v == Group::HGROUP_REFERENCES.v) { Printf(true, "%FtGROUP %E%s", g->DescriptionString()); goto list_items; } else { Printf(true, "%FtGROUP %E%s [%Fl%Ll%D%frename%E/%Fl%Ll%D%fdel%E]", g->DescriptionString(), g->h.v, &TextWindow::ScreenChangeGroupName, g->h.v, &TextWindow::ScreenDeleteGroup); } if(g->type == Group::LATHE) { Printf(true, " %Ftlathe plane sketch"); } else if(g->type == Group::EXTRUDE || g->type == Group::ROTATE || g->type == Group::TRANSLATE) { if(g->type == Group::EXTRUDE) { s = "extrude plane sketch"; } else if(g->type == Group::TRANSLATE) { s = "translate original sketch"; } else if(g->type == Group::ROTATE) { s = "rotate original sketch"; } Printf(true, " %Ft%s%E", s); bool one = (g->subtype == Group::ONE_SIDED); Printf(false, "%Ba %f%Ls%Fd%c one-sided%E " "%f%LS%Fd%c two-sided%E", &TextWindow::ScreenChangeGroupOption, one ? RADIO_TRUE : RADIO_FALSE, &TextWindow::ScreenChangeGroupOption, !one ? RADIO_TRUE : RADIO_FALSE); if(g->type == Group::ROTATE || g->type == Group::TRANSLATE) { if(g->subtype == Group::ONE_SIDED) { bool skip = g->skipFirst; Printf(false, "%Bd %Ftstart %f%LK%Fd%c with original%E " "%f%Lk%Fd%c with copy #1%E", &ScreenChangeGroupOption, !skip ? RADIO_TRUE : RADIO_FALSE, &ScreenChangeGroupOption, skip ? RADIO_TRUE : RADIO_FALSE); } int times = (int)(g->valA); Printf(false, "%Bp %Ftrepeat%E %d time%s %Fl%Ll%D%f[change]%E", (g->subtype == Group::ONE_SIDED) ? 'a' : 'd', times, times == 1 ? "" : "s", g->h.v, &TextWindow::ScreenChangeExprA); } } else if(g->type == Group::IMPORTED) { Printf(true, " %Ftimport geometry from file%E"); Printf(false, "%Ba '%s'", g->impFileRel.c_str()); Printf(false, "%Bd %Ftscaled by%E %# %Fl%Ll%f%D[change]%E", g->scale, &TextWindow::ScreenChangeGroupScale, g->h.v); } else if(g->type == Group::DRAWING_3D) { Printf(true, " %Ftsketch in 3d%E"); } else if(g->type == Group::DRAWING_WORKPLANE) { Printf(true, " %Ftsketch in new workplane%E"); } else { Printf(true, "???"); } Printf(false, ""); if(g->type == Group::EXTRUDE || g->type == Group::LATHE || g->type == Group::IMPORTED) { bool un = (g->meshCombine == Group::COMBINE_AS_UNION); bool diff = (g->meshCombine == Group::COMBINE_AS_DIFFERENCE); bool asy = (g->meshCombine == Group::COMBINE_AS_ASSEMBLE); bool asa = (g->type == Group::IMPORTED); Printf(false, " %Ftsolid model as"); Printf(false, "%Ba %f%D%Lc%Fd%c union%E " "%f%D%Lc%Fd%c difference%E " "%f%D%Lc%Fd%c%s%E ", &TextWindow::ScreenChangeGroupOption, Group::COMBINE_AS_UNION, un ? RADIO_TRUE : RADIO_FALSE, &TextWindow::ScreenChangeGroupOption, Group::COMBINE_AS_DIFFERENCE, diff ? RADIO_TRUE : RADIO_FALSE, &TextWindow::ScreenChangeGroupOption, Group::COMBINE_AS_ASSEMBLE, asa ? (asy ? RADIO_TRUE : RADIO_FALSE) : 0, asa ? " assemble" : ""); if(g->type == Group::EXTRUDE || g->type == Group::LATHE) { Printf(false, "%Bd %Ftcolor %E%Bp %Bd (%@, %@, %@) %f%D%Lf%Fl[change]%E", 0x80000000 | g->color, REDf(g->color), GREENf(g->color), BLUEf(g->color), ScreenColor, top[rows-1] + 2); } else if(g->type == Group::IMPORTED) { Printf(false, " %Fd%f%LP%c suppress this group's solid model", &TextWindow::ScreenChangeGroupOption, g->suppress ? CHECK_TRUE : CHECK_FALSE); } Printf(false, ""); } Printf(false, " %f%Lv%Fd%c show entities from this group", &TextWindow::ScreenChangeGroupOption, g->visible ? CHECK_TRUE : CHECK_FALSE); pg = g->PreviousGroup(); if(pg && pg->runningMesh.IsEmpty() && g->thisMesh.IsEmpty()) { Printf(false, " %f%Lf%Fd%c force NURBS surfaces to triangle mesh", &TextWindow::ScreenChangeGroupOption, g->forceToMesh ? CHECK_TRUE : CHECK_FALSE); } else { Printf(false, " (model already forced to triangle mesh)"); } Printf(true, " %f%Lr%Fd%c relax constraints and dimensions", &TextWindow::ScreenChangeGroupOption, g->relaxConstraints ? CHECK_TRUE : CHECK_FALSE); Printf(false, " %f%Ld%Fd%c treat all dimensions as reference", &TextWindow::ScreenChangeGroupOption, g->allDimsReference ? CHECK_TRUE : CHECK_FALSE); if(g->booleanFailed) { Printf(false, ""); Printf(false, "The Boolean operation failed. It may be "); Printf(false, "possible to fix the problem by choosing "); Printf(false, "'force NURBS surfaces to triangle mesh'."); } list_items: Printf(false, ""); Printf(false, "%Ft requests in group"); int i, a = 0; for(i = 0; i < SK.request.n; i++) { Request *r = &(SK.request.elem[i]); if(r->group.v == shown.group.v) { char *s = r->DescriptionString(); Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", (a & 1) ? 'd' : 'a', r->h.v, (&TextWindow::ScreenSelectRequest), &(TextWindow::ScreenHoverRequest), s); a++; } } if(a == 0) Printf(false, "%Ba (none)"); a = 0; Printf(false, ""); Printf(false, "%Ft constraints in group (%d DOF)", g->solved.dof); for(i = 0; i < SK.constraint.n; i++) { Constraint *c = &(SK.constraint.elem[i]); if(c->group.v == shown.group.v) { char *s = c->DescriptionString(); Printf(false, "%Bp %Fl%Ll%D%f%h%s%E %s", (a & 1) ? 'd' : 'a', c->h.v, (&TextWindow::ScreenSelectConstraint), (&TextWindow::ScreenHoverConstraint), s, c->reference ? "(ref)" : ""); a++; } } if(a == 0) Printf(false, "%Ba (none)"); }