======================================================= CHANGELOG FOR VERSIONS 0.08, 0.07, 0.06, 0.05, and 0.04 ======================================================= What ChangeLog? At the moment, there's really no point in my keeping such a detailed, low-level ChangeLog. Reading the release notes provides a much clearer look at what has really changed. ========================== CHANGELOG FOR VERSION 0.03 ========================== (Most recent to oldest...) * View::_draw_overlay() has been removed, since there is no "current location" to draw, except that indicated by the X-drawn cursor. * Class View no longer is aware of "projected points", and instead simply keeps track of the 3D cursor location. On a more general level, this means that drawing operations are now based on the actual mouse location, instead of the location of the nearest vertex. This change includes the removal of View::_set_current(), View::_projected_points, View::_update_projected_points, and View::_find_projected_points(). View::_set_3d_cursor_location() has been added to actually set the 3D cursor location. It is called from View::draw() if bool View::_update_mouse_location is true. * Vertex3D::PolygonIndices has been renamed to Polygons, and is now a vector of Polygon3D pointers. * This entry is being added not for a single change, but for sweeping changes in the structure of View and Mesh, which have been made to increase speed when working with high polycount models. Changes have not been listed as they were made because most of the changes were themselves changed, since this major revision was largely experimentation, in terms of time and code produced. Certain of the more important changes are being listed above. * GL_RESCALE_NORMAL is no longer enabled in View. * The second OpenGL light is now disabled if View::DoubleSided is false. * The call to "glShadeModel" has been moved in View from draw() to _initialize(). It now sets the mode to GL_FLAT instead of GL_SMOOTH. * Fl_Light_Button MainWindow::double_sided has been added to control View::DoubleSided. * bool View::DoubleSided has been added to control whether GL_CULL_FACE is enabled or disabled. * View::_find_projected_points() is now called slightly less frequently, possibly with some slight performance gains. * double View::_projection_matrix has been added to hold the current OpenGL projection matrix. It is updated in View::_initialize(). * int View::_viewport has been added to hold the current OpenGL viewport. It is updated in View::_initialize(). ========================== CHANGELOG FOR VERSION 0.02 ========================== (Oldest to most recent...) * The View class no longer includes Mesh, as _m_swap has been removed. Various unused includes and members have been removed. Names have been clarified, and other minor cleanups have been done. * The ArcBall class has been cleaned up a bit (moved and removed headers, cleaned up code, and clarified names ), and it handles the rotation a bit better now when the cursor is outside the virtual sphere. * Class View now splits some of the OpenGL initialization code out into a seperate function that is called only when needed, instead of every time View::draw() is called. * An Fl_Box has been added to MainWindow which acts as a status bar. * MainWindow's _no_file has been removed; its message has been moved to the new status bar. * Mesh has two new functions, VertexCount and PolygonCount, to return the number of vertices and polygons a mesh currently has. * Mesh::InfoDrawSize is now unused, and has been removed. * When opening a model file or creating a new model with NEW, the status bar reports the completion of these tasks and the number of points and faces in the model. * The two lights in the modeling scene have been made purely directional, which avoids the problem of a model being to dark or to bright due to its distance relative to the lights. * The `==' operator of Point3D has been overloaded. * It is now possible to remove all points in a mesh that are equal, leaving only one point in their place, by calling Mesh::RemoveDuplicates, which returns the number of points removed. NOTE: This function isn't perfect yet. It is very slow, and sometimes odd problems appear in the resulting mesh. * The Deform dialog has been reworked to more properly seperate work into different functions, and also to get rid of the silly "messaging system" it had to tell MainWindow what it was doing. It now has direct access to the _mesh_history, and does the deformations itself. * DeformDialog adds a new string `Output' for the purpose of returning human-readable information to MainWindow, to be displayed in the status bar. * The Deform dialog now includes a button to activate the RemoveDuplicates function. The number removed is printed in the status bar. * Vertex3D has `=' overloaded to work with Point3D * Point3D now has `+=', `/=', `+', and `/' overloaded. * Mesh::Subdivide has been added for subdividing a mesh. It works with any number of points. In the resulting mesh, each old polygon will become X number of new ones, where X is equal to the number of sides in the original polygon. All resulting polygons quads. NOTE: This function isn't perfect yet. It is very slow, largely due to the fact that a call to RemoveDuplicates is used at the end, and sometimes odd problems appear in the resulting mesh. * The Deform dialog now includes a button to subdivide the mesh. Data on the resulting mesh is printed to the status bar. * Mesh now includes three functions, StartGrab, ContinueGrab, and EndGrab, the purpose of which is to allow the user to drag a set of points around. * The (non-functioning) SMOOTH button in MainWindow has been replaced by a GRAB button. When activated, the Mesh Grab functions are used instead of DrawArea. The actual grabbing, however, is somewhat unsophisticated, as points are only dragged around on the X-Y plane in model coordinates. A more appropriate behaviour will have to be implemented later. Also, the current system does not support mirroring. * Class Mesh is now a friend of class View. * Mesh::InfoDraw function has been removed. View::_find_visible_points no longer uses glFeedBack to find the locations of all the points; gluProject is used instead. * Mesh::BecomeQuadSphere has been added to allow the creation of a sphere. Currently it is still very slow, so only two or three subdivisions are practical at this point. * NewDialog now shows only two model types - plane and sphere. Both of these now work. * It's now possible to smooth a mesh by calling Mesh::Smooth * A SMOOTH button has been added to DeformDialog. * It is now possible to smooth an area of a mesh by calling SmoothArea. Mirror settings are used. SmoothArea uses Mesh::_smooth_area to do the actual smoothing. * The button to enable the smooth brush has been readded to MainWindow. It sets View to the SMOOTH brush mode. * Shortcut keys have been added for the three brush modes, the ADD button, the DEFORM button, and the three mirror toggles. * Labels have been added for MainWindow::_radius and _strength. * Selection of the current center point has been made much more accurate. Previously, many points were incorrectly removed from the list of visible points, as they were incorrectly detected as being behind other polygons. This has, to a large extent, been corrected. * View::_draw_interface has become draw_overlay. It has been modified to draw (in red) the current selected vertex instead of the cursor location. That job has been changed back to the standard X way, using the FL_CURSOR_CROSS. This has the advantage of being faster and more easily visible over different background colors. * Fixed: a bug where a newly-loaded or newly-created model does not fill the "visible points" list. This lead to the first brush stroke changing incorrect polygons and the red vertex-indicator being stuck in the lower-left corner until the list was updated. * The code to actually draw the model has been moved from Mesh::Draw to View::_draw_mesh. This has the advantage of making class Mesh independent from the whatever is drawing the model, in this case, OpenGL. * The DRAW CURVE button has been hidden, as it is still useless. * SHIFT-drag in the View window has been fixed. It is now possible to drag the model around. * View::_xloc, _yloc, and _zloc have been replaced with Point3D _location. * Mesh::BoundingSphere is no longer used, and has been removed. * Using the mouse wheel to resize the model now does so in smaller increments. * Fixed: a bug where View is shown with no model data loaded. * NewDialog and DeformDialog have been changed back to having borders and being none-modal. * NewDialog::_horizontal_div and ::_vertical_div renamed to _div1 and _div2. Changed because when creating a sphere (using the current algorithm), you can't seperately control horizontal and vertical divisions. * NewDialog now changes when either PLANE or SPHERE is pressed; when SPHERE is pressed, the second slider is removed, the label of the first is changed to "Subdivide", and the height of the dialog is decreased. These changes are reversed when PLANE is pressed. * Using Mesh::BecomePlane now always creates a plane of the same size, with the X and Y vertex values ranging from 0 to 1. Creating a plane with different subdivide inputs will now result in a square-shaped model. * When changing the camera distance from the model with the mousewheel, the size of the model now taken into account. * Mesh::RecalculateBoundingSphere has been removed. * MainWindow::_new_dialog and _deform_dialog no longer forget their settings after closing. * When closing the program with an unsaved model open, the user is now asked if they wish to save it before closing. * When loading a model with an unsaved model open, the user is now asked if they wish to save it before loading the new model. * If a file that already exists is selected in the Save As dialog, that file is no longer overwritten without confirmation. * Dragging the model (with LMB + SHIFT) no longer acts a change to mesh, so the undo stack is unaffected. * The (currently useless) HELP button has been hidden. * Fixed: a bug where settings aren't saved if no model has been loaded or created yet. * Project info and MainWindow title updated to 0.03. ============================== RELEASE NOTES FOR VERSION 0.02 ============================== I haven't kept a formal list of all the changes to the code, features added, or anything like that, but here are the highlights, in no particular order: * I have switched from the Eclipse IDE to Anjuta. While I like Eclipse and found it quite useful, it simply does not run at a reasonable speed on an older machine like mine. * The "New" dialog is now functioning partially: you can use it to make a plane, with anything from no subdivisions to one hundred. * The brush shape used when modeling has been changed. It was using a power function, which gave it a pointy shape; the modified form uses a square root function, which gives it a much more rounded shape. * I have begun work on a way to interactively set the shape of the brush through the "DRAW CURVE" button. As yet, though, the curve does not actually do anything. * I have also started work on keeping track of whether the model is saved or not, though this isn't actually turned on anywhere in a way that is currently visible in the program. * The interface has been improved by the addition of tooltips and keyboard shortcuts. * There is now a seperate button to save the model without bringing up a file selection dialog; the latter function being moved the the "SAVE AS" button. * The size of the undo stack has been increased to 32. * Version 0.01 had code to write out a few preferences to HOME/.sharpconstruct/preferences; this code has been removed, and the Fl_Preferences object is now used, meaning preferences will (by default) be written to HOME/.fltk/Sharp3D/SharpConstruct.prefs. * The "STRENGTH" slider's configuration has been adjusted; it now ranges from 0 to 1, in increments of 0.01. * The View class no longer has a pointer to a mesh, instead it uses a pointer to the mesh history. * A few common tasks have been moved into classes either as normal functions or overloaded operators, like "+=" in Point3D and "Normalize()" in Normal3D. * And lots of other things, like renaming functions and removing unused variables and headers...