int Ng_GetSolidList (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * valuevar = argv[1]; int i; stringstream vst; for (i = 1; i <= geometry->GetNSolids(); i++) { const Solid * sol = geometry->GetSolid(i); if (!sol->GetPrimitive()) vst << sol->Name() << " "; } cout << "solnames = " << vst.str() << endl; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
int Ng_SetPrimitiveData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * value = argv[2]; Array<double> coeffs; cout << "Set primitive data, name = " << name << ", value = " << value << endl; istringstream vst (value); double val; while (!vst.eof()) { vst >> val; coeffs.Append (val); } ((Primitive*) geometry->GetSolid (name)->GetPrimitive())->SetPrimitiveData (coeffs); return TCL_OK; }
int Ng_GetSolidData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.Ptr()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * valuevar = argv[2]; ostringstream vst; const Solid * sol = geometry->GetSolid (name); sol->GetSolidData (vst); cout << "GetSolidData, name = " << name << ", data = " << vst.str() << endl; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
int Ng_GetPrimitiveData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * classnamevar = argv[2]; tcl_const char * valuevar = argv[3]; const char * classname; Array<double> coeffs; geometry->GetSolid (name)->GetPrimitive()->GetPrimitiveData (classname, coeffs); ostringstream vst; for (int i = 1; i <= coeffs.Size(); i++) vst << coeffs.Get(i) << " "; cout << "GetPrimitiveData, name = " << name << ", classnamevar = " << classnamevar << ", classname = " << classname << endl << " valuevar = " << valuevar << ", values = " << vst.str() << endl; Tcl_SetVar (interp, classnamevar, (char*)classname, 0); Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
int Ng_TopLevel (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } int i; /* for (i = 0; i < argc; i++) cout << argv[i] << ", "; cout << endl; */ if (strcmp (argv[1], "getlist") == 0) { stringstream vst; for (i = 0; i < geometry->GetNTopLevelObjects(); i++) { const Solid * sol; const Surface * surf; geometry->GetTopLevelObject (i, sol, surf); if (!surf) vst << "{ " << sol->Name() << " } "; else vst << "{ " << sol->Name() << " " << surf->Name() << " } "; } tcl_const char * valuevar = argv[2]; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); } if (strcmp (argv[1], "set") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); geometry->SetTopLevelObject (sol, surf); } if (strcmp (argv[1], "remove") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); geometry->RemoveTopLevelObject (sol, surf); } if (strcmp (argv[1], "setprop") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; tcl_const char * propvar = argv[4]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); TopLevelObject * tlo = geometry->GetTopLevelObject (sol, surf); if (!tlo) return TCL_OK; char varname[50]; sprintf (varname, "%s(red)", propvar); double red = atof (Tcl_GetVar (interp, varname, 0)); sprintf (varname, "%s(blue)", propvar); double blue = atof (Tcl_GetVar (interp, varname, 0)); sprintf (varname, "%s(green)", propvar); double green = atof (Tcl_GetVar (interp, varname, 0)); tlo -> SetRGB (red, green, blue); sprintf (varname, "%s(visible)", propvar); tlo -> SetVisible (bool(atoi (Tcl_GetVar (interp, varname, 0)))); sprintf (varname, "%s(transp)", propvar); tlo -> SetTransparent (bool(atoi (Tcl_GetVar (interp, varname, 0)))); } if (strcmp (argv[1], "getprop") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; tcl_const char * propvar = argv[4]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); TopLevelObject * tlo = geometry->GetTopLevelObject (sol, surf); if (!tlo) return TCL_OK; char varname[50], varval[10]; sprintf (varname, "%s(red)", propvar); sprintf (varval, "%lf", tlo->GetRed()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(green)", propvar); sprintf (varval, "%lf", tlo->GetGreen()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(blue)", propvar); sprintf (varval, "%lf", tlo->GetBlue()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(visible)", propvar); sprintf (varval, "%d", tlo->GetVisible()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(transp)", propvar); sprintf (varval, "%d", tlo->GetTransparent()); Tcl_SetVar (interp, varname, varval, 0); } return TCL_OK; }