← Back to team overview

dolfin team mailing list archive

Re: VTK and discontinuous elements

 

It works fine! (I have not tried with tetrahedral elements) //Dag

> Dag, can you confirm that this works for you as well?
>
> If so, I will add it.
>
> Thanks
> /Anders
>
> On Tue, Oct 10, 2006 at 11:37:23AM +0200, Minh Do Quang wrote:
>> Hi,
>>
>> I did some changes in OpenDXFile.cpp in order to work with triangles.
>> Let's see the attachment for both source code and the DX net file.
>>
>> Regards,
>> / Minh
>>
>> Dag Lindbo wrote:
>>
>> >Hi all,
>> >
>> >Am I right to conclude that Paraview will fail to produce a sensible
>> >visualization of a function on a discontinuous Lagrange element of
>> order >
>> >0? I guess this has to do with how the degrees of freedom are placed on
>> >such an element. Anyway, it's not very important for me to do these
>> >visualizations - but if someone has a neat way to do it I would be glad
>> to
>> >hear.
>> >
>> >By the way, is there a particular reason for only supporting
>> tetrahedral
>> >cells in the OpenDX output format? If not, I might get around to
>> extending
>> >to triangles (since I really like DX).
>> >
>> >Best regards,
>> >Dag Lindbo
>> >
>> >_______________________________________________
>> >DOLFIN-dev mailing list
>> >DOLFIN-dev@xxxxxxxxxx
>> >http://www.fenics.org/mailman/listinfo/dolfin-dev
>> >
>> >
>>
>>
>
>> // Copyright (C) 2003-2006 Johan Hoffman and Anders Logg.
>> // Licensed under the GNU GPL Version 2.
>> //
>> // Modified by Minh Do-Quang 2006
>> //
>> // First added:  2003-07-15
>> // Last changed: 2006-09-15
>>
>> #include <stdio.h>
>> #include <dolfin/ParameterSystem.h>
>> #include <dolfin/Mesh.h>
>> #include <dolfin/Function.h>
>> #include <dolfin/dolfin_log.h>
>> #include <dolfin/OpenDXFile.h>
>>
>> using namespace dolfin;
>>
>> //-?---------------------------------------------------------------------------
>> OpenDXFile::OpenDXFile(const std::string filename) :
>>   GenericFile(filename),
>>   save_each_mesh(dolfin::get("save each mesh")),
>>   event_saving_mesh("Saving mesh to OpenDX file."),
>>   event_saving_function("Saving function to OpenDX file.")
>> {
>>   type = "OpenDX";
>>   series_pos = 0;
>> }
>> //-?---------------------------------------------------------------------------
>> OpenDXFile::~OpenDXFile()
>> {
>>   // Do nothing
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::operator<<(Mesh& mesh)
>> {
>>   event_saving_mesh();
>>
>>   // Open file
>>   FILE* fp = fopen(filename.c_str(), "r+");
>>   fseek(fp, 0L, SEEK_END);
>>
>>   // Write header first time
>>   if ( ftell(fp) == 0 )
>>     writeHeader(fp);
>>
>>   // Write mesh
>>   writeMesh(fp, mesh);
>>
>>   // Write mesh data
>>   writeMeshData(fp, mesh);
>>
>>   // Close file
>>   fclose(fp);
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::operator<<(Function& u)
>> {
>>   event_saving_function();
>>
>>   // Open file
>>   FILE* fp = fopen(filename.c_str(), "r+");
>>   fseek(fp, 0L, SEEK_END);
>>
>>   // Remove previous time series
>>   if ( frames.size() > 0 )
>>     removeSeries(fp);
>>
>>   // Write header first time
>>   if ( ftell(fp) == 0 )
>>     writeHeader(fp);
>>
>>   // Write mesh
>>   if ( frames.size() == 0 || save_each_mesh )
>>     writeMesh(fp, u.mesh());
>>
>>   // Write function
>>   writeFunction(fp, u);
>>
>>   // Write time series
>>   writeSeries(fp, u);
>>
>>   // Close file
>>   fclose(fp);
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::writeHeader(FILE* fp)
>> {
>>   fprintf(fp,"# Output from DOLFIN version %s.\n", DOLFIN_VERSION);
>>   fprintf(fp,"# Format intended for use with OpenDX (Data
>> Explorer).\n");
>>   fprintf(fp,"#\n");
>>   fprintf(fp,"\n");
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::writeMesh(FILE* fp, Mesh& mesh)
>> {
>>   int meshdim, celldim;
>>   if( mesh.type() == Mesh::tetrahedra ) {
>>     meshdim = 3;
>>     celldim = 4;
>>   } else {
>>     meshdim = 2;
>>     celldim = 3;
>>   }
>>
>>   // Write vertices
>>   fprintf(fp, "# A list of all vertex positions\n");
>>   fprintf(fp, "object \"vertices %d\" class array type float rank 1
>> shape %d items %d lsb binary data follows\n",
>> 	    (int)frames.size(), meshdim, mesh.numVertices());
>>
>>   for (VertexIterator n(mesh); !n.end(); ++n)
>>   {
>>     Point p = n->coord();
>>
>>     float x = (float) p.x;
>>     float y = (float) p.y;
>>     float z = (float) p.z;
>>
>>     fwrite(&x, sizeof(float), 1, fp);
>>     fwrite(&y, sizeof(float), 1, fp);
>>     if ( mesh.type() == Mesh::tetrahedra )
>>       fwrite(&z, sizeof(float), 1, fp);
>>   }
>>   fprintf(fp,"\n\n");
>>
>>   // Write cells
>>   fprintf(fp, "# A list of all cells (connections)\n");
>>   fprintf(fp, "object \"cells %d\" class array type int rank 1 shape %d
>> items %d lsb binary data follows\n",
>> 	  (int)frames.size(), celldim, mesh.numCells());
>>
>>   for (CellIterator c(mesh); !c.end(); ++c)
>>   {
>>     for (VertexIterator n(c); !n.end(); ++n)
>>     {
>>       int id  = n->id();
>>       fwrite(&id, sizeof(int), 1, fp);
>>     }
>>   }
>>   fprintf(fp, "\n");
>>   if ( mesh.type() == Mesh::tetrahedra )
>>     fprintf(fp, "attribute \"element type\" string \"tetrahedra\"\n");
>>   else if ( mesh.type() == Mesh::triangles )
>>     fprintf(fp, "attribute \"element type\" string \"triangles\"\n");
>>   fprintf(fp, "attribute \"ref\" string \"positions\"\n");
>>   fprintf(fp, "\n");
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::writeMeshData(FILE* fp, Mesh& mesh)
>> {
>>   // Write data for a given mesh to create an object that can be
>> visualized
>>   // when no data is associated with the mesh. This is necessary when we
>> only
>>   // want to save the mesh.
>>
>>   // Check that we don't try to write mesh data at the same time as we
>>   // write a time series
>>   cout << "writeMeshData "<<frames.size()<<endl;
>>   if ( frames.size() > 0 )
>>     dolfin_error("Mesh data and time series cannot be mixed for OpenDX
>> file format.");
>>
>>   // Write data (cell diameter)
>>   fprintf(fp,"# Cell diameter\n");
>>   fprintf(fp,"object \"diameter\" class array type float rank 0 items %d
>> lsb binary data follows\n",
>> 	  mesh.numCells());
>>
>>   for (CellIterator c(mesh); !c.end(); ++c)
>>   {
>>     float value = static_cast<float>(c->diameter());
>>     fwrite(&value, sizeof(float), 1, fp);
>>   }
>>   fprintf(fp, "\n");
>>   fprintf(fp, "attribute \"dep\" string \"connections\"\n");
>>   fprintf(fp, "\n");
>>
>>   // Write the mesh
>>   fprintf(fp, "# The mesh\n");
>>   fprintf(fp, "object \"Mesh\" class field\n");
>>   fprintf(fp, "component \"positions\" value \"vertices 0\"\n");
>>   fprintf(fp, "component \"connections\" value \"cells 0\"\n");
>>   fprintf(fp, "component \"data\" value \"diameter\"\n");
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::writeFunction(FILE* fp, Function& u)
>> {
>>   // Write header for object
>>   fprintf(fp,"# Values for [%s] at nodal points, frame %d\n",
>> u.label().c_str(), (int)frames.size());
>>   fprintf(fp,"object \"data %d\" class array type float rank 1 shape %d
>> items %d lsb binary data follows\n",
>> 	  (int)frames.size(), u.vectordim(), u.mesh().numVertices());
>>
>>   // Write data
>>   for (VertexIterator n(u.mesh()); !n.end(); ++n)
>>   {
>>     for(unsigned int i=0; i<u.vectordim(); i++) {
>>       float value = static_cast<float>(u(*n, i));
>>       fwrite(&value, sizeof(float), 1, fp);
>>     }
>>   }
>>   fprintf(fp,"\n");
>>   fprintf(fp,"attribute \"dep\" string \"positions\"\n\n");
>>
>>   // Write field
>>   fprintf(fp,"# Field for [%s], frame %d\n", u.label().c_str(),
>> (int)frames.size());
>>   fprintf(fp,"object \"field %d\" class field\n", (int)frames.size());
>>   if ( save_each_mesh )
>>     fprintf(fp,"component \"positions\" value \"vertices %d\"\n",
>> (int)frames.size());
>>   else
>>     fprintf(fp,"component \"positions\" value \"vertices 0\"\n");
>>   if ( save_each_mesh )
>>     fprintf(fp,"component \"connections\" value \"cells %d\"\n",
>> (int)frames.size());
>>   else
>>     fprintf(fp,"component \"connections\" value \"cells 0\"\n");
>>   fprintf(fp,"component \"data\" value \"data %d\"\n\n",
>> (int)frames.size());
>>
>>   // Add the new frame
>>   Frame frame(u.time());
>>   frames.push_back(frame);
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::writeSeries(FILE* fp, Function& u)
>> {
>>   // Get position in file at start of series
>>   series_pos = ftell(fp);
>>
>>   // Write the time series
>>   fprintf(fp,"# Time series for [%s]\n", u.label().c_str());
>>   fprintf(fp,"object \"Time series\" class series\n");
>>
>>   for (unsigned int i = 0; i < frames.size(); i++)
>>   {
>>     fprintf(fp,"member %u value \"field %u\" position %f\n",
>> 	    i, i, frames[i].time);
>>   }
>>
>>   fprintf(fp,"\n");
>> }
>> //-?---------------------------------------------------------------------------
>> void OpenDXFile::removeSeries(FILE* fp)
>> {
>>   // Remove the previous series (the new one will be placed at the end).
>>   // This makes sure that we have a valid dx-file even if we kill the
>>   // program after a few frames. Note that if someone puts a "#"
>>   // inside a comment we are in trouble.
>>
>>   fseek(fp, series_pos, SEEK_SET);
>>   fflush(fp);
>> }
>> //-?---------------------------------------------------------------------------
>> // OpenDXFile::Frame
>> //-?---------------------------------------------------------------------------
>> OpenDXFile::Frame::Frame(real time) : time(time)
>> {
>>   // Do nothing
>> }
>> //-?---------------------------------------------------------------------------
>> OpenDXFile::Frame::~Frame()
>> {
>>   // Do nothing
>> }
>>
>
>> //
>> // time: Fri Sep 15 17:50:13 2006
>> //
>> // version: 3.2.0 (format), 4.4.0 (DX)
>> //
>> //
>> // MODULE main
>> // workspace: width = 389, height = 294
>> // layout: snap = 0, width = 50, height = 50, align = NN
>> //
>> macro main(
>> ) -> (
>> ) {
>>     //
>>     // node Import[1]: x = 24, y = 23, inputs = 6, label = Import
>>     // input[1]: defaulting = 0, visible = 1, type = 32, value =
>> "poisson.dx"
>>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "field
>> 0"
>>     //
>> main_Import_1_out_1 =
>>     Import(
>>     main_Import_1_in_1,
>>     main_Import_1_in_2,
>>     main_Import_1_in_3,
>>     main_Import_1_in_4,
>>     main_Import_1_in_5,
>>     main_Import_1_in_6
>>     ) [instance: 1, cache: 1];
>>     //
>>     // node AutoColor[1]: x = 174, y = 232, inputs = 10, label =
>> AutoColor
>>     //
>> main_AutoColor_1_out_1,
>> main_AutoColor_1_out_2 =
>>     AutoColor(
>>     main_Import_1_out_1,
>>     main_AutoColor_1_in_2,
>>     main_AutoColor_1_in_3,
>>     main_AutoColor_1_in_4,
>>     main_AutoColor_1_in_5,
>>     main_AutoColor_1_in_6,
>>     main_AutoColor_1_in_7,
>>     main_AutoColor_1_in_8,
>>     main_AutoColor_1_in_9,
>>     main_AutoColor_1_in_10
>>     ) [instance: 1, cache: 1];
>>     //
>>     // node Image[1]: x = 311, y = 218, inputs = 49, label = Image
>>     // input[1]: defaulting = 0, visible = 0, type = 32, value =
>> "Image_1"
>>     // input[4]: defaulting = 0, visible = 0, type = 1, value = 1
>>     // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.5 0.5
>> 0]
>>     // input[6]: defaulting = 0, visible = 0, type = 8, value = [0.5 0.5
>> 3.55379]
>>     // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.90447
>>     // input[8]: defaulting = 0, visible = 0, type = 1, value = 640
>>     // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.75
>>     // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0]
>>     // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0
>>     // input[12]: defaulting = 0, visible = 0, type = 1, value = 0
>>     // input[14]: defaulting = 0, visible = 0, type = 1, value = 1
>>     // input[15]: defaulting = 1, visible = 0, type = 32, value = "none"
>>     // input[16]: defaulting = 1, visible = 0, type = 32, value = "none"
>>     // input[17]: defaulting = 1, visible = 0, type = 1, value = 1
>>     // input[18]: defaulting = 1, visible = 0, type = 1, value = 1
>>     // input[19]: defaulting = 0, visible = 0, type = 1, value = 0
>>     // input[29]: defaulting = 1, visible = 0, type = 3, value = 0
>>     // depth: value = 24
>>     // window: position = (0.5419,0.4650), size = 0.4088x0.4350
>>     // internal caching: 1
>>     // interaction mode = NONE
>>     //
>> main_Image_1_out_1,
>> main_Image_1_out_2,
>> main_Image_1_out_3 =
>>     Image(
>>     main_Image_1_in_1,
>>     main_AutoColor_1_out_1,
>>     main_Image_1_in_3,
>>     main_Image_1_in_4,
>>     main_Image_1_in_5,
>>     main_Image_1_in_6,
>>     main_Image_1_in_7,
>>     main_Image_1_in_8,
>>     main_Image_1_in_9,
>>     main_Image_1_in_10,
>>     main_Image_1_in_11,
>>     main_Image_1_in_12,
>>     main_Image_1_in_13,
>>     main_Image_1_in_14,
>>     main_Image_1_in_15,
>>     main_Image_1_in_16,
>>     main_Image_1_in_17,
>>     main_Image_1_in_18,
>>     main_Image_1_in_19,
>>     main_Image_1_in_20,
>>     main_Image_1_in_21,
>>     main_Image_1_in_22,
>>     main_Image_1_in_23,
>>     main_Image_1_in_24,
>>     main_Image_1_in_25,
>>     main_Image_1_in_26,
>>     main_Image_1_in_27,
>>     main_Image_1_in_28,
>>     main_Image_1_in_29,
>>     main_Image_1_in_30,
>>     main_Image_1_in_31,
>>     main_Image_1_in_32,
>>     main_Image_1_in_33,
>>     main_Image_1_in_34,
>>     main_Image_1_in_35,
>>     main_Image_1_in_36,
>>     main_Image_1_in_37,
>>     main_Image_1_in_38,
>>     main_Image_1_in_39,
>>     main_Image_1_in_40,
>>     main_Image_1_in_41,
>>     main_Image_1_in_42,
>>     main_Image_1_in_43,
>>     main_Image_1_in_44,
>>     main_Image_1_in_45,
>>     main_Image_1_in_46,
>>     main_Image_1_in_47,
>>     main_Image_1_in_48,
>>     main_Image_1_in_49
>>     ) [instance: 1, cache: 1];
>>     //
>>     // node Print[1]: x = 33, y = 119, inputs = 3, label = Print
>>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "o"
>>     //
>>     Print(
>>     main_Import_1_out_1,
>>     main_Print_1_in_2,
>>     main_Print_1_in_3
>>     ) [instance: 1, cache: 1];
>>     //
>>     // node Select[1]: x = 154, y = 106, inputs = 3, label = Select
>>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "field
>> 0"
>>     //
>> main_Select_1_out_1 =
>>     Select(
>>     main_Import_1_out_1,
>>     main_Select_1_in_2,
>>     main_Select_1_in_3
>>     ) [instance: 1, cache: 1];
>>     //
>>     // node ShowConnections[1]: x = 256, y = 79, inputs = 1, label =
>> ShowConnections
>>     //
>> main_ShowConnections_1_out_1 =
>>     ShowConnections(
>>     main_Import_1_out_1
>>     ) [instance: 1, cache: 1];
>> // network: end of macro body
>> CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2);
>> }
>> main_Import_1_in_1 = "poisson.dx";
>> main_Import_1_in_2 = "field 0";
>> main_Import_1_in_3 = NULL;
>> main_Import_1_in_4 = NULL;
>> main_Import_1_in_5 = NULL;
>> main_Import_1_in_6 = NULL;
>> main_Import_1_out_1 = NULL;
>> main_AutoColor_1_in_2 = NULL;
>> main_AutoColor_1_in_3 = NULL;
>> main_AutoColor_1_in_4 = NULL;
>> main_AutoColor_1_in_5 = NULL;
>> main_AutoColor_1_in_6 = NULL;
>> main_AutoColor_1_in_7 = NULL;
>> main_AutoColor_1_in_8 = NULL;
>> main_AutoColor_1_in_9 = NULL;
>> main_AutoColor_1_in_10 = NULL;
>> main_AutoColor_1_out_1 = NULL;
>> macro Image(
>>         id,
>>         object,
>>         where,
>>         useVector,
>>         to,
>>         from,
>>         width,
>>         resolution,
>>         aspect,
>>         up,
>>         viewAngle,
>>         perspective,
>>         options,
>>         buttonState = 1,
>>         buttonUpApprox = "none",
>>         buttonDownApprox = "none",
>>         buttonUpDensity = 1,
>>         buttonDownDensity = 1,
>>         renderMode = 0,
>>         defaultCamera,
>>         reset,
>>         backgroundColor,
>>         throttle,
>>         RECenable = 0,
>>         RECfile,
>>         RECformat,
>>         RECresolution,
>>         RECaspect,
>>         AAenable = 0,
>>         AAlabels,
>>         AAticks,
>>         AAcorners,
>>         AAframe,
>>         AAadjust,
>>         AAcursor,
>>         AAgrid,
>>         AAcolors,
>>         AAannotation,
>>         AAlabelscale,
>>         AAfont,
>>         interactionMode,
>>         title,
>>         AAxTickLocs,
>>         AAyTickLocs,
>>         AAzTickLocs,
>>         AAxTickLabels,
>>         AAyTickLabels,
>>         AAzTickLabels,
>>         webOptions) -> (
>>         object,
>>         camera,
>>         where)
>> {
>>     ImageMessage(
>>         id,
>>         backgroundColor,
>>         throttle,
>>         RECenable,
>>         RECfile,
>>         RECformat,
>>         RECresolution,
>>         RECaspect,
>>         AAenable,
>>         AAlabels,
>>         AAticks,
>>         AAcorners,
>>         AAframe,
>>         AAadjust,
>>         AAcursor,
>>         AAgrid,
>>         AAcolors,
>>         AAannotation,
>>         AAlabelscale,
>>         AAfont,
>>         AAxTickLocs,
>>         AAyTickLocs,
>>         AAzTickLocs,
>>         AAxTickLabels,
>>         AAyTickLabels,
>>         AAzTickLabels,
>>         interactionMode,
>>         title,
>>         renderMode,
>>         buttonUpApprox,
>>         buttonDownApprox,
>>         buttonUpDensity,
>>         buttonDownDensity) [instance: 1, cache: 1];
>>     autoCamera =
>>         AutoCamera(
>>             object,
>>             "front",
>>             object,
>>             resolution,
>>             aspect,
>>             [0,1,0],
>>             perspective,
>>             viewAngle,
>>             backgroundColor) [instance: 1, cache: 1];
>>     realCamera =
>>         Camera(
>>             to,
>>             from,
>>             width,
>>             resolution,
>>             aspect,
>>             up,
>>             perspective,
>>             viewAngle,
>>             backgroundColor) [instance: 1, cache: 1];
>>     coloredDefaultCamera =
>> 	 UpdateCamera(defaultCamera,
>>             background=backgroundColor) [instance: 1, cache: 1];
>>     nullDefaultCamera =
>>         Inquire(defaultCamera,
>>             "is null + 1") [instance: 1, cache: 1];
>>     resetCamera =
>>         Switch(
>>             nullDefaultCamera,
>>             coloredDefaultCamera,
>>             autoCamera) [instance: 1, cache: 1];
>>     resetNull =
>>         Inquire(
>>             reset,
>>             "is null + 1") [instance: 2, cache: 1];
>>     reset =
>>         Switch(
>>             resetNull,
>>             reset,
>>             0) [instance: 2, cache: 1];
>>     whichCamera =
>>         Compute(
>>             "($0 != 0 || $1 == 0) ? 1 : 2",
>>             reset,
>>             useVector) [instance: 1, cache: 1];
>>     camera = Switch(
>>             whichCamera,
>>             resetCamera,
>>             realCamera) [instance: 3, cache: 1];
>>     AAobject =
>>         AutoAxes(
>>             object,
>>             camera,
>>             AAlabels,
>>             AAticks,
>>             AAcorners,
>>             AAframe,
>>             AAadjust,
>>             AAcursor,
>>             AAgrid,
>>             AAcolors,
>>             AAannotation,
>>             AAlabelscale,
>>             AAfont,
>>             AAxTickLocs,
>>             AAyTickLocs,
>>             AAzTickLocs,
>>             AAxTickLabels,
>>             AAyTickLabels,
>>             AAzTickLabels) [instance: 1, cache: 1];
>>     switchAAenable = Compute("$0+1",
>> 	     AAenable) [instance: 2, cache: 1];
>>     object = Switch(
>> 	     switchAAenable,
>> 	     object,
>> 	     AAobject) [instance:4, cache: 1];
>>     SWapproximation_options =
>>         Switch(
>>             buttonState,
>>             buttonUpApprox,
>>             buttonDownApprox) [instance: 5, cache: 1];
>>     SWdensity_options =
>>         Switch(
>>             buttonState,
>>             buttonUpDensity,
>>             buttonDownDensity) [instance: 6, cache: 1];
>>     HWapproximation_options =
>>         Format(
>>             "%s,%s",
>>             buttonDownApprox,
>>             buttonUpApprox) [instance: 1, cache: 1];
>>     HWdensity_options =
>>         Format(
>>             "%d,%d",
>>             buttonDownDensity,
>>             buttonUpDensity) [instance: 2, cache: 1];
>>     switchRenderMode = Compute(
>> 	     "$0+1",
>> 	     renderMode) [instance: 3, cache: 1];
>>     approximation_options = Switch(
>> 	     switchRenderMode,
>>             SWapproximation_options,
>> 	     HWapproximation_options) [instance: 7, cache: 1];
>>     density_options = Switch(
>> 	     switchRenderMode,
>>             SWdensity_options,
>>             HWdensity_options) [instance: 8, cache: 1];
>>     renderModeString = Switch(
>>             switchRenderMode,
>>             "software",
>>             "hardware")[instance: 9, cache: 1];
>>     object_tag = Inquire(
>>             object,
>>             "object tag")[instance: 3, cache: 1];
>>     annoted_object =
>>         Options(
>>             object,
>>             "send boxes",
>>             0,
>>             "cache",
>>             1,
>>             "object tag",
>>             object_tag,
>>             "ddcamera",
>>             whichCamera,
>>             "rendering approximation",
>>             approximation_options,
>>             "render every",
>>             density_options,
>>             "button state",
>>             buttonState,
>>             "rendering mode",
>>             renderModeString) [instance: 1, cache: 1];
>>     RECresNull =
>>         Inquire(
>>             RECresolution,
>>             "is null + 1") [instance: 4, cache: 1];
>>     ImageResolution =
>>         Inquire(
>>             camera,
>>             "camera resolution") [instance: 5, cache: 1];
>>     RECresolution =
>>         Switch(
>>             RECresNull,
>>             RECresolution,
>>             ImageResolution) [instance: 10, cache: 1];
>>     RECaspectNull =
>>         Inquire(
>>             RECaspect,
>>             "is null + 1") [instance: 6, cache: 1];
>>     ImageAspect =
>>         Inquire(
>>             camera,
>>             "camera aspect") [instance: 7, cache: 1];
>>     RECaspect =
>>         Switch(
>>             RECaspectNull,
>>             RECaspect,
>>             ImageAspect) [instance: 11, cache: 1];
>>     switchRECenable = Compute(
>>           "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3)
>> : 4",
>>             RECenable,
>>             switchRenderMode,
>>             RECresolution,
>>             ImageResolution,
>>             RECaspect,
>> 	     ImageAspect) [instance: 4, cache: 1];
>>     NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject =
>> Route(switchRECenable, annoted_object);
>>     Display(
>>         NoRECobject,
>>         camera,
>>         where,
>>         throttle) [instance: 1, cache: 1];
>>     image =
>>         Render(
>>             RECNoRerenderObject,
>>             camera) [instance: 1, cache: 1];
>>     Display(
>>         image,
>>         NULL,
>>         where,
>>         throttle) [instance: 2, cache: 1];
>>     WriteImage(
>>         image,
>>         RECfile,
>>         RECformat) [instance: 1, cache: 1];
>>     rec_where = Display(
>>         RECNoRerHW,
>>         camera,
>>         where,
>>         throttle) [instance: 1, cache: 0];
>>     rec_image = ReadImageWindow(
>>         rec_where) [instance: 1, cache: 1];
>>     WriteImage(
>>         rec_image,
>>         RECfile,
>>         RECformat) [instance: 1, cache: 1];
>>     RECupdateCamera =
>> 	UpdateCamera(
>> 	    camera,
>> 	    resolution=RECresolution,
>> 	    aspect=RECaspect) [instance: 2, cache: 1];
>>     Display(
>>         RECRerenderObject,
>>         camera,
>>         where,
>>         throttle) [instance: 1, cache: 1];
>>     RECRerenderObject =
>> 	ScaleScreen(
>> 	    RECRerenderObject,
>> 	    NULL,
>> 	    RECresolution,
>> 	    camera) [instance: 1, cache: 1];
>>     image =
>>         Render(
>>             RECRerenderObject,
>>             RECupdateCamera) [instance: 2, cache: 1];
>>     WriteImage(
>>         image,
>>         RECfile,
>>         RECformat) [instance: 2, cache: 1];
>> }
>> main_Image_1_in_1 = "Image_1";
>> main_Image_1_in_3 = "X24,,";
>> main_Image_1_in_4 = 1;
>> main_Image_1_in_5 = [0.5 0.5 0];
>> main_Image_1_in_6 = [0.5 0.5 3.55379];
>> main_Image_1_in_7 = 1.90447;
>> main_Image_1_in_8 = 640;
>> main_Image_1_in_9 = 0.75;
>> main_Image_1_in_10 = [0 1 0];
>> main_Image_1_in_11 = NULL;
>> main_Image_1_in_12 = 0;
>> main_Image_1_in_13 = NULL;
>> main_Image_1_in_14 = 1;
>> main_Image_1_in_15 = NULL;
>> main_Image_1_in_16 = NULL;
>> main_Image_1_in_17 = NULL;
>> main_Image_1_in_18 = NULL;
>> main_Image_1_in_19 = 0;
>> main_Image_1_in_20 = NULL;
>> main_Image_1_in_21 = NULL;
>> main_Image_1_in_22 = NULL;
>> main_Image_1_in_23 = NULL;
>> main_Image_1_in_25 = NULL;
>> main_Image_1_in_26 = NULL;
>> main_Image_1_in_27 = NULL;
>> main_Image_1_in_28 = NULL;
>> main_Image_1_in_29 = NULL;
>> main_Image_1_in_30 = NULL;
>> main_Image_1_in_31 = NULL;
>> main_Image_1_in_32 = NULL;
>> main_Image_1_in_33 = NULL;
>> main_Image_1_in_34 = NULL;
>> main_Image_1_in_35 = NULL;
>> main_Image_1_in_36 = NULL;
>> main_Image_1_in_37 = NULL;
>> main_Image_1_in_38 = NULL;
>> main_Image_1_in_39 = NULL;
>> main_Image_1_in_40 = NULL;
>> main_Image_1_in_41 = NULL;
>> main_Image_1_in_42 = NULL;
>> main_Image_1_in_43 = NULL;
>> main_Image_1_in_44 = NULL;
>> main_Image_1_in_45 = NULL;
>> main_Image_1_in_46 = NULL;
>> main_Image_1_in_47 = NULL;
>> main_Image_1_in_48 = NULL;
>> main_Image_1_in_49 = NULL;
>> main_Print_1_in_2 = "o";
>> main_Print_1_in_3 = NULL;
>> main_Select_1_in_2 = "field 0";
>> main_Select_1_in_3 = NULL;
>> Executive("product version 4 4 0");
>> $sync
>> main();
>>
>
>> _______________________________________________
>> DOLFIN-dev mailing list
>> DOLFIN-dev@xxxxxxxxxx
>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>




Follow ups

References