Commit 9cc88eec authored by hrchilds's avatar hrchilds

Update from November 17, 2006

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@763 18c085ea-50e0-402c-830e-de6fd14e8384
parent 5d9bdd42
......@@ -55,6 +55,9 @@ $0 = shift @ARGV;
# Jeremy Meredith, Tue Apr 19 08:36:36 PDT 2005
# Made sure both "-convert" and "-visitconvert" work.
#
# Brad Whitlock, Tue Sep 19 17:48:12 PST 2006
# Added -mpeg2encode, -composite, -transition.
#
###############################################################################
......@@ -144,14 +147,26 @@ while (scalar(@ARGV) > 0) {
$arg eq "-silex" or
$arg eq "-surfcomp" or
$arg eq "-text2polys" or
$arg eq "-time_annotation" or
$arg eq "-mpeg_encode")
$arg eq "-time_annotation")
{
$progname = substr($arg, 1);
print STDERR "NOTE: Specifying tools as an argument to VisIt is ";
print STDERR "no longer necessary.\nIn the future, you should ";
print STDERR "just run '$progname' instead.\n\n";
}
elsif ($arg eq "-mpeg2encode" or
$arg eq "-mpeg_encode")
{
$progname = substr($arg, 1);
}
elsif ($arg eq "-composite")
{
$progname = "visit_composite";
}
elsif ($arg eq "-transition")
{
$progname = "visit_transition";
}
else
{
push @visitargs, $arg;
......
......@@ -55,6 +55,9 @@ $0 = shift @ARGV;
# Jeremy Meredith, Tue Apr 19 08:36:36 PDT 2005
# Made sure both "-convert" and "-visitconvert" work.
#
# Brad Whitlock, Tue Sep 19 17:48:12 PST 2006
# Added -mpeg2encode, -composite, -transition.
#
###############################################################################
......@@ -144,14 +147,26 @@ while (scalar(@ARGV) > 0) {
$arg eq "-silex" or
$arg eq "-surfcomp" or
$arg eq "-text2polys" or
$arg eq "-time_annotation" or
$arg eq "-mpeg_encode")
$arg eq "-time_annotation")
{
$progname = substr($arg, 1);
print STDERR "NOTE: Specifying tools as an argument to VisIt is ";
print STDERR "no longer necessary.\nIn the future, you should ";
print STDERR "just run '$progname' instead.\n\n";
}
elsif ($arg eq "-mpeg2encode" or
$arg eq "-mpeg_encode")
{
$progname = substr($arg, 1);
}
elsif ($arg eq "-composite")
{
$progname = "visit_composite";
}
elsif ($arg eq "-transition")
{
$progname = "visit_transition";
}
else
{
push @visitargs, $arg;
......
......@@ -55,6 +55,9 @@ $0 = shift @ARGV;
# Jeremy Meredith, Tue Apr 19 08:36:36 PDT 2005
# Made sure both "-convert" and "-visitconvert" work.
#
# Brad Whitlock, Tue Sep 19 17:48:12 PST 2006
# Added -mpeg2encode, -composite, -transition.
#
###############################################################################
......@@ -144,14 +147,26 @@ while (scalar(@ARGV) > 0) {
$arg eq "-silex" or
$arg eq "-surfcomp" or
$arg eq "-text2polys" or
$arg eq "-time_annotation" or
$arg eq "-mpeg_encode")
$arg eq "-time_annotation")
{
$progname = substr($arg, 1);
print STDERR "NOTE: Specifying tools as an argument to VisIt is ";
print STDERR "no longer necessary.\nIn the future, you should ";
print STDERR "just run '$progname' instead.\n\n";
}
elsif ($arg eq "-mpeg2encode" or
$arg eq "-mpeg_encode")
{
$progname = substr($arg, 1);
}
elsif ($arg eq "-composite")
{
$progname = "visit_composite";
}
elsif ($arg eq "-transition")
{
$progname = "visit_transition";
}
else
{
push @visitargs, $arg;
......
This diff is collapsed.
......@@ -29,9 +29,9 @@ def main():
movie = MakeMovie()
movie.ProcessArguments()
movie.GenerateFrames()
if(movie.EncodeFrames()):
movie.Cleanup()
if movie.GenerateFrames() > 0:
if movie.EncodeFrames():
movie.Cleanup()
sys.exit(0)
#
......
<?xml version="1.0"?>
<Object name="TemplateOptions">
<Field name="VERSION" type="string">1.5.3</Field>
<Field name="TEMPLATEFILE" type="string">curveoverlay.py</Field>
<Field name="TITLE" type="string">Curve Overlay 2D</Field>
<Field name="DESCRIPTION" type="string">This template displays 2D plots in one viewport while showing a 1D curve in another viewport.</Field>
<Field name="PREVIEWIMAGE" type="string">curveoverlay_preview.bmp</Field>
<Object name="VIEWPORTS">
<Object name="Viewport 1">
<Field name="coordinates" type="floatArray" length="4">0. 0. 1. 1.</Field>
<Field name="compositing" type="int">0</Field>
<Field name="opacity" type="float">1.</Field>
<Field name="replaceColor" type="intArray" length="3">0 0 0</Field>
<Field name="dropShadow" type="bool">false</Field>
<Field name="sequenceList" type="stringVector">"SEQUENCE_1"</Field>
</Object>
<Object name="Viewport 2">
<Field name="coordinates" type="floatArray" length="4">0. 0.04 1. 0.27</Field>
<Field name="compositing" type="int">3</Field>
<Field name="opacity" type="float">1.</Field>
<Field name="replaceColor" type="intArray" length="3">0 0 0</Field>
<Field name="dropShadow" type="bool">false</Field>
<Field name="sequenceList" type="stringVector">"SEQUENCE_2"</Field>
</Object>
</Object>
<Object name="SEQUENCEDATA">
<Object name="SEQUENCE_1">
<Field name="sequenceType" type="string">Scripting</Field>
<Field name="uiFile" type="string">curveoverlay_00.ui</Field>
<Field name="DATABASE" type="string"></Field>
<Field name="PLOT_TYPE" type="int">0</Field>
<Field name="PLOT_VAR" type="string">material</Field>
<Field name="GRADIENT_BGCOLOR1" type="intArray" length="4">100 100 100 255</Field>
<Field name="GRADIENT_BGCOLOR2" type="intArray" length="4">0 0 0 255</Field>
<Field name="CLASSIFICATION_TEXT" type="string">Unclassified</Field>
<Field name="CLASSIFICATION_TEXTCOLOR" type="intArray" length="4">255 0 0 255</Field>
<Field name="TITLE" type="string">Visualization Title</Field>
<Field name="XAXIS_TEXT" type="string">X-Axis</Field>
<Field name="YAXIS_TEXT" type="string">Y-Axis</Field>
</Object>
<Object name="SEQUENCE_2">
<Field name="sequenceType" type="string">Scripting</Field>
<Field name="uiFile" type="string">curveoverlay_01.ui</Field>
<Field name="CURVE_DATABASE" type="string"></Field>
<Field name="CURVE_VARIABLE" type="string">curve</Field>
<Field name="CURVE_TITLE" type="string">Curve Title</Field>
</Object>
</Object>
</Object>
###############################################################################
# Function: Sequence1Frames_set_timeslider
#
# Purpose:
# This is a callback function for sequence 1's IterateCallbackAndSaveFrames
# function. This function sets the time and updates the time slider so
# it has the right time value.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###############################################################################
def Sequence1Frames_set_timeslider(i, cbdata):
ts = cbdata
ret = SetTimeSliderState(i)
Query("Time")
time = GetQueryOutputValue()
ts.text = "Time = %1.5f" % time
return ret
###############################################################################
# Function: Sequence1Frames_set_timeslider
#
# Purpose:
# This is a callback function for sequence 2's IterateCallbackAndSaveFrames
# function. This function lets us adjust the clip plane as a function of
# the number of time states and save out an image each time.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###############################################################################
def Sequence2Frames_clip_cb(i, cbdata):
nts = cbdata[0]
clip = cbdata[1]
xmin = cbdata[2]
xmax = cbdata[3]
vc = cbdata[4]
t = float(i) / float(nts-1)
newX = t * (xmax - xmin) + xmin
clip.plane1Origin = (newX, 0, 0)
ret = SetOperatorOptions(clip)
SetViewCurve(vc)
return ret
###############################################################################
# Class: OverlayCurveMovieTemplate
#
# Purpose:
# This is movie template class creates a movie of a FilledBoundary plot
# and a Curve plot that animates over time.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###############################################################################
class OverlayCurveMovieTemplate(VisItMovieTemplate):
def __init__(self, mm, tr):
VisItMovieTemplate.__init__(self, mm, tr)
def __del__(self):
VisItMovieTemplate.__del__(self)
###########################################################################
# Function: Sequence1Frames
#
# Purpose:
# This method creates the frames for sequence 1.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###########################################################################
def Sequence1Frames(self, formats, percents):
self.Debug(1, "OverlayCurveMovieTemplate.Sequence1Frames: begin")
options = self.sequence_data["SEQUENCE_1"]
# Set up the plots.
DeleteAllPlots()
OpenDatabase(options["DATABASE"])
if options["PLOT_TYPE"] == 0:
if AddPlot("FilledBoundary", options["PLOT_VAR"]) == 0:
raise self.error("The FilledBoundary plot could not be created for "
"sequence 1.")
else:
if AddPlot("Pseudocolor", options["PLOT_VAR"]) == 0:
raise self.error("The Pseudocolor plot could not be created for "
"sequence 1.")
DrawPlots()
# Set the background color.
annot = GetAnnotationAttributes()
annot.foregroundColor = (255, 255, 255, 255)
annot.gradientColor1 = options["GRADIENT_BGCOLOR1"]
annot.gradientColor2 = options["GRADIENT_BGCOLOR2"]
annot.gradientBackgroundStyle = annot.TopToBottom
annot.backgroundMode = annot.Gradient
# Turn off certain annotations.
annot.userInfoFlag = 0
annot.databaseInfoFlag = 0
annot.legendInfoFlag = 0
# Set the axis names
annot.xAxisUserTitle2D = options["XAXIS_TEXT"]
annot.yAxisUserTitle2D = options["YAXIS_TEXT"]
annot.xAxisUserTitleFlag2D = 1
annot.yAxisUserTitleFlag2D = 1
SetAnnotationAttributes(annot)
# Change the viewport
v = GetView2D()
v.viewportCoords = (0.1, 0.95, 0.35, 0.95)
SetView2D(v)
ts = CreateAnnotationObject("TimeSlider")
classification = CreateAnnotationObject("Text2D")
classification.text = options["CLASSIFICATION_TEXT"]
classification.useForegroundForTextColor = 0
classification.textColor = options["CLASSIFICATION_TEXTCOLOR"]
classification.position = (0.83, 0.97)
classification.width = 0.15
classification.fontBold = 1
title = CreateAnnotationObject("Text2D")
title.text = options["TITLE"]
title.position = (0.01, 0.97)
title.width = 0.01 * len(title.text) # for now...
title.fontBold = 1
# Save the frames.
cb_data = (TimeSliderGetNStates(), Sequence1Frames_set_timeslider, ts)
ret = self.IterateCallbackAndSaveFrames(cb_data, "seq1", formats, percents, "Generating sequence 1 frames")
DeleteAllPlots()
ts.Delete()
classification.Delete()
title.Delete()
self.Debug(1, "OverlayCurveMovieTemplate.Sequence1Frames: end")
return (ret, "seq1", GetAnnotationAttributes().backgroundColor)
###########################################################################
# Function: Sequence2Frames
#
# Purpose:
# This method creates the frames for sequence 2.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###########################################################################
def Sequence2Frames(self, formats, percents):
self.Debug(1, "OverlayCurveMovieTemplate.Sequence2Frames: begin")
options = self.sequence_data["SEQUENCE_2"]
# Determine the number of time steps in the first sequence's database.
options1 = self.sequence_data["SEQUENCE_1"]
OpenDatabase(options1["DATABASE"])
nts = TimeSliderGetNStates()
CloseDatabase(options1["DATABASE"])
DeleteAllPlots()
# Set up the Curve plot.
OpenDatabase(options["CURVE_DATABASE"])
AddPlot("Curve", options["CURVE_VARIABLE"])
DrawPlots()
ResetView()
vc = GetViewCurve()
vc.viewportCoords = (0.1, 0.95, 0.15, 1.)
# Get the Curve plot extents
Query("SpatialExtents")
extents = GetQueryOutputValue()
AddOperator("Clip")
clip = ClipAttributes()
clip.funcType = clip.Plane
clip.plane1Status = 1
clip.plane2Status = 0
clip.plane3Status = 0
clip.plane1Origin = (extents[0], 0, 0)
clip.plane1Normal = (1, 0, 0)
clip.planeInverse = 0
SetOperatorOptions(clip)
# Set the background color.
annot = GetAnnotationAttributes()
annot.backgroundMode = annot.Solid
annot.foregroundColor = (255, 255, 255, 255)
annot.backgroundColor = (0, 0, 0, 255)
# Turn off most annotations.
annot.userInfoFlag = 0
annot.databaseInfoFlag = 0
annot.legendInfoFlag = 0
annot.xAxisLabels2D = 0
annot.yAxisLabels2D = 0
annot.xAxisTitle2D = 0
annot.yAxisTitle2D = 0
SetAnnotationAttributes(annot)
title = CreateAnnotationObject("Text2D")
title.text = options["CURVE_TITLE"]
title.position = (0.11, 0.90)
title.width = 0.01 * len(title.text) # for now...
title.fontBold = 1
# Save the frames. This will be done by some other thing so the
# will have the viewport names worked in.
cb_data = (nts, Sequence2Frames_clip_cb, (nts, clip, extents[0], extents[1], vc))
ret = self.IterateCallbackAndSaveFrames(cb_data, "seq2", formats, percents, "Generating sequence 2 frames")
title.Delete()
DeleteAllPlots()
self.Debug(1, "OverlayCurveMovieTemplate.Sequence2Frames: end")
return (ret, "seq2", GetAnnotationAttributes().backgroundColor)
###########################################################################
# Function: HandleScriptingSequence
#
# Purpose:
# This method invokes the appropriate routine for creating sequence
# frames.
#
# Programmer: Brad Whitlock
# Creation: Thu Nov 16 11:46:31 PDT 2006
#
# Modifications:
#
###########################################################################
def HandleScriptingSequence(self, seqName, formats, percents):
ret = 0
if seqName == "SEQUENCE_1":
ret = self.Sequence1Frames(formats, percents)
elif seqName == "SEQUENCE_2":
ret = self.Sequence2Frames(formats, percents)
return ret
# Public
def InstantiateMovieTemplate(moviemaker, templateReader):
return OverlayCurveMovieTemplate(moviemaker, templateReader)
This diff is collapsed.
<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
<class>SEQUENCE_2</class>
<widget class="QWidget">
<property name="name">
<cstring>SEQUENCE_2</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>545</width>
<height>252</height>
</rect>
</property>
<property name="caption">
<string>Curve properties</string>
</property>
<widget class="QLayoutWidget">
<property name="name">
<cstring>layout8</cstring>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>523</width>
<height>114</height>
</rect>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="spacing">
<number>10</number>
</property>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>CurveVariableLabel</cstring>
</property>
<property name="text">
<string>Curve variable</string>
</property>
</widget>
<widget class="QLabel" row="2" column="0">
<property name="name">
<cstring>CurveTitleLabel</cstring>
</property>
<property name="text">
<string>Curve title</string>
</property>
</widget>
<spacer row="3" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>spacer4</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>521</width>
<height>20</height>
</size>
</property>
</spacer>
<widget class="QvisFileLineEdit" row="0" column="1">
<property name="name">
<cstring>CURVE_DATABASE</cstring>
</property>
</widget>
<widget class="QLineEdit" row="1" column="1">
<property name="name">
<cstring>CURVE_VARIABLE</cstring>
</property>
</widget>
<widget class="QLineEdit" row="2" column="1">
<property name="name">
<cstring>CURVE_TITLE</cstring>
</property>
</widget>
<widget class="QLabel" row="0" column="0">
<property name="name">
<cstring>CurveDatabaseLabel</cstring>
</property>
<property name="text">
<string>Curve database</string>
</property>
</widget>
</grid>
</widget>
<spacer>
<property name="name">
<cstring>spacer1</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>50</width>
<height>80</height>
</size>
</property>
<property name="geometry">
<rect>
<x>240</x>
<y>150</y>
<width>50</width>
<height>80</height>
</rect>
</property>
</spacer>
</widget>
<customwidgets>
<customwidget>
<class>QvisFileLineEdit</class>
<header location="global">/data_vobs/VisIt/gui/QvisFileLineEdit.h</header>
<sizehint>
<width>-1</width>
<height>-1</height>
</sizehint>
<container>0</container>
<sizepolicy>
<hordata>5</hordata>
<verdata>5</verdata>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<pixmap>image0</pixmap>
<signal>returnPressed()</signal>
<signal>textChanged(const QString &amp;)</signal>
</customwidget>
</customwidgets>
<images>
<image name="image0">
<data format="XPM.GZ" length="23078">789ced9b6b73d3461486bff32b3c9c6f4c678b6fb2359d7e20dc0a49801020814e3fac242b4ec8855c49d2e97fef39cfc68e6c39d4833bd31a490fd87eb5672f3eefee6a13869f1f34b6dfac371efc7ceff4cc9feda68d74e84f1a0fb2f38383abdffff8f5cf7bf75b9d7ea3d36c34bbfd46ebfe4ff7ee3bdf481bf2900bdd43370df40aba65989621ba6d50be8aee18945fa0bb06e50fd191817e86ee19e8d7e8be61da5fa26383f63ea0bd417ce83f31d07be8d440f7d19941fd0c3d30280fe3cb0dfadb37dde4a2fc31ba65a0bfa2db06fa10dd31687f03dd35286fa22383f21ced0dcadfa11303fd129d19c49fa30706fac434e9c71f394273a13fa13b06dfe7141d1994e36fab6fd05f848e0de2e9af95189487fa0383faefd1b9816e9bc67ec6e3190fe9217ff205dd32d04fd05d8378878e0cca3fa3fb069afedbb181663eb4bdc1f8b6d089817e854e0de2f1a79d19941fa37383f28fa699ae219f311a43d1299a84529ffc76ba061abf3b9141bca07b06e5f8d5e91b940fd0de40339e4e62101fca5303fd163d30d0617cb941fd03d32caf907ffa67fa85f1efa25b06f5c93fe967fe7afce94606f1ccff6ecf20fe113a362867be76bd41fd2b7466109fa0738372be3fd33f8c87f5c0740cf381f58ffd8c47988fa433ac27da8bb8688ff51b2506e5acc72835d08c27ca0cf453f4c040b3bfb0dd04bfd9cf7a2d83f6f103fb42ff2d3409e1fb919f5edf4087f2d840b33ff5bc81663df43203cdfc65f985fed87f682ee41bbffaa981663df63383f1b01ff77303cd7e11770cf40b3486519ff9114706fdb1be622ee2597f7162504e3ee2d4a07c139d1bb447fbbe6510cf7cf59181667ff17d037d868e0deaefa01303cd7ee80706fdb1dfb2fd84f9fa1ccd0247b3ffb05cc2fec67e9f740dcaf13be91bb4d7417351be8e4e0dea93ef24334c6f30de6460509ff1f23809f385fed2a6417bccc7b465d01efb0dcb378c8ff9c9f40cf909edf50cdae379997a8372e63bc30bf39bf1a65ce8df4cf3380beb9dfcb1fcc2f7df46b3008867fd32fdc2fc62bfcbbc815e439300f41b746aa0c95fc685663fcc06069a7c65b98166bef0b8223f9e781e1f61bde3e7a06d10df45b3c1117f8dee1a9407cd0246337f073d83f6384f0c6203cd7e897d613ef3fd196e583f3c1f065c68f2c5e33ff8cbf3246f1ad4e77cc1e32ecc47f64b1e1f61bfe2fbb31d87f5c77983ed8ff10bf9cc2383faf897f70ccac93fcb39cc57f2c1720beb85e76bee0dcac9479e188c8ff59da706f1ec7ff9c040f33cc8b9c2fcaea912b5e7d5a3f6bc7ad49e578fdaf3ea517b5e3d6acfab47edf98f84936fe04751d39ebba4664911f3fcced9907cd3735fb384a40b7afead1da2e6ff495a7b5e39d2daf30559be1ca4b5e70bb27c39486bcf1764f97290d69e2fc8f2e520fd973ccfdc60aefe72b733ced5b0541a5ab98d99c5bc3dcd4f6871d7ede9983e1746366b8465aaebf9be3b98abbfe1b8ceac8c865686dfcce3bc3dcd4f68f1507b3d725ff4d3b13bb9738465aaebf9a93bbbc9d2b9bb705fdda5bb527ded1ee9e715f7d83da1fca97ba631cfdd6f37b12fdc4bb7aa395e2bb4528c5977af54bdd6d7f5a99edeb80dbdbfe7deba4dee9623adfd4bfdfbcebd771fd4d155b7e5b6f5fe47f7c93d744dd772ed718b1ded2ff4fac595d7f9748dc9beabea79d7453759eab9be8b6da58a73227a47bc24926ac9b1967fbdf94d50d8417b92c940728d490bad8c636447866e4576655767cd8aec157b92cf5a6b5f0ef4f550d5ac486d438ee44b18931ccb89ea53399373b990af72a9ea6ad4a25c8f7e47258fa63d2fd798ecbbaa9eeb9f95519e75ad883cd67c3cd1f7a7f2ccd6823cd7fb874414f7762fb69637f5d3c5442ba3984f1af1829297fa69b2a75519caaaee25fbe819918ce55ad6e442efe8da9757aaf774267a79adea8d6c681b6f67f43aed79a9c654df55f57cf76647f59a8d6b7d6feb7a7ba6f7af6553dec97bdd19bdaedfa9ccca07deaf46391eb7328ab199b345c9f668ce8c62e42373e693fb200f67478edbb7d6ae461e4a53efb7745e3e97b67eeacce875daf3728dc9be2be9b9742597b5a2e7eaf510cf23bdf3517a9aa9199e8f4f4821b7b7ad8c620ec74e6e05276f63a4af2fb1eedadebb599185f6277af452fcd706ef67f43ae5f9748d52df95f45c3fc5e36c793d31b1b7930f7db753914ffed9f3422b3731761a086774dbb1ed2c5d8839d2f39ff85463576745dee979a623e3673d9ffb1d3f2cf75af27caac674dfcbecb9dff57b7e6ffa7dae75def29fc7d9b273d901f9b3e7eba9bebfd2dd51d7a1df1f67f6cc1f943d2fb4328ac974d718ea89ff899ecb86feb018e38ff45c15793ba1d9fa2e45dee979a2911bfed89fb8157faacfe8c95e67793e55a3d4f7327b7e66ab74fa7d1ecffdb9cef9db6c9dbbbedff717f60c95757fa44ff6c8ede869de7b5be95b8573fb84e78556c6317e570efda5bf74c7e12c5e88d9d6b3fe6b3d9f1deb4f52528ebccb737d7dafcfe5551de195bf9e68f10ecfa76b94faaea4e705fef1b718fe916cfa15595b34e67fc4127bbed0cfe7b7df7f9edf5cfd5854dc733d4bc5df358a65a6e29e5792e5cb415a7bbe20cb9783b4f6bc72a40b799ed62c25dfeff97f3d5f6bbe9beff5bc669951e7effe7f2eb5e73f24c57f392a338aaa3daf1eb5e7d5a3f6bc7ad49e578fdaf3ea71ffaf5feefd0d48eadb21</data>
</image>
</images>
<layoutdefaults spacing="6" margin="11"/>
<includehints>
<includehint>qvisfilelineedit.h</includehint>
</includehints>
</UI>
<?xml version="1.0"?>
<Object name="TemplateOptions">
<Field name="VERSION" type="string">1.5.3</Field>
<Field name="TEMPLATEFILE" type="string">curveoverlay_ref.py</Field>
<Field name="TITLE" type="string">Reflected Curve Overlay 2D </Field>
<Field name="DESCRIPTION" type="string">This template displays two reflected 2D plots in one viewport while showing a 1D curve in another viewport.</Field>
<Field name="PREVIEWIMAGE" type="string">curveoverlay_ref_preview.bmp</Field>
<Object name="VIEWPORTS">
<Object name="Viewport 1">
<Field name="coordinates" type="floatArray" length="4">0. 0. 1. 1.</Field>
<Field name="compositing" type="int">0</Field>
<Field name="opacity" type="float">1.</Field>