OpenModel and OpenAlias Notes


The following information is new for Version 9.0:

Limitations Fixed

Fixed The AlDagNode class now supports the copying of blind data through a copyObject() method.

Fixed A core dump with the AlUniverse::retrieve() method, in the OpenModel libraries, has been fixed. This problem could occur if the method failed to retrieve a wire file.

Fixed The AlUniverse::writeSDL() and AlUniverse::writeSDLNoAnimation()methods, in the OpenModel libraries, now write out command multifillet objects.

Fixed Under some situations, it was possible for AlSurface::nextShader() to return the current shader. This could result in an endless loop. The AlSurface::nextShader() code now detects this condition and returns NULL if this has occurred.

Fixed A core dump with the function AlSet::setName() has been fixed. This problem would occur if the name parameter passed to this function was longer than 100 characters.

Fixed The method AlUniverse::deleteAll() now removes blind data from the universe.

Fixed A number of the methods in the AlRender class including AlRender::Image::setAspectRatio() were restricting the input values to ranges less than the Render Globals Editor in Alias allows. These restrictions have been removed where necessary within this class.

Fixed The AlPerspectiveCamera class now includes a method ( setPlacementFitCode() ) for setting the placement fit code.

Fixed The AlWindow class now includes a method ( aliasWindowPosition() )for getting the Alias window position.

Fixed Utilities for removing blind data from a wire file are now available in the $ALIAS_LOCATION/ODS/OpenModel/utilities directory. The precompiled binaries are in the $ALIAS_LOCATION/ODS/OpenModel/bin directory.

Fixed Construction history plug-ins are now better documented through a new example (linkObject.c++) along with information in the Online documentation.

Fixed The Plug-in Manager would always attempt to search the directory path defined by the ALIAS_WORKENV environment variable. If this variable was not defined, a message would be written to the error log file everytime a search for plug-ins is done. The Plug-in Manager code has been changed to omit the ALIAS_WORKENV directory from its list of search paths if it is not defined. This avoids repetitious messages about the ALIAS_WORKENV environment variable not being defined.

Fixed The AlFunctionHandle appendToMenu() incorrectly added the plug-in menu item to the bottom of the menu. To fix this problem, we added an installOnMenu() method that accepts a to control if the plug-in attaches to the top or bottom of the menu. ( We chose not to fix appendToMenu() since this would change the behavior of existing plug-ins that used this function. )

Fixed The location parameters of the AlPromptBox function now work.

New Limitations

Limitation


The AlPixFile class does not support GIF files.

Limitation


The method AlSnap::toCV() does not snap to the joints of a skeleton.

Limitation


The Alias API does not support messages on lights and shaders.

Limitation


The Alias API does not support symmetric layers. As a result, plug- ins such as jptCenterPivot will not produce the correct result on a symmetric object.

Limitation


It is not possible for the API to generate polyset prelighting information.

Workaround


In Alias, use the Render -> Polyset prelight menu item to create the prelighting information.

Limitation


There is no API method available for changing a set type (exclusive versus multi) once the set is created.

Workaround


Recreate the set with the required type and add the appropriate objects to the newly created set. Delete the original set which is now empty.

Limitation


The AlSettable::addToSet() method incorrectly returns status values for sObjectInAnotherSet and sObjectInExclusiveSet situations.

Workaround


Detect these two conditions by traversing the set lists in the Universe before calling ::addToSet().

Limitation


If per polygon textures are being used in a polyset, then the AlPolygon::st() method will return a different value than the AlPolysetVertex::st() method. The AlPolysetVertex::st() method does not take into account if per poly textures are on.

Limitation


The AlShell::addToShell() methods use different tolerances in OpenModel versus OpenAlias. It is not possible to set this tolerance through the API so different results may be produced in OpenModel versus OpenAlias with certain models.

Limitation


The Alias API in most cases disregards the locked state of objects. As a result it may be possible to change the parameter of an object by using the API even though it has been locked through an Alias Editor.

94565

Limitation


The OpenModel library libalias_api.so is now linked with the multigot option. Core dumps may result, if you attempt to use the OpenModel libraries on an unsupported version of Irix with unsupported compilers. Please consult the"Development Environment Requirements" section of the Online API documentation.

General Notes

  • The Alias APIs are documented in the online documentation. Select Help > Online Docs to open Netscape to the main documentation page, where you can select the OpenAlias/OpenModel link.
  • An N32 version of the OpenModel libraries is supported. These libraries are not installed by default. Please contact your system administrator to have these libraries installed if you require them. Once installed, these libraries are located in the following directories:
    • $ALIAS_LOCATION/lib32 # DSOs
      $ALIAS_LOCATION/ODS/OpenModel/lib32 # Static libs
    • To use the DSOs, the LD_LIBRARYN32_PATH environment variable must be set. In addition, the -n32 compiler and linker flag must be set.
  • The application $ALIAS_LOCATION/bin/print_wire_header now outputs the Coordinate System stored in a wire file. It is possible to use this information and a wrapper script to invoke your OpenModel applications with the correct Coordinate axis.

Existing Limitations

Limitation


Using the C++ new and delete functions to create and destroy memory for blind data can lead to program errors.

Alias and OpenModel will use malloc() and free() for its blind data memory creation and destruction routines. Problems may occur if the blind data has been created with the new command.

There are several cases where Alias or OpenModel will need to remove or re-create blind data memory storage during normal operations. For example, if a delete all operation is performed, all blind data is removed. Also, if blind data is saved in the wire file, when the file is read in, the blind data storage will be re-created.

Limitation


Alias and the API do not handle surface form the same way.

After building a Closed surface in Alias the information window will report that the surface is Open. For efficiency, Alias does not keep track of the closed state of a surface.

Workaround


Use the API methods AlSurface::vForm() or uForm() to test the points of a surface to determine if it is closed or not.

Limitation


The AlAreEqual(const AlObject* o1, const AlObject* o2) method for detecting if two API objects are equal has a significant FALSE condition. If both pointers, o1 and o2, are equal and NULL, FALSE is returned.

Workaround


Test o1 and o2 before calling this function.

Limitation


The method AlCopyOptions::setGroupCopy( boolean ) always produces the same result regardless of what its Boolean parameter is set to.

The effect in the API is that group copy is always ON. Group Copy Off ( Edit > Duplicate Object) within Alias invokes a continuous function for copying that cannot be supported in the API.

Limitation


The plug-in scheme editor options are not restored correctly when Alias restarts.

Workaround


Restore the options after the plug-in is loaded.

Limitation


The firstShader() methods currently return the last shader that was evaluated.

Copying shaders from one object to another will reverse the shader list. (Write out the SDL to illustrate this behavior.) This behavior will lead to problems when layered shaders are used, because the order of the shaders will be incorrect.

Workaround


Cache the shader list and add the shaders to the new object starting at the tail of the list. (Please keep in mind that if we fix this bug in future releases, this solution will cause the list to be in the wrong order again.)

Limitation


Plug-in DSOs are not unloaded when Alias exits. As a result, static destructors are not called when Alias exits. The plugin_exit() function will still be called when Alias exits. Any saving of state required by a plug-in can be performed in the plugin_exit() routine.

Workaround


Unload the plug-in manually through the Plug-in Manager window to call the static destructors.

Limitation


NURBS curves and surfaces are not parameterized from 0 to 1.

Workaround


You must retrieve the knot vector for any geometry and use the minimum and maximum knot values as the limits of the parameterization for the geometry.

Limitation


Link errors may occur if you are using the 7.1 compilers under IRIX 6.2.

Workaround


Try using the -old_ld link option to the linker.

Limitation


AlContinuousFunction::setPrompt() does not display the prompt right away.

Workaround


Use AlPrintf(kPrompt,...) to output the prompt string (without formatting) in the "init" callback of the continuous function. To exclude formatting, end the prompt string before the first % symbol.

Limitation


A plug-in with undefined symbols will load without an error on IRIX 6.2, but invoking the plug-in will cause a core dump.

A problem exists with the dlopen() system call in IRIX 6.2 which causes the core dump.

Workaround


Apply SGI patch 2458 (or a later incarnation) to fix this dlopen() problem. If there is an undefined symbol within the plug-in, the plug-in will fail to load and an error will be written to the prompt line. Note: please check the Alias qualification chart to find the recommended patch set which 2458 has become a part of.

Limitation


When programming plug-ins, the function AlFunctionHandle::removeFromMenu causes a fatal error under certain circumstances.

Workaround


Avoid using the function. It is usually unnecessary, because the function AlFunctionHandle::deleteObject() automatically performs this operation properly.

Limitation


Unloading an active continuous plug-in through the Plug-in Manager can cause a core dump under certain situations.

Workaround


Do not allow the plug-in to be unloaded if it is active. A global variable within the plug-in can be set to track its active state. Set this variable to TRUE in the init() function and FALSE in the cleanup() function. Within plugin_exit(), if the plug-in is active, return a 1 so that the unloading of the plug-in will fail. This test should be done before the deleteObject() methods are called in plugin_exit().

Limitation


When retrieving files, the Universe's blind data may get obscured because two blind data packets with the same user type have been attached to the universe.

Workaround


To see two data packets with the same user type, you must remove the first one; the second one will then be visible. Try to avoid using mutiple packets with the same IDs. The order in which these packets will be returned by the blindData() methods is undefined.

Limitation


When setting a plug-in's integer slider definition, you can set the range argument to any value in the integer range; however, the slider will only give values between -100 and 100.

Values less than -100 or greater than 100 can still be entered in the associated text field, but the slider will only give values between -100 and 100.

Workaround


Use the undocumented argument slider_range to change the min/max slider range values from their defaults. For example, to define an integer slider with a range of -200 to 1000, use the following Scheme statement:


(list `slider_range -200 1000)
(list `range -200 1000)

General Limitations

  • AlCluster::addMember() and AlClusterMember::removeMember() may return sSuccess even though the operation failed.
  • The Alias API does not have a way of untrimming a trimmed surface.
  • Particle information is not available through the API.
  • It is possible to remove an AlMessage callback handler while in the body of the handler. This will result in a core dump when the handler returns.
  • AlUniverse::storeStdout() does not work in OpenModel.
  • A few of the plug-in examples ( for example, clock.c++ ) use user-defined messages and the idle queue to create a continuous loop.
This programming style causes problems with Alias. For example, functions like toggle shade stop working while this type of plug-in is running.
  • AlImagePlane::setFrameType() can core dump under certain situations.
  • The cluster effect is backwards in the API. The most recent cluster added has the first effect.
  • AlChannel::expressionString() can core dump if the expression string is greater than 1024 characters.
  • AlTM::rotate() works incorrectly when the axis to rotate about is not parallel to one of the co-ordinate axes.
  • The AlPlayFrame class calls into the animation sub-system of Alias within its constructor and destructor methods. If a plug-in declares an AlPlayFrame class as a global variable, then the constructor will be run when the plug-in is loaded as a part of the static constructor initialization process. This may cause a core dump if the plug-in is autoloaded, since the constructor will attempt to call into code that is not yet initialized at startup time.
  • A DAG node could be invisible in another layer even though its visibility has not been set with the method:
AlDagNode::isDisplayModeSet( kDisplayModeInvisible )
  • It is not possible to change the co-ordinate system of Alias through the API.
  • It is not currently possible to copy curves-on-surface through the API.
  • There is no means for determining what lights are linked to a surface.
  • It is not possible to determine the warped position of CVs.
  • OpenModel/OpenAlias cannot access light textures.
  • The AlPickList class does not support Edit Points.
  • You cannot set the Source Texture of a Solid Projection texture, nor can you read it at this time.
  • The OpenModel libraries will not work properly within a multi-processing application. Core dumps will occur.
  • The polyhist.plugin example plug-in will core dump if instances are used.
  • Because there is no Midi support for SGI Crimson machines, the useMidi family of plug-ins may cause Alias to core dump if they are loaded. Do not use useMidi on these machines.
  • The pptParticleCurve.plugin may core dump under certain situations.





Copyright © 1998, Alias|Wavefront, a division of Silicon Graphics Limited. All rights reserved. Please send questions or comments regarding the documentation to:
[email protected]