Open Visualization Data Explorer
Frequently Asked Questions

2004/06/06

The Questions


The Answers

A. Background

  1. What is OpenDX?

    Open Visualization Data Explorer (OpenDX) is an application and development software package for visualizing data, especially 3D data from simulations or acquired from observations. It uses a Graphical User Interface based on X windows and Motif. It comes with a complete set of standard visualization tools for looking at data. These tools include cutting planes, vector line traces, volume rendering, and isosurface/isocontour tools.

    OpenDX is based on code and ideas found in the IBM Visualization Data Explorer program product. On May 18, 1999 IBM announced the withdrawal of the program product. A week later the creation of the IBM Open Visualization Data Explorer was announced in conjunction with the creation of the IBM Deep Computing Institute.


  2. Why was OpenDX created?

    To foster the growth of the scientific visualization community.


  3. How thoroughly tested is OpenDX?

    The IBM Visualization Data Explorer program product was a well-tested, widely used tool. With the release of OpenDX 4.1.3, the open source version has reached the quality level of the release version. OpenDX also supports a larger number of platforms, including linux. When bugs do show up, we try to release patches and new versions as soon as they are available. We count on the participation of the OpenDX community to help find and solve problems.


  4. What are the future plans for OpenDX?


  5. What is the latest version of OpenDX?

    The most recent release of OpenDX is version 4.3.2.


  6. Whom do I contact for support?

    There is no official IBM support for OpenDX. Bug reports and suggestions should be sent via the bug report page. OpenDX hosts their own bug report page. Other questions should be directed to the appropriate OpenDX mailing list.

    Commercial support for OpenDX is, however, available from third parties.


  7. Is there any more information available on OpenDX?

    Yes, there is some legacy documentation available. Hopefully this documentation will be updated and converted to LaTex someday in the near future. Any volunteers?


  8. Where can I get OpenDX?

    The source code is available from IBM's DX pages as well as from OpenDX.org. Binary versions are available from OpenDX.org. Other commercial versions are distributed through vendors; look for more information at OpenDX.org.


  9. How should I get started?

    The best way to understand how to use OpenDX is to purchase the book OpenDX: Paths to Visualization from VIS, Inc. The legacy documentation from the program product contains a step-by-step tutorial to take you through some of the common operations in OpenDX. Also, there is a collection of sample networks which demonstrate the use of most of the modules available for download.


  10. Is there a public repository for user contributed modules?

    The most comprehensive area for information on OpenDX is at OpenDX.org. Cornell University has a collection of contributed modules, teaching materials, and other materials which can be reached from the communities link at OpenDX.org.


  11. How compatible is OpenDX with IBM Visualization Data Explorer program product?

    OpenDX should be 100% compatitble with files and interfaces of the 3.1.4b version of IBM Visualization Data Explorer propram product.


  12. Is OpenDX Year 2000 compliant?

    Yes, we believe that OpenDX is Year 2000 compliant.


  13. What kinds of machines does OpenDX run on?

    There are ports for almost all UNIX based operating systems as well as Microsoft Windows.


  14. Does OpenDX run on the Mac OS or Mac OS X?

    Yes. Starting with OpenDX 4.2, it is possible to compile OpenDX for MacOS X. If you'd like a binary version, visit VIS Inc.'s website for more inforamation.


  15. Is there a native Microsoft Windows version?

    Currently OpenDX will run on Microsoft Windows 98-XP but the graphical user interface requires an X server to be running. There have been some demonstrations of code ported to Window's native windowing system, but the amount of work required to port all of DX is large. There are people interested in porting this, but such a large project would require some financial backing. Please contact us at if you're interested in helping out with this or providing some financial backing.


B. Technical Questions

  1. May I include the OpenDX software on a CD or other package I'm distributing?

    The answer to this question can be found in the OpenDX license, which is included in the OpenDX distribution in the file LICENSE. You can also find it on the Web at <http://www.research.ibm.com/dx/srcDownload/license.html>.


  2. What's the best hardware/operating system for OpenDX?

    Good question. The answer is probably, "It depends." OpenDX is memory intensive, so the more memory the better. However, the way the software works limits the amount of physical memory that can be accessed by the program at 2 GB. (It currently does not support 64 bit data address spaces.)


  3. Does OpenDX require a hardware graphics card?

    No, since the OpenDX can render images in software, it does not require a hardware graphics card. However, if you have one, OpenDX can take advantage of it. The ability to do software rendering also means that you can run OpenDX and display the image on another workstation without having to have remote hardware rendering support.


  4. What hardware graphics libraries does OpenDX use?

    It uses GL or OpenGL on IBM and SGI platforms, OpenGL on Suns, Starbase on the HPs, and OpenGL on DEC. The Data General version does not support hardware rendering. OpenDX uses OpenGL on PCs if available.


  5. Can I run OpenDX on a parallel machine?

    Yes, OpenDX exploits shared memory parallelism on SMP machines.


  6. Can I build applications on top of OpenDX?

    While OpenDX is a complete visualization environment, you can also build applications which use portions of OpenDX. For example you can use OpenDX behind the scenes to create your own special-purpose turnkey application with a custom look and feel. For an in-depth description of some of the many ways you can embed OpenDX functionality within your application see the legacy document entitled building applications.


  7. How do I know what version of OpenDX I am running?

    Run "dx -version". It will print out three numbers, one for the User Interface, one for the Executive and one for the script which starts DX. Normally these numbers are all the same. You can also use the "Product Information" option of the Help menu of the Visual Program Editor.


  8. What kind of data does OpenDX handle?

    It handles data on regular grids, warped grids, scattered points and unstructured data (triangular, quadralateral, tetrahedral or cubic meshes). It handles scalar, vector, matrix data; float, integer, short, byte, string data. It handles collections of data (groups, series, multizone grids).


  9. How do I get Import to re-read my data file if I change it outside of OpenDX?

    This is an unfortunate artifact of caching. Since the input of import, the filename, does not change then the module does not run. Logic probably should be added to check on the timestamp of the file, but no one has yet addedd this feature.

    A simple hack is to force Import to reload a file by appending a "space" to the end of the file name. This can be repeated, that is, any new file string will force a new import.

    Alternatively, this can be done programatically by feeding the filename and a dummy integer into a Format module that simply does "%s" and ignores the incoming integer. By bumping the integer one can force a "new" filename that is identical to the previous and forces a reload when the dummy integer changes to a value not previously used.

    The simplest work-around is to use the "Reset Server" option under the Connection Menu. This throws away all the cached information which was saved from previous runs of OpenDX. You could also turn the cache off when OpenDX is started by using the "-cache off" option. These last two options can cause significant performance hits.
  10. How do I see what kind of object something is?

    You can use the Print module. The default is to only print the type of object, but if you set the second parameter to "r", it will recursively print each member object. If the second parameter is "rd", it will also print the first and last 25 data items for each data array. You can also use the VisualObject module in the Debugging category. This will display a hierarchical image of the object. The Describe module (also in the Debugging category) will give you a "plain language" description of your object.


  11. How do I see what the OpenDX file format for something is?

    Use the Export module, connect the output you want to know about to the first input of Export. Set the second input to a temporary filename, and set the third input to "dx text follows". Then execute once and look at the ASCII file to see what the file format for that type of object would be.


  12. Is there an easy way to specify a simple list of numbers?

    For example if you want to specify a list of numbers between 0 and 10 by 2, just type: "0 .. 10 : 2". You can also use the Enumerate module to generate other types of number lists.


  13. What is a "list" in the OpenDX file format?

    A list is the same as an "array".


  14. Why can't I resize the window or use direct interactors when I'm using the Display tool?

    Unless you are using the SuperviseWindow and SuperviseState modules, direct resizing of the window and direct interaction with the image must be performed with the Image tool, which acts something like a combination of AutoCamera and Display. If you are using Display, then to change the image size use the "resolution" and "aspect" parameters to Camera or AutoCamera, and to change viewing directions, change the "to" and "from", or "object" and "direction" parameters to Camera and AutoCamera. The SuperviseWindow and SuperviseState modules allow you to define your own "UserInteractors". For example, if you don't like how the rotate or pan modes works then this capability permits you to define your own version. Check the documentation for SuperviseWindow and SuperviseState and also check the supervise samples.


  15. How do I save an image?

    You can save an image using either the Image tool or Display. If you use the Image tool, you will find options for saving and printing images in the File menu of the Image window. If you use Display, you can use ReadImageWindow. First pass it the "where" output of Display and then pass the output of ReadImageWindow to WriteImage.


  16. How do I get correctly shaped glyphs when I scale my rendered objects?

    This problem is discussed in the documentation for AutoGlyph. There is a macro to do this, see samples/macros/UnsquishGlyph.net, which is used by samples/programs/ScatterData.net.


  17. How do I include multiple user-written modules when starting OpenDX?

    To specify multiple user-written modules on the command line when starting OpenDX, concatenate all of your individual .mdf files together into a single mdf file and use this file at startup. For example if the list of files is contained in a file named "allmodules.mdf" then then you would start OpenDX with the command "dx -mdf allmodules.mdf".


  18. Can I get additional fonts to use within OpenDX?

    Some additional fonts can be downloaded from here. Extracting this archive creates a fonts/urw directory, including fonts in dx format and some sample output. See the included README file for more information.


  19. Can I use 64bit addressing on my sgi?

    There has been some work done with this. If you configure OpenDX with --enable-large-arenas turned on, and compile, you can get some support for 64 bit memory addressing. We are looking for financial support to make this more robust--if you have a funding source possibility, please contact us as support@vizsolutions.com.


  20. Which X-servers for Windows are recommended?

    Out of all the X-servers on the market, Hummingbird's Exceed + Exceed 3D and Starnet's X-Win32 perform the best and offer OpenGL hardware rendering. The cheapast would have to be XFree86 based on cygwin.


C. Building OpenDX

  1. Why won't OpenDX compile with my system's cc?

    If OpenDX source won't compile on your system, it is probably due to one of the following causes:

    The OpenDX developers try to support as many platforms as possible. Unfortunately, they can't test all of the OS platforms there are. If you have verified that none of the above issues is the cause of your problem, please submit a problem report. Be sure to include complete details, such as the compiler & OS versions and exact error messages.


  2. I'm using gcc and I get some compilation errors, what is wrong?

    The gcc compiler parses your system header files and produces a modified subset which it uses for compiling. This behaviour ties gcc tightly to the version of your operating system. So, for example, if you were running IRIX 5.3 when you built gcc and then upgrade to IRIX 6.2 later, you will have to rebuild gcc. Similarly for Solaris 2.4, 2.5, or 2.5.1 when you upgrade to 2.6. Sometimes you can type "gcc -v" and it will tell you the version of the operating system it was built against.

    If you fail to do this, then it is very likely that OpenDX will fail to build. One of the most common errors is with readv, writev, or uio.h. This is not a bug with OpenDX. You will need to re-install gcc.


D. Problems

  1. Why won't it work?

    If you are having trouble with OpenDX, you should take the following steps:


  2. How do I submit a patch?

    We encourage patches from developers. There are two main "types" of patches: small bugfixes and general improvements.

    Bugfixes should be submitting using the OpenDX bug report page.

    In general, the first course of action is to become a member of the opendx-dev@watson.ibm.com mailing list. This indicates to the group that you are closely following the latest OpenDX developments. Your patch file should be generated using either 'diff -c' or 'diff -u' against the most recent tarball. To submit your patch, send email to gabra@us.ibm.com with a Subject: line that starts with [PATCH] and includes a general description of the patch. In the body of the message, the patch should be clearly described and then included at the end of the message. If the patch-file is too long, you can provide a URL for the file instead of the file itself.

    Please be prepared to respond to any questions about your patches and possibly defend your code.


  3. What if the user interface can't connect to server?

    This problem can be caused if OpenDX wasn't installed using the standard install process. If you have to type a pathname in front of the "dx" command to start the User Interface, the User Interface will not be able to start the server part of DX. To fix this, add the "<PREFIX>/bin" directory to your search path.

    The user interface and the server (exec) communicate over sockets. Netwoking must work in order for this process to work completely. There are several reasons why this communictaion may fail. One may be that your hostname does not resolve properly. You can test this by using the ping, and hostname commands to determine if you can ping your own machine or you can try setting the DXHOST environment variable to "unix" to default to the local machine. A second reason may be that you have a firewall running on your system that refuses the socket communication over the IP ports that DX uses. Try shutting off your firewall to see if this fixes the problem.


  4. OpenDX won't run after I took my machine off the network. What should I do?

    Sometimes, renaming /etc/resolv.conf will solve the problem. Don't forget to restore this file when you return to the network. Having entries in /etc/hosts for localhost and LOCALPC may be necessary to run OpenDX when not connected to a network. It may also be the case where your machine name can not be resolved. In these cases, try setting the environment variable DXHOST to localhost.


  5. I get the error: "Error: invalid host permission denied...", followed by "local host: invalid host". What should I do?

    Make sure that the ip address of localhost (127.0.0.1) is in /etc/hosts on a UNIX system or in the HOSTS file on a Windows machine. On a Windows machine, the HOSTS file goes in the same directory as the LMHOSTS file, you can find the specific directory by searching for LMHOSTS.SAM (an example LMHOSTS file).


  6. I get the error "error: cannot attach contiguous shared memory segment". What should I do?

    Check the README file for your specific architecture type. On some systems the default system limits must be changed to allow OpenDX to use more shared memory or a larger data segment. If all else fails, use the -memory flag on OpenDX to limit the amount of memory OpenDX uses.


  7. I'm having problems using more than 512MB of memory on my sgi. What should I do?

    You will need to use systune to increase the limit of shared memory. See README.sgi.


  8. Hardware rendering is slow on my system or I can't do hardware rendering at all. What should I do?

    Backing storage may be unsupported or very slow on your hardware. To turn off backing storage you need to set the environment variable DX_NO_BACKING_STORE to a value of 1.


  9. I'm getting a warning about the PostScript image size being too large. What should I do?

    Ignore this warning, it apparently occurs only when you have modified the PPI setting of the Save Image or Print Image dialog. Note that it is NOT necessary to set the PPI to match the DPI of your printer. It is typically preferable to set the overall resolution of the image using the Input Image size field.


  10. OpenDX crashes and cannot open large networks. What can I do?

    There are some known issues with sockets being too small and causing problems. This can be fixed by setting the DX_SOCKET_BUFSIZE environment variable to a number larger than the typical default of 32K. One suggested size is 262144 but different OSs may be limited.

    Some operating systems have a set limit for socket buffer sizes so they must be increased as well. For example, Redhat Linux sets this limit in the following two files: /proc/sys/net/core/rmem_max, /proc/sys/net/core/wmem_max. They can be increased by changing the values within these files. For example:

    echo 262144 > /proc/sys/net/core/rmem_max
    echo 262144 > /proc/sys/net/core/wmem_max


  11. I'm running out of memory, what can I do?

    There are multiple ways to reduce memory requirements of a network. The quickest ways are:

    1. Turn off all caching using the "-cache off" flag when starting dx. This will slow down consequent processing considerably.
    2. If the network does significant processing, process the original data file, export after a significant amount of processing, and then start a new network with the new exported file. This however is not always achievable if the original data is used throughout a network.
    3. Purchase more physical memory.
    4. Use the Reduce module directly after Import to reduce the amount of data being used throughout the network. This will reduce the granularity of the data thus resulting in less detail in the visualization.
    5. Import slices of a data set and work on them instead of an entire data set at once. This is very useful when working with series data. It is possible to feed in the member number directly into the Import module instead of using the Select module after importing an entire group.