Commit 4d05faaf authored by whitlocb's avatar whitlocb

Some Libsim scaling-related fixes for rendering. This does not address compositing slowness.

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@28474 18c085ea-50e0-402c-830e-de6fd14e8384
parent aed77c28
......@@ -44,6 +44,7 @@
set(VISIT_PARALLEL @VISIT_PARALLEL@)
set(MESA_FOUND @MESA_FOUND@)
set(VISIT_BINARY_DIR @VISIT_BINARY_DIR@)
set(VISIT_FORTRAN @VISIT_FORTRAN@)
set(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@")
......@@ -80,6 +81,10 @@ if(VISIT_PARALLEL)
${VISIT_LIBS} ${TP_LIBS} ${SLIVR_LIBS})
endif()
if(MESA_FOUND)
list(APPEND visit_libs_ser visit_vtk_osmesa)
list(APPEND visit_libs_par visit_vtk_osmesa)
endif()
macro(get_enabled_plugins fname type suffix plist)
unset(lines)
......
......@@ -312,6 +312,7 @@ avtFileWriter::WriteImageDirectly(vtkImageWriter *wrtr, const char *filename,
// base The base name for the file.
// family Whether or not this file is part of a family of files to be
// saved.
// fileChecks Whether to check file permissions, etc.
//
// Notes: The memory returned by this routine must be freed by the
// calling function.
......@@ -331,10 +332,13 @@ avtFileWriter::WriteImageDirectly(vtkImageWriter *wrtr, const char *filename,
// Jeremy Meredith, Wed Aug 6 18:03:45 EDT 2008
// Changed char* to const char* to fix warning.
//
// Brad Whitlock, Tue Mar 22 19:35:40 PDT 2016
// Add check permissions flag to CreateFilename.
//
// ****************************************************************************
char *
avtFileWriter::CreateFilename(const char *base, bool family)
avtFileWriter::CreateFilename(const char *base, bool family, bool fileChecks)
{
char *rv = NULL;
const char *msg = NULL;
......@@ -351,31 +355,34 @@ avtFileWriter::CreateFilename(const char *base, bool family)
rv = dsWriter->CreateFilename(base, family, dsFormat);
}
bool fileExists = false;
ifstream ifile(rv);
if (!ifile.fail())
{
fileExists = true;
}
if (fileExists && family)
{
//
// We are saving a family, so reject this one and keep going.
//
msg = "Although VisIt typically saves out files sequentially, "
"some numbers are being skipped when saving out this "
"file to avoid overwriting previous saves.";
keepGoing = true;
}
else
if(fileChecks)
{
ofstream ofile(rv);
if (ofile.fail())
bool fileExists = false;
ifstream ifile(rv);
if (!ifile.fail())
{
fileExists = true;
}
if (fileExists && family)
{
//
// We are saving a family, so reject this one and keep going.
//
msg = "Although VisIt typically saves out files sequentially, "
"some numbers are being skipped when saving out this "
"file to avoid overwriting previous saves.";
keepGoing = true;
}
else
{
rv = NULL;
msg = "VisIt cannot write a file in the directory specified.\n"
"Note: If you are running client/server, VisIt can only "
"save files onto the local client.";
ofstream ofile(rv);
if (ofile.fail())
{
rv = NULL;
msg = "VisIt cannot write a file in the directory specified.\n"
"Note: If you are running client/server, VisIt can only "
"save files onto the local client.";
}
}
}
}
......
......@@ -62,6 +62,9 @@
// Kathleen Bonnell, Thu Nov 6 07:44:38 PST 2003
// Add compression arg to Write method.
//
// Brad Whitlock, Tue Mar 22 19:35:40 PDT 2016
// Add check permissions flag to CreateFilename.
//
// ****************************************************************************
class AVTFILEWRITER_API avtFileWriter
......@@ -78,7 +81,8 @@ class AVTFILEWRITER_API avtFileWriter
void WriteImageDirectly(vtkImageWriter *, const char *,
avtDataObject_p);
char *CreateFilename(const char *, bool);
char *CreateFilename(const char *base, bool family,
bool fileChecks = true);
protected:
int format;
......
......@@ -320,7 +320,7 @@ IceTNetworkManager::Render(
bool getZBuffer, int annotMode, int windowID,
bool leftEye)
{
int t0 = visitTimer->StartTimer();
StackTimer t0("IceTNetworkManager::Render");
DataNetwork *origWorkingNet = workingNet;
avtDataObject_p retval;
......@@ -333,8 +333,6 @@ IceTNetworkManager::Render(
TRY
{
this->StartTimer();
RenderSetup(windowID, networkIds, getZBuffer,
annotMode, leftEye, checkThreshold);
......@@ -481,7 +479,6 @@ IceTNetworkManager::Render(
ENDTRY
workingNet = origWorkingNet;
visitTimer->StopTimer(t0, "Ice-T Render");
return retval;
}
......
......@@ -2854,11 +2854,7 @@ NetworkManager::Render(
bool checkThreshold, intVector plotIds, bool getZBuffer,
int annotMode, int windowID, bool leftEye)
{
#ifdef NetworkManagerTIME
struct timeval tv0,tv1;
gettimeofday(&tv0, 0);
#endif
StackTimer t0("NetworkManager::Render");
DataNetwork *origWorkingNet = workingNet;
avtDataObject_p output;
......@@ -2886,11 +2882,6 @@ NetworkManager::Render(
workingNet = origWorkingNet;
#ifdef NetworkManagerTIME
gettimeofday(&tv1, 0);
if (PAR_Rank() == 0)
cerr << "NetworkManager::Render " << elapsed(tv0, tv1) << endl;
#endif
return output;
}
......@@ -5056,6 +5047,8 @@ NetworkManager::AddQueryOverTimeFilter(QueryOverTimeAttributes *qA,
void
NetworkManager::NewVisWindow(int winID)
{
StackTimer t0("NetworkManager::NewVisWindow");
//
// Delete any VisWindow objects that are marked for deletion
//
......@@ -5077,6 +5070,7 @@ NetworkManager::NewVisWindow(int winID)
TRY
{
StackTimer t1("Create new vis window");
viswinMap[winID].viswin = new VisWindow();
viswinMap[winID].visualCuesNeedUpdate = false;
viswinMap[winID].markedForDeletion = false;
......@@ -6288,6 +6282,9 @@ NetworkManager::RenderSetup(int windowID, intVector& plotIds, bool getZBuffer,
EXCEPTION1(ImproperUseException, invalid);
}
// Start render timer.
this->StartTimer();
EngineVisWinInfo &viswinInfo = viswinMap.find(windowID)->second;
viswinInfo.markedForDeletion = false;
std::string &changedCtName = viswinInfo.changedCtName;
......@@ -6554,6 +6551,7 @@ NetworkManager::RenderCleanup()
// return viswindow to its true stereo mode
if(renderState.stereoType != -1)
renderState.window->SetStereoRendering(true, renderState.stereoType);
this->StopTimer();
}
// ****************************************************************************
......@@ -6666,10 +6664,7 @@ NetworkManager::RenderingStages()
avtImage_p
NetworkManager::RenderGeometry()
{
#ifdef NetworkManagerTIME
struct timeval tv0,tv1;
gettimeofday(&tv0, 0);
#endif
StackTimer t0("NetworkManager::RenderGeometry");
// render the image and capture it. Relies upon explicit render
CallProgressCallback("NetworkManager", "render pass 1", 0, 1);
......@@ -6718,7 +6713,8 @@ NetworkManager::RenderGeometry()
int w = 0, h = 0;
int rank = PAR_Rank();
//if (!renderState.haveCells[rank])
//{
TimedCodeBlock("Render & Readback",
{
// configure for ordered composite. 1) enable alpha channel
// 2) use solid bg 3) set clear color to 0 0 0 0
double bgColor[3] = {0.0};
......@@ -6752,7 +6748,7 @@ NetworkManager::RenderGeometry()
viswin->SetBackgroundMode(bgMode);
viswin->SetBackgroundColor(bgColor[0], bgColor[1], bgColor[2]);
}
//}
});
CallProgressCallback("NetworkManager", "render pass 1", 1, 1);
CallProgressCallback("NetworkManager", "composite pass 1", 0, 1);
......@@ -6779,6 +6775,7 @@ NetworkManager::RenderGeometry()
else
{
int nranks = PAR_Size();
StackTimer t1("Z Compositing");
// make the list of ranks that need to composite
// because they have local geometry. if a rank is not
......@@ -6818,6 +6815,8 @@ NetworkManager::RenderGeometry()
}
else
{
StackTimer t2("NonZ Compositing");
// do visit's non-z-buffer composite
viswin->ScreenRender(renderState.viewportedMode,
/*disbale fg=*/true, /*opaque on=*/true,
......@@ -6865,11 +6864,6 @@ NetworkManager::RenderGeometry()
CallProgressCallback("NetworkManager", "composite pass 1", 1, 1);
#ifdef NetworkManagerTIME
gettimeofday(&tv1, 0);
if (PAR_Rank() == 0)
cerr << "NetworkManager::RenderGeometry " << elapsed(tv0, tv1) << endl;
#endif
return output;
}
......@@ -6905,10 +6899,7 @@ NetworkManager::RenderGeometry()
avtImage_p
NetworkManager::RenderTranslucent(avtImage_p& input)
{
#ifdef NetworkManagerTIME
struct timeval tv0,tv1;
gettimeofday(&tv0, 0);
#endif
StackTimer t0("NetworkManager::RenderTranslucent");
CallProgressCallback("NetworkManager", "render pass 2", 0, 1);
VisWindow *viswin = renderState.window;
......@@ -7070,13 +7061,6 @@ NetworkManager::RenderTranslucent(avtImage_p& input)
CallProgressCallback("NetworkManager", "composite pass 2", 0, 1);
#ifdef NetworkManagerTIME
gettimeofday(&tv1, 0);
if (PAR_Rank() == 0)
cerr << "NetworkManager::RenderTranslucent "
<< renderState.orderComposite << " " << elapsed(tv0, tv1) << endl;
#endif
return output;
}
......@@ -7165,6 +7149,7 @@ NetworkManager::StopTimer()
void
NetworkManager::RenderShadows(avtImage_p& input) const
{
StackTimer t0("NetworkManager::RenderShadows");
CallProgressCallback("NetworkManager", "Creating shadows",0,1);
VisWindow *viswin = renderState.window;
......@@ -7270,6 +7255,7 @@ NetworkManager::RenderShadows(avtImage_p& input) const
void
NetworkManager::RenderDepthCues(avtImage_p& input) const
{
StackTimer t0("NetworkManager::RenderDepthCues");
CallProgressCallback("NetworkManager", "Applying depth cueing", 0,1);
if (PAR_Rank() == 0)
{
......@@ -7334,6 +7320,7 @@ NetworkManager::RenderDepthCues(avtImage_p& input) const
void
NetworkManager::RenderPostProcess(avtImage_p &input)
{
StackTimer t0("NetworkManager::RenderPostProcess");
if (renderState.imageBasedPlots)
{
std::vector<avtPlot_p>::iterator it = renderState.windowInfo->imageBasedPlots.begin();
......
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>VisIt 2.11 Release Notes</title>
</head>
<body>
<center><b><font size="6">VisIt 2.11 Release Notes</font></b></center>
<p>Welcome to VisIt's release notes page. This page describes the important
enhancements and bug-fixes that were added to this release.</p>
<p><b>Sections</b></p>
<ul>
<li><a href="#General_Features">Features for all users</a></li>
<li><a href="#Advanced_Features">Features for advanced users</a></li>
<li><a href="#GUI_Changes">Changes in GUI behavior</a></li>
<li><a href="#File_format">Changes to file format readers</a></li>
<li><a href="#Plot_changes">Changes to plots</a></li>
<li><a href="#Operator_changes">Changes to operators</a></li>
<li><a href="#Bugs_fixed">Other bug fixes</a></li>
<li><a href="#Configuration_changes">Configuration changes</a></li>
<li><a href="#Build_changes">Changes to build_visit</a></li>
<li><a href="#Dev_changes">Changes for VisIt developers</a></li>
</ul>
<a name="General_Features"></a>
<p><b><font size="4">General features added in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Advanced_Features"></a>
<p><b><font size="4">Advanced features added in version 2.11</font></b></p>
<ul>
<li>Libsim was changed so it does not require extra image broadcasts when rendering in batch mode.</li>
<li></li>
</ul>
<a name="GUI_Changes"></a>
<p><b><font size="4">Changes in GUI behavior for version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="File_format"></a>
<p><b><font size="4">File format reader changes in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Plot_changes"></a>
<p><b><font size="4">Changes to VisIt's plots in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
<li>A bug was fixed with the scatter plot, where VisIt would give an error if it generated any empty domains.</li>
</ul>
<a name="Operator_changes"></a>
<p><b><font size="4">Changes to VisIt's operators in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Bugs_fixed"></a>
<p><b><font size="4">Other bugs fixed in version 2.11</font></b></p>
<ul>
<li>Viewer-based filename generation code used in the Libsim runtime library no longer queries the file system for permissions, which caused a massive slowdown when rendering images using Libsim at scale.</li>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Configuration_changes"></a>
<p><b><font size="4">Configuration changes in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Build_changes"></a>
<p><b><font size="4">Build changes in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<a name="Dev_changes"></a>
<p><b><font size="4">Changes for VisIt developers in version 2.11</font></b></p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<p>Click the following link to view the release notes for the previous version
of VisIt: <a href="relnotes2.10.3.html">VisIt 2.10.3 Release Notes</a>.</p>
</body>
</html>
......@@ -236,6 +236,7 @@ SimEngine::InitializeViewer(const std::vector<std::string> &plotPlugins,
GetViewerProperties()->SetNowin(true);
GetViewerProperties()->SetNoConfig(noconfig);
GetViewerProperties()->SetMasterProcess(PAR_UIProcess());
GetViewerProperties()->SetInSitu(true);
GetViewerStateManager()->CreateState();
// Install a callback to schedule execution of internal commands.
......@@ -725,6 +726,7 @@ SimEngine::SaveWindow(const std::string &filename, int w, int h, int format)
swa->SetHeight(h);
swa->SetSaveTiled(false);
swa->SetScreenCapture(false);
swa->SetResConstraint(SaveWindowAttributes::NoConstraint);
swa->Notify();
GetViewerMethods()->SaveWindow();
......
This diff is collapsed.
......@@ -159,7 +159,7 @@ public:
bool replyWithNullData,
void (*waitCB)(void*), void *waitCBData);
virtual bool Render(const EngineKey &ek, avtDataObjectReader_p &rdr,
virtual int Render(const EngineKey &ek, avtImage_p &img,
bool sendZBuffer, const intVector &networkIds,
int annotMode, int windowID, bool leftEye,
void (*waitCB)(void *), void *waitCBData);
......
......@@ -90,6 +90,10 @@ typedef struct
int dims[3];
float extents[6];
int groupSize;
int export;
int render;
int image_width;
int image_height;
float *x;
float *y;
float *z;
......@@ -118,6 +122,10 @@ simulation_data_ctor(simulation_data *sim)
sim->extents[4] = 0.f;
sim->extents[5] = 10.f;
sim->groupSize = -1;
sim->export = 1;
sim->render = 0;
sim->image_width = 1920/2;
sim->image_height = 1080/2;
sim->x = NULL;
sim->y = NULL;
sim->z = NULL;
......@@ -276,50 +284,70 @@ void mainloop_batch(simulation_data *sim)
/* Tell VisIt that some metadata changed.*/
VisItTimeStepChanged();
/* Set some extract options. */
extract_set_options(sim->format, (sim->groupSize > 0)?1:0, sim->groupSize);
/* Make some extracts. */
sprintf(filebase, "slice3v_%04d", sim->cycle);
err = extract_slice_3v(filebase, v0, v1, v2, extractvars);
if(sim->par_rank == 0)
if(sim->export)
{
printf("slice3v export returned %s\n", extract_err(err));
}
/* Set some extract options. */
extract_set_options(sim->format, (sim->groupSize > 0)?1:0, sim->groupSize);
sprintf(filebase, "sliceON_%04d", sim->cycle);
err = extract_slice_origin_normal(filebase, origin, normal, extractvars);
if(sim->par_rank == 0)
{
printf("sliceON export returned %s\n", extract_err(err));
}
/* Make some extracts. */
sprintf(filebase, "slice3v_%04d", sim->cycle);
err = extract_slice_3v(filebase, v0, v1, v2, extractvars);
if(sim->par_rank == 0)
{
printf("slice3v export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceX_%04d", sim->cycle);
err = extract_slice(filebase, 0, 0.5, extractvars);
if(sim->par_rank == 0)
{
printf("sliceX export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceON_%04d", sim->cycle);
err = extract_slice_origin_normal(filebase, origin, normal, extractvars);
if(sim->par_rank == 0)
{
printf("sliceON export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceY_%04d", sim->cycle);
err = extract_slice(filebase, 1, 2.5, extractvars);
if(sim->par_rank == 0)
{
printf("slice export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceX_%04d", sim->cycle);
err = extract_slice(filebase, 0, 0.5, extractvars);
if(sim->par_rank == 0)
{
printf("sliceX export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceZ_%04d", sim->cycle);
err = extract_slice(filebase, 2, 5., extractvars);
if(sim->par_rank == 0)
{
printf("sliceZ export returned %s\n", extract_err(err));
sprintf(filebase, "sliceY_%04d", sim->cycle);
err = extract_slice(filebase, 1, 2.5, extractvars);
if(sim->par_rank == 0)
{
printf("slice export returned %s\n", extract_err(err));
}
sprintf(filebase, "sliceZ_%04d", sim->cycle);
err = extract_slice(filebase, 2, 5., extractvars);
if(sim->par_rank == 0)
{
printf("sliceZ export returned %s\n", extract_err(err));
}
sprintf(filebase, "iso_%04d", sim->cycle);
err = extract_iso(filebase, "radius", isos, 3, extractvars);
if(sim->par_rank == 0)
{
printf("iso export returned %s\n", extract_err(err));
}
}
sprintf(filebase, "iso_%04d", sim->cycle);
err = extract_iso(filebase, "radius", isos, 3, extractvars);
if(sim->par_rank == 0)
if(sim->render)
{
printf("iso export returned %s\n", extract_err(err));
char filename[100];
sprintf(filename, "batch%04d.png", sim->cycle);
VisItAddPlot("Contour", "d");
VisItDrawPlots();
if(VisItSaveWindow(filename, sim->image_width, sim->image_height, VISIT_IMAGEFORMAT_PNG) == VISIT_OKAY)
{
if(sim->par_rank == 0)
printf("Saved %s\n", filename);
}
else if(sim->par_rank == 0)
printf("The image could not be saved to %s\n", filename);
VisItDeleteActivePlots();
}
++sim->cycle;
......@@ -412,6 +440,26 @@ int main(int argc, char **argv)
strncpy(sim.format, argv[i+1], 30);
i++;
}
else if(strcmp(argv[i], "-export") == 0)
{
sim.export = atoi(argv[i+1]);
i++;
}
else if(strcmp(argv[i], "-render") == 0)
{
sim.render = atoi(argv[i+1]);
i++;
}
else if(strcmp(argv[i], "-image-width") == 0)
{
sim.image_width = atoi(argv[i+1]);
i++;
}
else if(strcmp(argv[i], "-image-height") == 0)
{
sim.image_height = atoi(argv[i+1]);
i++;
}
else
{
if(strlen(options) > 0)
......@@ -595,6 +643,14 @@ SimGetMetaData(void *cbdata)
VisIt_VariableMetaData_setCentering(vmd, VISIT_VARCENTERING_NODE);
VisIt_SimulationMetaData_addVariable(md, vmd);
}
if(VisIt_VariableMetaData_alloc(&vmd) == VISIT_OKAY)
{
VisIt_VariableMetaData_setName(vmd, "d");
VisIt_VariableMetaData_setMeshName(vmd, "mesh");
VisIt_VariableMetaData_setType(vmd, VISIT_VARTYPE_SCALAR);
VisIt_VariableMetaData_setCentering(vmd, VISIT_VARCENTERING_NODE);
VisIt_SimulationMetaData_addVariable(md, vmd);
}
#ifdef DEFINE_EXPRESSIONS
/* Add expressions for VisIt to calculate. */
for(i = 0; i < 6; ++i)
......@@ -697,6 +753,21 @@ SimGetVariable(int domain, const char *name, void *cbdata)
VisIt_VariableData_setDataD(h, VISIT_OWNER_VISIT, 1,
npts, rad);
}
else if(strcmp(name, "d") == 0)
{
int index;
double *rad = NULL;
VisIt_VariableData_alloc(&h);
/* On the fly data generation. We donate the array to VisIt. */
rad = (double *)malloc(npts * sizeof(double));
for(index = 0; index < npts; ++index)
rad[index] = sin(sim->time +
0.25 * sqrt(sim->x[index]*sim->x[index] +
sim->y[index]*sim->y[index] +
sim->z[index]*sim->z[index]));
VisIt_VariableData_setDataD(h, VISIT_OWNER_VISIT, 1,
npts, rad);
}
else if(strcmp(name, "dom") == 0)
{
int index;
......
......@@ -45,6 +45,7 @@
#include <viewercore_exports.h>
#include <ViewerBase.h>
#include <avtDataObjectReader.h>
#include <avtImage.h>
#include <vectortypes.h>
#include <avtSILRestriction.h>
......@@ -181,7 +182,7 @@ public:
bool replyWithNullData,
void (*waitCB)(void*), void *waitCBData) = 0;
virtual bool Render(const EngineKey &ek, avtDataObjectReader_p &rdr,
virtual int Render(const EngineKey &ek, avtImage_p &img,
bool sendZBuffer, const intVector &networkIds,
int annotMode, int windowID, bool leftEye,
void (*waitCB)(void *), void *waitCBData) = 0;
......
......@@ -57,6 +57,7 @@
void ViewerProperties::Init()
{
MasterProcess = true;
InSitu = false;
nowin = false;
windowFullScreen = 0;
windowSmall = false;
......@@ -95,6 +96,7 @@ void ViewerProperties::Init()
void ViewerProperties::Copy(const ViewerProperties &obj)
{
MasterProcess = obj.MasterProcess;
InSitu = obj.InSitu;
nowin = obj.nowin;
windowBorders = obj.windowBorders;
windowShift = obj.windowShift;
......@@ -277,6 +279,7 @@ ViewerProperties::operator == (const ViewerProperties &obj) const
{
// Create the return value
return ((MasterProcess == obj.MasterProcess) &&
(InSitu == obj.InSitu) &&
(nowin == obj.nowin) &&
(windowBorders == obj.windowBorders) &&
(windowShift == obj.windowShift) &&
......@@ -445,6 +448,7 @@ void
ViewerProperties::SelectAll()
{
Select(ID_MasterProcess, (void *)&MasterProcess);
Select(ID_InSitu, (void *)&InSitu);
Select(ID_nowin, (void *)&nowin);
Select(ID_windowBorders, (void *)&windowBorders);
Select(ID_windowShift, (void *)&windowShift);
......@@ -482,6 +486,13 @@ ViewerProperties::SetMasterProcess(bool MasterProcess_)
Select(ID_MasterProcess, (void *)&MasterProcess);
}
void
ViewerProperties::SetInSitu(bool InSitu_)
{
InSitu = InSitu_;
Select(ID_InSitu, (void *)&InSitu);
}
void
ViewerProperties::SetNowin(bool nowin_)
{
......@@ -660,6 +671,12 @@ ViewerProperties::GetMasterProcess() const
return MasterProcess;
}
bool
ViewerProperties::GetInSitu() const
{
return InSitu;
}
bool
ViewerProperties::GetNowin() const
{
......
......@@ -98,6 +98,7 @@ public:
// Property setting methods
void SetMasterProcess(bool MasterProcess_);