On the plus side, it supports model serialization to XML, and networking to other servers. This allows a web interface to a breve simulation, using a very simple RESTful type method calls:
http://myserver:<port>/set-agent-color .2 .4 .6
Breve has a nice intuitive user interface, and comes with dozens of models with viewable source code. The UI is slightly more powerful on MacOS X due to inclusion of a Cocoa application which allows one to view and edit model settings for particular agents on the fly; this capability is not available in other versions of Breve. Documentation on the system is extensive, but the best form of documentation is the models themselves, which mostly come in both steve and Python versions for inspection. As mentioned, the text editor is serviceable but somewhat limited; it is possible to edit files in other programs, although they aren’t able to be developed in breve by a simple save settings and run inherent with the basic editor. Still, breve was extremely powerful, easy to learn, and productive – a refreshing contrast to most of the other systems. The author was able to modify most of the simulations to save movie clips of the resulting runs with very little effort
If the model being developed is best represented using a 3D graphical display, breve is probably the best tool for the job. Future versions of breve will concentrate on the use of Python as the standard modeling language going forward. As can be seen from a comparison of Figure 7 and 8, at present steve has an advantage in brevity and expressiveness.
At last, onto doing some actual modeling!
The first model shows the action of gravity and 3D collisions upon a randomly generated collection of spherical agents.
Note: this file was automatically converted to Python from the
original steve-language source code. Please see the original
file for more detailed comments and documentation.
class Gravity( breve.PhysicalControl ): def __init__( self ): breve.PhysicalControl. init self.theBall = None Gravity.init( self ) __
( self )
def init( self ): self.setIntegrationStep( 0.000100 ) breve.createInstances( breve.Step, 1 ).create( breve.vector( - 0.500000, 0, 0 ), breve.vector( 1.000000, 0.020000, 1 ) ) breve.createInstances( breve.Step, 1 ).create( breve.vector( 0.200000, -0.200000, 0 ), breve.vector( 0.200000, 0.020000, 1 ) )