char *Entity::DescriptionString(void) { if(h.isFromRequest()) { Request *r = SK.GetRequest(h.request()); return r->DescriptionString(); } else { Group *g = SK.GetGroup(h.group()); return g->DescriptionString(); } }
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)"); }