https://github.com/projectchrono/chrono
Revision 8d65700554d2de0860623fa4158d79ac3669dd32 authored by justin on 03 February 2015, 16:11:57 UTC, committed by justin on 03 February 2015, 16:11:57 UTC
Do not push texture coordinates to the index vector when they are not specified (and default value is -1)
1 parent 3c6993b
Raw File
Tip revision: 8d65700554d2de0860623fa4158d79ac3669dd32 authored by justin on 03 February 2015, 16:11:57 UTC
Bug when the mesh is read in from the OBJ file and you don't specify the texture coordinates for each face.
Tip revision: 8d65700
RELEASENOTES.md

  CHRONO::ENGINE  
  
  History of API changes, bug fixes, new features

  
Release 2.0.0
14-10-2013

- Migration of repository from SVN to GIT

- New FindChronoEngine.cmake file for easy creation of third party projects based on Chrono::Engine, using CMake.



Release 1.8.0
1-9-2013

- Removed obsolete code in ChObject (old intrusive list members and data)

- Support for stiffness blocks in LCP/CCP/VIs/linear systems. For
  instance, this will foster the development of FEM functionalities.
  See files source/lcp/ChLcpKstiffness.h and similars.

- New functions BuildDiVector, FromVectorToUnknowns, FromUnknownsToVector, 
  BuildDiagonalVector, in source/lcp/ChLcpSystemDescriptor.h
  These make much easier to develop solvers that leverage on the 
  matrix by vector primitive, for the full VI(Z*x-d) problem (not the
  reduced dual problem on Schur complement VI(N*l-r) as usual).

- Parallelization of many loops in performance-critical primitives in
  ChLcpSystemDescriptor, using OpenMP.
  This means that, in case of large systems, the performance is 
  much better than in the previous releases. 

- Optimizations in ChLcpConstraints about flags (the IsActive()
  function previously took many booleans, now it is cached).



Release 1.7.0
20-05-2013

- Python support upgraded to Python 3.3 from 3.2, in pyChrono::Engine
  installer.

- New unit_COSIMULATION. It introduces functionalities to allow
  a side-to-side simulation of Chrono::Engine and another
  simulation software, such as Simulink or Amesim. It uses 
  tcp-ip sockets for the communication and syncing. 
  See the tutorial on the wiki.

- Important. A completely new approach to the realtime visualization 
  in Irrlicht 3D has been developed. This is based on a new asset,
  called ChIrrNodeAsset: if added among the assets of a ChBody or other
  items, it will cause the other shapes in assets to be rendered
  in a Irrlicht window; it just takes a ChIrrAppInterfaceNew class and a
  ChIrrAssetConverter. See demo_irr_asset.cpp for an example. 
  This new approach is the same method that you use in the 
  unit_POSTPROCESS, that is, shapes and textures are added as assets. 
  This unifies the approach to visualization, that is, you can switch
  to a POVray raytracing postprocessing to an Irrlicht realtime 
  visualization by changing few lines of code. (Previously this was
  not possible because the Irrlich visualization was based on ChBody
  objects being wrapped inside ChBodySceneNodes that had to be inserted
  in Irrlicht managers).

- The Irrlicht visualization does not need to load the sphere and
  cylinder template meshes from .obj files in ../data/ , so there are
  troubles if the executable resides in a different directory structure.

- Improved method to handle 'cloned' items for visualization. The developer
  of new classes inherited from ChPhysicsItem should implement 
  GetAssetsFrame() to return the coordinate frame of the shapes in the 
  assets, and in the case of multiple clones of the same shapes (ex in 
  ChParticlesClones) it shoould implement GetAssetsFrameNclones()
  and  GetAssetsFrame(int n) must return the frame of the nth clone.
  This done, all visualization systems and postprocessors will
  render correctly and automatically.

- The way to import a SolidWorks system, in Python, has changed. 
  Previously it was:
     import my_saved_system
  now it should be:
     chrono.ImportSolidWorksSystem('my_saved_system')
  This supports also paths, in the case that the saved system is in 
  a subdirectory, ex '../my_dir/my_saved_system'. 
  Also, it forces reloading.

- The ImportSolidWorksSystem() in unit_PYPARSER has been improved to 
  support the case of systems saved in subdirectories. If assets 
  contain relative paths such as in ChObjShapeFile, these are
  adjusted to avoid problems.

- new Python demos. 
  The python demos have been moved into ChronoEngine/python, they
  have been removed from ChronoEngine/source/demos/python
  
- new demo_import_solidworks.cpp to show how to load a system 
  that has been saved with SolidWorks using the C::E add-in.

- new CVisualization asset for defining the color of assets that define
  shapes to be rendered.

- Added ChSystem::IteratorPhysicsItems that iterates over all bodies, 
  links and other physical items in general, that are inherited from
  the base class ChPhysicsItem.

- Improved ChPovRay postprocessor: when saving ChParticleClones
  items, instead than repeating the dump of assets in the my_stateNNN.pov
  file (which might lead to very large files when using >1'000 particles)
  it just dumps a #while loop in the pov file, that in turn will load
  only the xyz and rotation coordinates from raw data saved in a 
  compact .dat file, in rendertime. This helps saving disk space.

- ChPovRay had a problem with texture suffixes longer than 3 
  chars, ex foo.jpeg. Bug fixed.

- In Python, the constructors of shared pointers to objects (objects
  that are handled via shared pointers, that end with ..Shared)
  now can optionally accept also the parameters of the pointed
  class, for example if ChConveyor can be built with three arguments:
   body_belt = chrono.ChConveyorShared(conv_length,conv_thick,conv_width)
  whereas previously you could do only
   body_belt = chrono.ChConveyorShared() 

- bug with the Wavefront .obj loader for the POVray postprocessing 
  unit (it crashed randomly when non-triangle faces were found). Note
  that only triangle faces are used, anyway.

- Experimental. The Irrlicht visualization system supports shadow maps.
  You just have to use application.AddLightWithShadow(..)
  instead than application.AddLight(..) or AddTypicalLights(..).
  The performance is a bit slower, but much faster and better looking
  than the previous system that used stencil shadows.
  NOTE!!! This works fine with Irrlicht v.1.7.3, but in Irrlicht v.1.8
  it does not work with default DirextX driver: you must use video::EDT_OPENGL
  as argument when creating the ChIrrApp for OpenGL driver (and it works
  with a single lamp only).

- The build system has been changed so that the built binaries are not
  copied in the ChronoEngine source directory, in bin/, but stay into out-of-source
  directories. Also, debug and release libraries are not stored together
  anymore: the _DBG suffix is not used anymore, they are stored in Release
  and Debug sub directories. This will help porting to different platforms.
  The previous ChronoEngine/bin/ and ChronoEngine/lib/ directories
  are not used anymore. The ready-to-use prebuilt SDK has prebuit 
  binaries and libs in Win32/, Win64/ directories.

- The installer for the prebuilt SDK has been updated.

- The template for the MSVC wizard has been update to reflect the new
  asset-based approach to visualization.

- The makes/FindChronoEngine.txt file has been updated to reflect the
  new build system. Also, the template_project/ files have been 
  modified and a new demo project is here.


Release 1.6.0
19-07-2012

- New asset of 'ChCamera' type, for defining a videocamera point
  ov view, zoom etc. This asset can be interpreted by postprocessing
  system (ex the exporter for POVray). Cameras can be added to moving
  objects.

- New asset of 'ChAssetLevel' type, that contains sub-assets and
  that can define a coordinate transformation respect to the parent
  asset. This allows the definition of hierarchies of assets with
  shapes, group of shapes, etc.

- Plug-in for SolidWorks. A custom SolidWorks add-in can be installed,
  so that in the SolidWorks CAD interface one can see some buttons to
  save the mechanism as a .py script.

- New installer for deploying the precompiled SolidWorks add-in.

- The SolidWorks add-in now exports also the UV coordinates of the
  mesh vertex points in the .obj shape files. This makes the .obj 
  UV texturing easier (ex. by using BLender etc.).

- New ChPovRayAssetCustom in unit_POSTPROCESS. Allows adding custom
  POVray chuncks of code to the output .pov files (ex. materials, 
  finishing, pigments, etc.)

- Improved Python units: support for dynamic casting via CastToXXYY
  helper functions, larger number of wrapped and supported classes, etc.

- New unit: unit_PYPARSER. It can be used by C++ programs to execute
  Python statements, scripts, etc. Most important, it can be used
  to populate a ChSystem with parts and constraints from a .py file 
  exported from the SolidWorks Add-In. 

- Updated to Irrlicht 1.7.3

- CMake v. 2.8.8 is required now (the old 2.8.6 had some problem in
  finding Python libraries from Python v.3)


Release 1.5.0
12-05-2012

- New asset system. Look in source/assets/ directory. Assets can be
  assigned to ChPhysicsItems. This is extensively used in the new
  postprocessing system. The use can also inherit his special assets
  from the base class ChAsset.

- New installer for deploying the Python version of Chrono::Engine
  on user systems without efforts.

- New ChLinkMate class, with ChLinkMateGeneric, ChLinkMatePlan, etc,
  These can represent higher pair joints often used in mechanics, but
  they are less sophisticated (and faster) than the ChLinkLock classes,
  for example they do not need the addition of ChLinkMarker objects
  into the ChBody. They can represent the typical 'mating' constraints
  in assemblies of typical 3D CADs. 

- New unit_POSTPROCESS supported also in Python. 
  In python, after you imported chrono engine, yu can also type: 
   import ChronoEngine_PYTHON_postprocess as postprocess

- The old ChTriangleMesh class has been renamed to ChTriangleMeshSoup.
  This because the ChTriangleMesh has become and abstract interface
  class for different types of triangle meshes. It is inherited
  by ChTriangleMeshSoup and the new ChTriangleMeshConnected, that
  allows shared vertices and information about normals and UV.

- By default, when two materials with different compliances become
  in contact, the resulting unique compliance of the contact is 
  the SUM of the two compliances as a default behavior (whereas
  for other material parameters such as friction, the result is the 
  minimum of the two values). This follows the theory of two 
  springs in series.

- New installer for deploying the PyChrono::Engine stand-alone
  precompiled module for Python

  
Release 1.5.0
8-2-2012

- File logging of system matrices and vectors. This feature
  has been added to allow off-line testing, debugging and 
  development about the solver: the mass matrix, the jacobians
  and other terms that define the DVI are saved on disk in an
  Ascii format that can be loaded in Matlab for testing.
  Use ChLcpSystemDescriptor::ConvertToMatrixForm().
  This overrides obsolete BuildMatrices() and BuildVectors().

- When pressing the 'Print Screen' key in the Irrlicht demos,
  the DVI system matrices are saved on disk in the same directory
  of the executable, as many 'dump_xxxyyyy.dat' files, for Matlab.
  This basically calls ChIrrAppInterface::DumpMatrices().

- New unit_PYTHON. This unit, once compiled, allows users to
  use Chrono::Engine from Python because a library is deployed
  among the 'modules' of Python.
  This is a major new feature. Users could develop programs
  based on Chrono::Engine without using C++ at all.
  Most functions and classes that are used in C++ are now
  accessible via Python, and the sytax is almost the same (some
  classes are not yet wrapped, but for the most important ones
  there is a one-to-one mapping - also operator overloading
  is supported).

- Important API change! To modify friction, restitution and
  other surface properties of ChBody, ChrParticleClones and 
  similar stuff, now one must use mybody->GetMaterialSurface()->..
  In fact now surface properties are contained in a ChMaterialSurface
  object, that is referenced by each body. The reason is that 
  in this way, many objects can share the same material (saving
  some memory and making the coding cleaner). By default, each
  body creates its own material when instanced, but later one
  can assign a shared material to multiple bodies, for example:
    ChSharedPtr<ChMaterialSurface> msurface(new ChMaterialSurface);
    my_body_A->SetMaterialSurface(msurface);
    my_body_B->SetMaterialSurface(msurface);
    my_body_C->SetMaterialSurface(msurface);
    msurface->SetSfriction(0.3);
  Note that thank to shared pointers, material is automatically 
  replaced in SetMaterialSurface and, if needed, also automatically deleted.
  Moreover backward API compability is ensured.

- New contact property: compliance. The compliance (inverse of stiffness)
  can be set for normal and tangential directions, in the new ChMaterialSurface
  object. It has the unit of m/N.
  Compliance, in general, has also the positive effect of making the convergence
  of the solver somehow faster. When compliance = 0, it turns into the original
  method with infinitely rigid bodies. 
  Note that non-zero compliance disables the stabilization limit that one sets with
  SetMaxPenetrationRecoverySpeed(), so this means that with non-zero compliance
  one might have 'popping' contacts if the timestep is too large.
   
- New contact property: damping. The damping is specified as a factor
  'alpha' of the stiffness K in the contact. That is, damping R=alpha*K;
  where for example it could be alpha=0.3 (it has the unit of time, [s])
  Damping in general helps to have stable simulations and avoids numerical 
  artifacts when simulating stacks of objects at rest.

- Important API change! Previous version of Chrono::Engine used to 
  compute the friction coefficient in a contact as the average of the 
  two friction coefficients of the two surfaces. From this version, instead,
  the default behavior has changed as THE MINIMUM of the two values.
  This applies also to other surface parameters in ChMaterialSurface,
  such as rolling friction, etc., excluding compliances (tangential,normal,etc)
  because they are summed, as happens for two springs in series.
  
- New functionality in ChIrrAppInterface class, to allow single-step
  of realtime simulations, by pressing the 'p' key, and to pause 
  physics, by pressing the 'space' key. (Press also 'i' for infos).
  
- To use the new pause/singlestepping of the ChIrrAppInterface class,
  you should change the way you invoke the time integration in your
  program screen redraw loop, that is change commands like 
      mphysicalSystem.DoStepDynamics( 0.01);
  into the new command
      application.DoStep();
  Note that before entering the 'while()' loop, you need to enable
  the advanced step control by calling something like this:
     application.SetStepManage(true);
     application.SetTimestep(0.02);
    
- New solver based on spectral gradient method (Barzilai-Borwein)
  with nonmonotone Armijo steplength. It is called ChLcpIterativeBB.
  It has a much better convergence than projected SOR and similars,
  and the benefit of using it can be appreciated especially when
  running large scenarios with many iterations.
  
- New contact property: cohesion.

- The build system for the 'OpenCASCADE' unit was not compatible with
  the most recent version 6.5.1 of OpenCascade. Updated and fixed.



Release 1.4.0
1-9-2011

- The collision family features previously required that a body
  was already added to a ChSystem, now collision families can be
  set also before adding bodies to a system.
  
- The rolling and spinning friction did not work properly with 
  SOR-multithreaded solver: fixed.
  
- The ChParticlesClones class now supports rolling friction and 
  spinning friction as in the ChBody class.

- New ChBodyAuxRef. This class is inherited from ChBody, but the
  difference is that in ChBodyAuxRef one can define a COG (center of
  mass) position that is not necessarily the main coordinate system
  of the rigid body (in this way, markers and collision shapes can be
  defined respect to some more intuitive coordinate system, and the COG
  can be displaced without affecting markers, links and collision shapes)

- New unit 'unit_CASCADE', in source/ dir. 
  This new unit can be used to load CAD models in STEP format,
  using the conversion features of the OpenCASCADE opensource library.
  Note that you need to install the huge OpenCASCADE SDK in order to
  be able to compile the 'unit_CASCADE' (if you do not want to 
  compile it, simply disable it in the CMake interface).
  
- New demos source/demos/matlab/demo_chfunctions_plot.cpp
            source/demos/basics/demo_chfunctions.cpp

- New demo source/demos/basics/demo_stepfile.cpp showing how
  to use the CASCADE unit to import a 3D model saved in STEP 
  format from a 3D CAD (such as SolidEdge, Catia, SolidWorks, etc.)
  
- New demo source/demos/basics/demo_robot.cpp showing how
  to use the CASCADE unit to import a complex 3D assembly saved in STEP 
  format from a 3D CAD (such as SolidEdge, Catia, SolidWorks, etc.),
  and how to compute the inverse kinematics of a robot by 'driving'
  the end effector with a ChLinkLockLock constraint. 

- All the classes that were in the file source/physics/ChFunction.h 
  are now placed in separate .h and .cpp files, in a new directory
  named source/motion_functions/ , and this will make easier to
  introduce new scalar functions.
  The old ChFunction.h simply loads the headers in motion_functions/
  for backward compability. 
  
- Important API change: the old ChFunction class was used both as
  a base class for other functions (ex. ChFunction_Sine) and as a
  'y=constant' function; now it is only a base class, a pure interface,
  that does not implement Set_yconst() anymore. If you used the Set_yconst
  function, now you may need to do a dynamic_cast<ChFunction_Const>() before. 

- The new demo 'demo_converter' shows how to load a 3D model
  in STEP format, that you have saved using a CAD. It also allows to 
  save its triangulated mesh in .obj format. It requires the OpenCASCADE 
  library - without that library, you cannot compile and/or run the demo.
  
- New functions in ChCModelBullet: AddTriangleMeshConcave() and 
  AddTriangleMeshConcaveDecomposed() , to allow more control on 
  the concave meshes for collision detection. The already-known 
  basic method AddTriangleMesh(), in case of dynamic concave mesh, 
  falls back to AddTriangleMeshConcaveDecomposed() with a default 
  decomposition threshold.
  
  
Release 1.3.0
2-2-2011

- Modified CMakeLists.txt to support also MingW GNU 
  c++ under Windows and GNU C++ under Linux.
  
- From this release, the old 'makefile' based system
  is not_supported_anymore because there is the new 
  CMake system. Files such as 'config.mak' and similar
  hae been removed.

- Other improvements in CMakeLists. In particular, the 
  user can choose if to build only the demos or only the API,
  or both, and advanced units compilation can be disabled/enabled.
  Also, the path to ChronoEngine API is automatically initialized. 

- License has been switched to GPL v.3

- Fixed a bug in deallocation of smart pointers in vectors of 
  btCollisionShape items in ChCollisionShape deletion: it caused 
  crashes when closing demos, in debug mode.
  
- Various warnings removed.

- Hash table classes improved for better compability with
  the GNU compiler.
  
- Better Doxygen template 

- The MSVC wizard did not work properly with the latest release:
  now it is fixed. 

- Added the /template_project/ directory, with files that can
  be used as a template for CMake-based external projects that
  use Chrono::Engine.
  
- A new WIKI has been started in the web site, aimed at containing
  instructions and tutorials.
  
  
 
Release 1.2.0
12-1-2011

- MAJOR IMPROVEMENT: new build system based on CMake.  
  This means that developers will exploit the power
  of IDE editors at their best, and the dependency of
  files is completely automated.
  [The previous system, based on the makefiles and config.mak,
  is -unsupported- even if the files will stay in the
  SVN for a while.]
  
- New API building process for exporting symbols from
  the dll. Previously, if one needed to rebuild the 
  entire Chrono::Engine dll, he needed also the dlltool.exe
  and the sed.exe utilities, because a .def file was 
  automatically generated. This was complicated and
  a bit unusual, so now we use the __declspec() method
  to mark exported classes (using macros in ChApiCE.h)
  and this is a more 'standard' process in Windows.

- The 'ChronoEngine/demos' directory has been moved to
  the 'ChronoEngine/source/demos' directory, to be more
  consistent (it contains source, for demo executables).
   
- Fixed a bug in the collision detection engine, that
  caused some collisions to be missed once in a while.
  This was related to different ways of managing thresholds
  in Bullet and Chrono::Engine.

- The CH_UNIT_CUDA flag has been renamed CH_UNIT_GPU.



Release 1.1.0
3-11-2010

- The 64 bit versions of dll and lib are included
  in the Windows distribution.
  
- New feature: cohesion in contacts. This can be
  activated using the ChCustomCollisionPointCallback
  as shown in demo_cohesion.cpp 
  
- New demo 'demo_cohesion', showing the simplified
  cohesion model, a new feature that allows to model
  granular material with some sticking (ex. soil).
  
- Collision engine updated to Bullet 2.77.
  Now also the collision shapes of rigid bodies can be
  marshalled using the C::E serialization.

- New unit: ChronoEngine_MPI.dll.
  This will be used to host code for cluster computing.
  It contains features for exploiting the MPI interface
  for high performance parallel computing. Compatibility
  is tested under MPICH-2. 
  Under development / please do not use it.

- All CUDA code, previously spread in many directories
  and mixed with normal code, now is grouped in a
  single directory: unit_GPU. 

- ChLcpIterativeCuda renamed ChLcpIterativeSolverGPUsimple.
  For this reason, and for the previous one, some
  includes have been changed.
  
- ChModelBullet::SetFamilyMaskNoCollisionWithFamily was
  broken in last release, since the Bullet collision code
  was updated with different functionalities. Bug fixed.

- The Javascript code is now completely separated from the
  main ChronoEngine.dll. This means that Javascript API is
  no longer needed if one wants to recompile C::E on 
  platforms where JS is not easily available. 
  The Javascript features are in ChronoEngine_JS.dll .
  
- The Cuda/GPU code is now completely separated from the
  main ChronoEngine.dll. This means that Cuda API is
  no longer needed if one wants to recompile C::E on 
  platforms where Cuda is not easily available. 
  The Cuda/GPU features are in ChronoEngine_GPU.dll .
  
- The CH_NOCUDA flag has been renamed CH_UNIT_CUDA, and
  its behaviour is reversed (TRUE enables CUDA).
  
- The GLOBAL_Vars global variable is deprecated. Use
  CHGLOBALS() function instead. Also, implementation of
  static global data have been improved. 
   
- If the user forgets the DLL_CreateGlobals() and 
  DLL_DeleteGlobals pair at the beginning/end of the
  program, a static default ChGlobal is used anyway.
  
- New classes ChStreamOstreamWrapper, ChStreamIstreamWrapper,
  ChStreamOutBinaryStream, ChStreamInBinaryStream.
  Class ChStreamWrapper renamed ChStreamOstreamWrapper

- In demos using Irrlicht realtime 3d view, now the AABB
  bounding boxes of rigid bodies can be drawn (press 'i'
  to show debugging GUI).


Release 1.0.0
01-09-2010

- Elastic restitution is added. Use mybody->SetImpactC()
  to set the restitution coefficient. The Newton model
  is used (coefficient = ratio between pre/post impact 
  normal speeds).
 
- Added SetMinBounceSpeed() in ChSystem class, to set
  a clamping that avoids high frequency rebounces with 
  nonzero restitution coefficients.
  
- New ChConveyor class for creating conveyor belts.
 
- New demo_conveyor.exe to show an example of usage of 
  the new ChConveyor class.

- Major feature: new ChMatterMeshless object to simulate 
  point-based plastic deformable materials, using the 
  meshless FEM approach. Useful for simulating mud, etc.
  
- Major feature: new ChMatterSPH object to simulate 
  fluids. 
  
- Improved ChVoightTensor class (computation of invariants
  etc.). 
  
- New classes for continumm material properties: density,
  viscosity etc. Basic hookean material properties and 
  tensor transformations are added. 
  
- New classes for elastoplastic materials, with plastic
  flow. 
  
- Experimental classes for different models of plastic
  flow: the strain-yeld-based Von Mises, and the 
  Drucker-Prager criterion (the latter is under 
  development)

- Improved ChSharedPtr and ChSmartPtr classes (added 
  functions IsNull, boolean type casting, safer casting, etc.)
  
- Gyroscopic torque calculation contained a bug

- In case Chrono::Engine was installed in a path with spaces
  (ex. C:\blabla\Doucuments and Settings\blabla...) the make-chrono_lib
  did not work properly. Fixed.

- StreamOUTsparseMatlabFormat() for ChSparseMatrix, to dump sparse 
  matrices on disk, for example, in Matlab sparse format.
 
- ComputeFeasabilityViolation, FromVariablesToVector, FromVectorToVariables
  moved from ChLcpSolver to ChLcpSystemDescriptor.
  Also, new method BuildMatrices() in ChLcpSystemDescriptor, for 
  debugging, testing, etc., allowing to dump full mass and jacobian matrices.
  

Release 0.9.0
23-2-2010

- The convex decomposition code has been updated and improved.
  Now there is a class collision/ChCConvexDecomposition.h that
  manages the convex decomposition for concave meshes, with 
  settings.
  
- New demo 'demo_decomposition.exe', that shows interactively the
  effects of the parameters of the convex decompostion. It can
  save the decomposed hulls as files, with '.chulls' suffix, that
  can be loaded directly in the ChCollisionSystem.
  
- Improved ChIrrAppInterface.h  Now the realtime visualization
  system of the demos allows also to change other settings 
  such as the stabilization speed clamping and the lambda 
  complementarity smoothing using mouse & sliders (when the 
  info panel is displayed, pressing 'i').
  
- Added support for using a 'smoothing factor' lambda in the 
  iterative complementarity solvers. This can help convergency
  and precision.
  
- New example 'demo_forklift.exe', showing a forklift vehicle that can
  be driven using the keyboard.
  
- New ChShaft physical object: it represents a 1-degree-of-freedom
  object (i.e. a rotating shaft, with no 3D shape) that can be
  used to create schematic power trains, when assembled with ChShaftsGear,
  ChShaftsClutch, etc.
  
- New ChShaftsGear: connects two ChShafts in 1D models of
  powertrains. It can be also used to simulate rigid torque joints
  between two ChShafts. Remember: this is a 1D model, useful
  whan you do not need full 3D representation of shafts, gears,
  bearings, etc (in that case, you would use Chbody, ChLinkGear, etc.,
  but they are often more complicate than necessary).
  
- New ChShaftsClutch: it simulates a clutch between two
  ChShaft, for making 1D models of powertrains. Note that
  the clutch can be used also to simulate a brake, if one of the
  two ChShaft objects is set as 'fixed', to represent the truss.
  
- The ChShaftsClutch can have two different values for forward/backward 
  max transmissible torque, to simulate freewheels and overrunning clutches.

- New ChShaftsPlanetary: it simulates a planetary gear, that is a 
  constraint between three ChShaft entities. For instance, it can be
  used to make differentials in 1D powertrains of cars, or 1D models
  of epicycloidal reducers, or summation devices. 
  
- New classes for constraints between three entities, in LCP
  solver libary. Those classes are used, for example, to make
  differentials in 1D models of powertrains.
  These are ChLcpConstraintThree, ChLcpConstraintThreeBBShaft,
  ChLcpConstraintThreeGeneric.
  
- New ChLcpConstraintTwoGenericBoxed constraint.

- The ChLinkLinActuator, in long simulations, added some numerical 
  accumulation of errors (drifting of imposed positions). Fixed.
  
- Collision detection system updated to Bullet release 2.75.

- ChIrrCamera namespaces modified to avoid name pollution.

- The LCP_ITERATIVE_JACOBI solver had a bug that gave bad results
  in scenarios with lot of friction. (this is the normal CPU version
  of the Jacobi solver, the GPU version was correct). Fixed.
   
- For API developers: the ChCollisionSystem class does not have
  a SetContactContainer() function anymore, because we do not
  assume that there could be only _one_ contact container. Now, instead,
  during the Run() command, now no contact is added to any container - only
  the basic CD is performed. Then, after the Run(), the new function 
  ReportContacts(ChContactContainerBase* mcontactcontainer) can be called: 
  this will fill the 'mcontactcontainer' object by calling its usual BeginAddContacts(),
  AddContact(), EndAddContacts() functions. 
  The ChSystem manager will call automatically the ReportContacts() for the 
  default contact container of the physical system after the collision detection, 
  but it will also scan the list of ChPhysicsItems to see if there's some other 
  container to be filled. Note: the same happens with ChProximityContainer 
  physical items, that are filled ChContactContainer::ReportProximities() at 
  each collision detection; for instance this is currently used to manage the SPH. 
  
- API change! Class "ChParticles" renamed "ChParticlesClones". This makes more sense (it
  recalls that the particles share the same mass and the same collision shape). In 
  fact now it is inherited from a new class ChIndexedParticles, for generic types of 
  clusters of 6-DOF particles. Similarly, we added a new base class ChIndexedNodes for clusters
  of 3-DOF nodes, for instance in SPH and meshless point clouds. 
  
- New ChMatterSPH class. It allows the creation of plasto-elastic material with large
  nonlinear deformations, based on a particle approach. Note, still experimental!
  
- Demos updated to newest Irrlicht-1.7.1. Older versions of Irrlich not supported.


Release 0.8
10-7-2009
  
- New feature: rolling friction, and spinning (drilling) friction.
  The ChBody items can have coefficients for these two additional
  types of friction. Note, if using zero values for rolling and spinning
  friction, as by default, the simulation will be faster than with
  nonzero values.
  
- New demo for rolling friction 'demo_friction'.

- New function ChIrrTools::drawAllContactLabels(), to print infos
  near the contact points in 3D view (reaction forces, etc.)

- New ChMatlabEngine class, for starting a Matlab engine (if
  installed) and executing Matlab commands, or copying data
  from/to Matlab within a Chrono::Engine program. This is 
  very useful because, if you have Matlab on your system, you can
  exploit the very powerful plotting capabilities of Matlab.
  See the new example demo_matlab.exe . Note: configure the demo makefile
  for your Matlab SDK directories, if any, otherwise do not compile 
  the demo.

- Important note for developers: major changes in the class hierarchy 
  and interfaces of the collision detection and contact management!
  In detail, contacts aren't added to the ChLink list anymore, but
  they are handled by a new object of ChContactContainerBase type.
  Inherited from ChContactContainerBase there is a default ChContactContainer
  class specialization that stores contacts in simple linked lists, for a
  typical CPU implementation; while a future ChContactContainerGPU specialization
  will handle contacts directly as buffers on the GPU.
  Read the points above for important changes that stem from this new design.

- The demo_hopper and demo_reactor (optional examples) have been updated
  to support the new way of handling contacts. Also, they do not use
  anymore ChBody items as spheres, but rather use the new ChParticles container,
  that save about 20% of RAM.

- ChSystem::SetCustomComputeCollisionCallback() interface has been 
  changed. Its ChCustomComputeCollisionCallback::PerformCustomCollision()
  callback function now uses only (ChSystem* msys) as parameter. 
  Some users used it to execute custom addition of further contacts to
  the system. Now this can be done in the callback by using the new concept
      msys->GetContactContainer()->AddContact(...)

- ChSystem::SetCustomCollisionPointCallback() interface has been 
  changed. Its ChCustomCollisionPointCallback::ContactCallback()
  callback function now uses different parameters. See demo_suspension.cpp
  to see the modified example.

- New classes ChCollisionInfo, ChContactContainerBase, ChContactContainer,
  ChModelBulletBody, ChModelBulletParticle, ChPhysicsItem, ChParticles,
  ChAparticle, ChSharedMass, etc.
  
- Important change! ChBody and ChLink objects now share a parent
  class ChPhysicsItem. The ChPhysicsItem class is responsible of 
  communicating ChVariables and ChConstraints to the LCP solver.
  Not only this unified interface simplifies things in the ChSystem 
  methods, but also makes easier to develop custom new types of physical
  actors from the user-side. For instance, the new ChParticles object 
  is inherited from ChPhysicsItem. 
  The ChSystem supports whatever custom ChPhysicsItem object by 
  new functions AddOtherPhysicsItem() and RemoveOtherPhysicsItem().
  
- Simplified Add() / Remove().
  To add/remove items from the ChSystem, either you use AddBody(),
  AddLink() and AddOtherPhysicsItem(), or you can use a simplier unified
  function  ' Add(ChPhysicsItem*) ' , that work in all cases (since also
  ChBody and ChLink objects are inherited form ChPhysicsItem anyway).
  The same for the new ' Remove(ChPhysicsItem*) ' function.

- To scan through all the contacts, now you should use a callback.
  Use ChContactContainerBase::ReportAllContacts(ChReportContactCallback* mcallback)
  for this purpose. (Previously, one iterated through the ChLink list until
  he found a ChLink of contact type, but the new design based on contact containers
  made this obsolete). See inside ChIrrDisplayTools.h for an example.
  
- The ChIrrWizard::add_typical_Camera() created a custom Irrlicht 3d camera
  that did not work properly in debug mode. Bug in ChIrrCamera.h code fixed.
  
- The VisualStudio wizard (that is installed automatically when an API user
  uses the InnoSetup installer to install Chrono::Engine on his system) has
  been updated to support VC 9.0, with some improvements. 

- New function SetFriction() in ChBody and ChParticles. It sets
  both static and kinetic friction at once, with the same value.
  [Note: current version of the library does not yet support different
  values of static and kinetic friction coefficients, so this is
  suggested over the use of SetSfriction and SetKfriction, for the moment]
  

Release 0.7
10-5-2009

- New feature: object picking (in demos inherited from the 
  ChIrrAppInterface class, for example demo_collision.cpp).
  Use the middle mouse button to pick an object and move
  it in the interactive 3D view.
  Only objects that collide can be picked.
  
- For ChSystem object, you can use the method
  my_system.SetLcpSolverType(ChSystem::LCP_SIMPLEX);
  to enable a direct solver for calculating speeds. 
  This is much slower than all iterative solvers (LC_ITERATIVE_xxx 
  family) and _cannot_ be used for systems with contacts, but
  it has the advantage that it is very precise. Hence, it can
  be used for simple mechanisms where precision is an issue (ex. robots
  or articulated mechanisms as in the demo_fourbar.exe).

- The GPU solver did not support the application of external forces
  (ex. springs). Now these forces are supported.

- Bug with ChLinkDistance: the clamping on speed recovery
  worked only in one direction.
  
- New ChSystem::SetOmega and ChSystem::GetOmega to set
  overrelaxation parameter of the iterative solver, if any,
  saving lot of typing respect to previous versions.
  
- New slider in Irrlicht setting panel, to set omega
  overrelaxation

- Collision margins for cylinder objects were a bit displaced 
  (causing cylinders to 'sink' a bit into other shapes). Fixed.  


Release 0.6
06-03-2009

- The GPU complementarity solver has been optimized so that
  it skips unneeded compuations when thousands of objects 
  touch a fixed object (this happens often, for example 
  when many objects like pebbles are placed on the ground).
  
- Previous version of the GPU solver didn't work with the 
  INT_TASORA timestepper. Now it works also with this stepper.
  
- A bug in the GPU solver has been fixed, about the loss of
  precision when using friction coefficients larger than 0.1
  
- Default omega relaxation value for Jacobi CCP solver has 
  been reduced to 0.2 instead of 1.0, otherwise it was 
  too likely a divergent value.
  
- New Length2() and LengthInf() in the ChVector class, to
  improve the speed of the norm of a vector in some optimised
  circumstances. 
  Same Length2() and LengthInf() also for ChQuaternion class.
  
- New feature: rigid body sleeping. Use my_system.SetUseSleeping(true)
  When this feature is activated, bodies that remain in a resting
  position for enough time will be 'frozen' until a collision will
  set them awake again. In this way, simulating large scenarios with
  many objects resting on the ground can be much faster. However
  note that this feature aims at realtime simulations hence it 
  may affect the precision of the results.
  
- Body sleeping can be turned on/off selectively for each body,
  when turning on global sleeping with my_system.SetUseSleeping(true).
  
- Support for Irrlicht 1.5. Few compatibility bugs are fixed. 
  The old Irrlicht 1.4.2 isn't supported anymore.
  
- New custom camera for Irrlicht 3D viewing (the old Maya-like
  default camera in Irrlicht doesn't work anymore as desired).
  The new camera rotation/pan is controlled by mouse left and right buttons,
  the zoom is controlled by mouse wheel or rmb+lmb+mouse, the position can 
  be changed also with keyboard up/down/left/right arrows, the height can be 
  changed with keyboard 'PgUp' and 'PgDn' keys.
            
- Improved function ChIrrWizard functions (add_typical_Lights etc)

- New class ChIrrAppInterface to ease the creation of applications
  based on Irrlicht and Chrono::Engine.
  Applications based on this class will use Irrlicht for 3d rendering
  and, when the 'i' key is pressed on the keyboard, a small interface
  pops up and shows some profiling informations (num. of bodies, CPU
  time, etc.) and also allows the user to change the settings of the 
  integrator.
  
- Most demos have been modified to use the ChIrrAppInterface
  base class. Their source code is simplier, yet the visualization
  has more features (press the 'i' key to show interfaces for settings).
  
  


Release 0.5
25-12-2008

- Parallel solver for NVIDIA GPU architecture has been improved.
  A bug happened because single-precision in CUDA hardware caused
  normalization problems during time integration. Fixed.
  The performance of the GPU<->CPU memory communication has been
  improved.

- Porting to Linux platform completed (Thank to Jean-Luc Charles
  for hints and help). Only static linking is supported at the
  moment. The code has been succesfully tested in Ubuntu.
  There are two new directories in lib/ directory: Linux32_gcc
  and Linux64_gcc. Similar directories are in the bin/ directory
  (precompiled examples are not provided for Linux, to save space).
  To compile demos in Linux, cd into the ChronoEngine/demos/ directory
  and enter "make".

- New code for POSIX multithreading support in Linux/Unix platform.
  This allows the use of the multithreaded SOR parallel solver also
  in the Linux version. Note that multithreading support in Linux
  vesrion is still experimental.

- IMPORTANT: the recent ChMatrixBase class (introduced with
  release 0.4 as a base for the specialized ChMatrix33, 
  ChMatrixNM and ChMatrixDynamic) has been renamed as 
  ChMatrix for readability reasons, and also to be more
  coherent with releases previous than the v.0.4.

- Updated 'wizard' for the Visual C++ 2008 Express IDE: it is installed
  automatically in your VC editor during the installation of the 
  chrono::engine SDK. This wizard replaces the old wizard for 
  Visual C++ 2005 IDE, that is not supported anymore.

- New collision detection feature: contact families. Each body can 
  be assigned to a family (in the interval 0..15) and each body 
  can define a mask of families to collide with. This allows 
  situations where two bodies are constrained near each other
  (as in the shoes of a track, for instance) but there is no
  need that they generate contacts. See ChCollisionModel class, 
  for the functions SetFamily(int mfamily);  GetFamily();
  SetFamilyMaskNoCollisionWithFamily(int mfamily); etc.
  
- New demo 'demo_tracks', showing a simplfied bulldozer with 
  tracks. This is an example of how to use the 'clone' objects
  that share the same collision geometry (each shoe-track collision
  model is described by many shapes, coming from the convex decomposition
  of a concave triangle mesh from an .obj file, so 'cloning' saves 
  some memory and avoids that the cpu wastes time to repeat the 
  convex decomposition for each shoe.)

- Serialization of ChLink inherited class has been completed and
  improved (StreamOUT, StreamIN).

  
Release 0.4
2-11-2008

- Merged latest Chrono::Engine into the Chrono::R3D development
  trunk (for Realsoft OY). The Chrono::R3D plugin will use the
  new features.

- New function AddBarrel() in the ChCollisionModel class.
  This can be used to create convex collision geometries 
  that are defined by lathing an arc of an ellipse around
  an axis. It can be used, for instance, to create the 
  rollers of omnidirectional wheels of mobile robots, 
  simplified rigid wheels for motorbikes or bycicles, etc.

- Support of latest Irrlicht library for 3D realtime viewing
  in demos. Please download Irrlicht 1.5 if you are using 
  it for viewing. Also update your config.bak accordingly.

- New demo_mecanum.exe demo, showing a small mobile
  robot with unidirictional wheels.

- The entire ChVector class has been templated. 

- new function addChBodySceneNode_easyClone() for the
  Irrlicht realtime viewing tools. This can be used to 
  replicate a shape (with its mesh, colliding shape, mass,
  inertia, etc.) without the need of repeating the creation
  of distinct shapes, In fact, clones will use less memory 
  because they can share the collision shapes.
  
- new function AddCopyOfAnotherModel() in ChCCollisionModel
  class. This can be used to have multiple object that share
  the same collision shapes. This is memory-friendly, especially
  if the cloned collision shapes are very complicated.
  
- Previous version had a bug in sphere-box collision
  algorithm causing spheres to sink a bit into boxes: since
  the amount of the penetration was small, it was not noticed.
  Now it has been fixed.
  
- Speed improvements. Many small structures, formerly allocated 
  on heap, now are allocated on stack. This allows a
  general speedup of the simulation, up to x1.5 in many situations.
  
- Data structures optimized for smaller memory footprint. 
  On average, large simulations require 30% less RAM.
  Also, the NCP complementarity solver uses jacobians
  with elements of 'float' type instead of 'double' type,
  saving memory (with minimum impact on precision)
  
- IMPORTANT:
  Major refactoring and evolution of the ChMatrix
  class. Now the ChMatrix class is only a base
  matrix class for the following specialized classes:
    - ChMatrixDynamic (works exactly as the former ChMatrix)
    - ChMatrixNM (faster performance since it uses stack,
        but cannot be resized)
    - ChMatrix33 (for coordinate transformations etc.Uses stack)
  Since the ChMatrix now is an abstract class,  now
  you cannot create matrices from it: you must use the
  three child classes above. For example, if you previously 
  created a 4x4 matrix using ChMatrix<> mm(4,4); now you must
  write ChMatrixDynamic<> mm(4,4);  if you created 3x3 matrices
  with ChMatrix<> mm; now either use ChMatrixDynamic<> mm; or, 
  better, the custom ChMatrix33<> mm. Note that you still can
  use ChMatrix as a pointer to whatever matrix. 

- Functions for linear algebra have been moved to 
  a new file with the class ChLinearAlgebra.
  
- Supporting of Microsoft Visual C++ Express 2008.
  From this version, support of VC 2005 edition is 
  dropped.
  
- Bug in file streaming with different little/big endian 
  convention has been fixed.
 
- Removed static data structures that made reentrancy difficult;
  the ChronoEngine dll now should be thread-safe. 
  



Release 0.3.3
21-4-2008

- The ChLcpIterativeCuda solver now supports also the 
  bilateral links (not only the frictional contacts).
  The feature is still experimental (only 1000 scalar
  constraints by default, see num_GPU_bilaterals.h).
  
- Added support for compilation on 64bit platforms, thank
  to the two new compiler types COMPILER_MSVC_X64 and
  COMPILER_GCC_X64. This is under testing. 
   
- The GPU solver also takes care of the time integration, which 
  has been parallelized.

- Major revisions to the makefile system. If you created your own
  config.mak, please switch to the new one.
  
- The NONCUDA flag has been renamed CH_NOCUDA

- The 'b' values (known terms of constraint residuals) in the LCP solver structures 
  were considered negative, now are considered positive, to match the
  same sign formalism in A.Tasora and M.Anitescu papers.
  
- Removed some auxiliary data structure in ChBody, so that each ChBody
  object is almost 30 bytes smaller. Also, ChBody updates of applied
  forces are faster.
  
  
  
Release 0.3.3
1-4-2008
  
- New class ChLcpIterativeCuda: it is a solver which uses the GPU
  via CUDA parallel programming API (still at experimental stage).
  
- The ChSystem class supports the GPU solver ChLcpIterativeCuda

- New classes ChLcpConstraintTwoGPUcontN and ChLcpConstraintTwoGPUcontT
  added in the HyperOctant solver. Meanwhile, some classes in the 
  solver have been refacored.

- ChLinkContact class inserted in ChLink hierarchy, between ChLink and
  ChLinkFastContact, so that the new ChLinkGPUcontact is its child too.
  Meanwhile, the entire ChLinkFast contact has been refactored.
  
- The ChDisplayTool functions have been updated to reflect the
  new functions of the ChLinkContact class. User code is not affected
  by these changes.
  
- Support for DigitalMars compiler temporarily removed, since no user
  is using it. Removed Win32_DigitalMars directories from bin/ and lib/.

- The 'nvcc' compiler had a compatibility problem with MS 'nmake': in fact
  nmake wasn't able to launch the nvcc compilation (strange enough, this
  does not happen if building with 'make' from MingW). Anyway, a workaround
  has been developed (nmake sets an env.variable and launches nvcc_compile.bat,
  which launches nvcc with the proper parameters).


  
Release 0.3.2
22-12-2007

- All demos use the new Irrlicht-1.4 rendering engine (please UPGRADE
  to Irrlicht-1.4 if you used previous releases, and if you want to 
  recompile the demos). 
  
- Because of new features in Irrlicht-1.4, the ChBodySceneNode has
  been completely rewritten. (This class is useful only if you want to
  use Irrlicht as a visualization, as in the examples).
  
- Collision engine updated to Bullet 2.66, which provides better
  pool allocators.

- New function in ChSystem class: SetParallelThreadNumber().
  This function can be used to modify the number of threads which run in 
  parallel when you are using a parallel solver (ex. LCP_ITERATIVE_SOR_MULTITHREAD)
  In fact, by default the threads are 2, but more threads can give high performnce
  if you have a N-core processor (4-core, 8-core, etc.). If you are not using
  a multithreaded solver, this setting has no effect.

- Bug in the last version (0.3.1) of the collision engine: the creation of
  a ChSystem implied the allocation of 40Mb for contact manifolds, but it
  were never released at ChSystem deletion, hence: memory leakage. Fixed.

- Improved basic parser of ASCII streams in Chstream.h.

- New static functions to set the default margin and envelope. Use them once,
  and later, all times you will add geometries to your ChCollisionModel(s), these
  margin and envelope values will be used by default(if not otherwise specified):
  ChCollisionModel::SetDefaultSuggestedEnvelope();
  ChCollisionModel::SetDefaultSuggestedMargin();

- New static string  irr::scene::irrlicht_default_obj_dir  in ChBodySceneNodeTools.h,
  to specify the directory where 3D .obj files with models for sphere, cylinder and
  cube can be found. Default is "../data/", but it can be changed. 
  
- New ChLinkLockHook joint, wihch can be used to create hinges similar to 
  spherical joints, but one of the three rotations is not allowed. That is, the objects
  are connected with a vertical hook (or a short chain) so that rotation on link's Y is
  not possible. 

- Light range of Irrlicht created by ChIrrWizard::add_typical_Lights() is higher, 
  because scenes were too dark in Irrlicht 1.4
  
- Bug: when zero contacts happened, the LCP_ITERATIVE_SOR_MULTITHREAD solver crashed.
  Fixed.
  
- API help for class documentation has been updated (previously was not complete because
  of a problem with the Doxygen automatic documentation).



--------------------------------------------------------
  
Release 0.3.1
28-11-2007

- New LCP_ITERATIVE_SOR_MULTITHREAD solver type, which exploits dual-core
  processors. The multithreading allows faster simulation.
  To activate it, use ChSystem::SetLcpSolverType(ChSystem::LCP_ITERATIVE_SOR_MULTITHREAD);
  This feature is still experimental (optimal processor balancing and efficient
  thread spinlocks are not yet implemented) but enough to work.
  
- Iterative solver 'warm starting' feature can be used also for the Tasora
  stepper (previously it worked only for Anitescu stepper).
  
- The way that collision margin was used has changed. Now contacts are
  created also a bit before the shapes come into contact. This improves
  the stability of the complementarity solver.

- New ChHashTable class  for sublinear search of key-values records.

- New SetMaxPenetrationRecoverySpeed() and GetMaxPenetrationRecoverySpeed()
  methods in ChSystem class, for clamping correction speed in Anitescu stepper.
  
- New SetIterLCPwarmStarting() method in ChSystem for easily turn on/off the 
  warm starting feature of both iterative solvers (speed and pos.stabilization)
  if used.

- New SetTolSpeeds() and GetTolSpeeds() in ChSystem, to specify which is the
  tolerance threshold for satisfying speeds in constraints (i.e. the LCP solver
  will stop iterating if reaches this tolerance during the solution of the 
  speed-impulse problem)

- New SuggestSafeMargin() and SuggestEnvelope() functions in ChModelBullet class,
  replacing the old SuggestMargin() function. The SuggestSafeMargin() is almost 
  as the previous SuggestMargin(), while SuggestEnvelope() is used to get contact
  infos from collision detection even if distance>0. 
  
- Various bug fixes. Zero friction hanged the solver: fixed; Other minor fixes 
  here and there.



--------------------------------------------------------

Release 0.3.0
13-11-2007

- Collision engine updated to Bullet 2.64 rc2. 
  Better handling of collision envelopes, better concave-concave
  collision algorithm, etc.

- Support of convex decomposition of concave triangle meshes! (just
  remember: the triangle mesh must have a correct topology, ie. without
  holes, cracks, degenerate points, etc. Also, the convex decomposition 
  can take some CPU time, so -for complex projects like videogames- it
  would be better if your art department performs convex decomposition 
  off-line with some in-house asset tools, then you quickly load compounds 
  of convex shapes on the fly, when the exe starts.)
  
- Improved demo_racing example: the car can cross some bumps which
  are imported using convex decomposition of generic concave meshes.

- Improved ChLinkGear constraint. The previous version had a bug in 
  the SetCheckphase() function - now it works.
 
- New ChLinkPulley constraint. Can be used to constraint two 
  pulleys as it they were connected by synchro belts.
  
- New example demo_gears. It explains how to simulate spur gears,
  bevel gears, inner-teeth gears and pulleys. All these topics are
  covered within a single mechanism, similar to an epicycloidal reducer.

- New RayTest() function in the ChCollisionSystem class. Example: it can be used
  for 'raycasting' type of simulations (ex. fast moving cars, where a simple
  radius/ground test can be sufficient to approximate the wheel/ground
  contact). Also, it can be used to simulate optical barrier sensors, and so on.
  

--------------------------------------------------------

Release 0.2.2
31-10-2007

- New installer: it automatically sets up the config.mak with 
  the correct path to the chrono::engine SDK (and to the Irrlicht
  SDK, if needed). The same for the Visual C++ 2005 ChronoEngineWizard.
  So the user will need little or no efforts at all in configuring
  the SDK after the installation - no more manual typing of settings
  in the config.mak is needed.

- New 'wizard' for the Visual C++ 2005 Express IDE: it is installed
  automatically in your VC editor during the installation of the 
  chrono::engine SDK. This means that you can use the menu 
  File/New/Project.. of the VC editor, than choose ChronoEngineWizard
  from the Visual C++ group, and it automatically set up a C++ template
  project for you, already configured to use Chrono::Engine libs and
  headers (the same for Irrlicht).

- New directory demos/msvc/ containing examples based on Microsoft
  Visual C++ 2005 Express projects. These demos can be compiled
  only by users with that IDE. 
  
- New ChIrrTools::drawChFunction() simple function to draw ChFunction
  objects as x-y plots in the Irrlicht 3D view. Test it with the
  new ChFunction_oscilloscope as in the 'racing' demo. Useful for 
  testing, debugging, easy visualization of data, etc.
  
- Improved 'racing' demo, showing a simplified car model with
  real suspensions.

- Improved Initialize() methods for links. Can make easier the
  creation of constraints.
  
- New directory ChronoEngine/msvc_config. It contains three property
  sheets to be used to quickly configure a VisualC++ 2005
  project - so that it can link and use ChronoEngine and Irrlicht.
  For example, create a project of 'Empty' type, go to the 'Property
  Manager' tab (usually at the left of the interface) and add the
  chrono_proj_config.vsprops property sheet to all configurations,
  then add chrono_proj_debug_libs.vsprops to your debug config
  only, then add chrono_proj_release_libs.vsprops to your release
  configuration only. Select the chrono_proj_config.vsprops, use
  the popup menu to see its properties, go to Macros tab, edit
  the two paths of ChronoEngine and Irrlicht so they match your
  installations. Note: all this task is not needed if you use the
  ChronoEngineWizard available in the Visual C++ Express, thank to the
  new SDK installer.
  
- New 'oscillator' project, showing how to use a Windows.Forms
  interface plus ChronoEngine plus an Irrlicht 3D view inside
  the Windows.Forms window. Note that the demo is not yet
  complete. 
  
- Integration with the Irrklang library for sound effects has
  been tested.

- New tutorial 'Visual C++ Wizard' explaining how to use the
  new wizard, step by step.
  
- New 'install' documentation, with more detailed info, and easier to 
  understand also for novice users.


--------------------------------------------------------

Release 0.2.1   
9-10-2007
  
- A very large refactoring of all classes inherited from
  ChLink has been performed. New ChLinkMasked, ChLinkMarkers
  and other classes has been added as 'layers' between the
  ChLinkLock and the base ChLink. 
  
- Thank to the refactoring of the ChLink class hierarchy, 
  the ChLinkFastContact class inherits as few data as possible
  from the base ChLink (which is really lightweight when compared
  to the old implementation). This means that simulating systems
  with more than 100'000 objects (with contacts) is possible 
  with systems with 2Gb of RAM, thank to this memory optimization.

- 'Warm starting' of iterative solver has been implemented. 
  This means that, optionally, chrono::engine can cache the
  values of reaction forces in constraints (or contacts) so
  that they can be reused at the next integration step as
  a 'guess' to start the iterative complementarity solver.
  Using warm starting, the solver requires few iterations to
  get appreciable precision, regardless of the complexity of
  the system (while without warm starting, the more the
  objects, the more iterations could be needed to converge).
  The drawback is that in some cases large stacks might 
  behave too 'bouncy'. 
  
- New ChLinkDistance link, if you need a simple and computationally-
  efficient constraint imposing distance between two points on two
  bodies. Unlike the ChLinkLockLinact joint, this has less features
  but it is simplier and faster to compute (it does not need the two
  markers in bodies, it just takes two relative positions on the two
  bodies representing the end points of the imposed distance).
  
- New example: demo_suspension.exe . This shows how to use the new
  ChLinkDistance link to model rod structures such as those in racing
  car suspensions, which can be considered massless. (This saves you
  from creating specific bodies for all rods, with spherical links at
  the end, which could be a waste of cpu resources if the effect of
  their masses is negligible anyway). 
  Also, it shows how to use the ChLinkSpring class to model a 
  spring-damper.
  
- New example: racing.exe This is a project for the Microsoft Visual C++
  2005 Express, which shows how to use only the IDE to compile a program 
  without dealing with makefiles and command line tools. 
 
- Both 'release' and 'debug' libraries are available now, either for
  MingW GCC and MSVC. Previously, only the release liblaries were distributed,
  so creating programs in debug mode was difficult (because mixing 
  debug and release libraries can give troubles if one uses 'new' for
  c++ objects shared across libraries). Now this is fixed, because
  ChronoEngineDBG.dll is distributed too.
  
- New example 'oscillator.exe' showing how to use chrono::engine and
  a Irrlicht 3D view within the Windows.Forms environment. Here, the 
  user interface (buttons, etc.) are created with the .NET toolset
  of Windows.Forms, but a 3D OpenGL view is managed by Irrlicht.
  
- New ChFunction_Oscilloscope class. Similar to ChFunction_Recorder, 
  but simplier and more targeted to recording with a circular buffer,
  for infinite storage queue of 'fifo' type.
  
  
--------------------------------------------------------

Release 0.1.9    
12-7-2007
  
- This last minute release fixes a problem with the 
  previous 0.1.8, that is the installer did not install
  some header files which might be required in some projects.

- Previous releases could not be installed in directories
  containing spaces in path names (ex: C:\Program files\chronoengine)
  otherwise this caused problems with the 'nmake' command-line building.
  Problem fixed.
  
--------------------------------------------------------

Release 0.1.8    
11-7-2007
  
- The previous 0.1.7 release was compatible with Irrlicht 1.3
  only, and gave compilation errors with the new release of
  Irrlicht 1.3.1 (for demo executables). Problem fixed.
  
- New 'benchmark.exe' demo, for testing and profiling purposes.

- Major code refactoring on the ChLink classes and derivates,
  but the updated code is NOT included in this minor release 
  and will we postponed to the future major release. Anyway,
  be prepared to meet a new hierarchy of ChLink classes in 
  future.

- New installer and new 'readme.txt' file with the list
  of changes in Chrono::Engine API.




--------------------------------------------------------

Release 0.1.7    

- First public downloadable release of the API.
back to top