uuid things default tip

reworked selection model handling

stuff

commit work done on mdi

moved GL stuff into a new gl namespace

removed the GuiUtilities class

removed unneeded stuff

reimplented shortcuts in the config dialog using model/view programming

Refactored the color toolbar editing into a new model/view system

things

refactor

added constexprs

fixed a crash when trying to open a document for the 3rd time after closing it 2 times

add const

fix object moving

added icons for circular primitives and enhanced some existing ones

removed a duplicate member

fixed rendering of bézier curves

simplified format()

Fixed cmake warning

added Cotire to speed up compilation

replaced uses of QList with QVector

used the new CircularSectionEditor in CircularPrimitiveEditor

refactored the segments/divisions editor in MainWindow to a new widget

fixed compile errors in some cases, bezier curve now stores the segment count in each object (not editable yet)

simplified more

simplified

added buttons to rotate circular primitives

added support for inverting circular primitives

fixed generation of disc negatives

simplified

fixed chord triangle count formula

fixed bugs regarding primitives, added chord substitution

added support for open/closed cylinders in LDCircularPrimitive

Circular primitive editor complete

replaced overloads with a new 'xyz' function

replaced GLRotationMatrix with QMatrix4x4

replaced the Matrix class with QMatrix4x4

some rework in description

fixed bugs regarding circular primitives

refactored LDPolygon

added the disc and disc negative to the circular primitive type

changed LDCylinder to LDCircularPrimitive and moved circles to it

cleaned up LDColor constructors

show the color index in the color button

separated the color button into a new widget

fixed cylinder rendering

changed rotation matrix to quaternion in GLRenderer

fix compiler warnings

added work done on cylinders

added draw plane feature (doesn't work with circle draw quite right yet)

refactored signal blocking

fixed that scaling factors could be negative

added a doublespinbox variant that uses "." as the decimal point and omits trailing zeros

added scaling vector editing into the subfile editing dialog

added vertex rendering

some fixes

fixed vertex cache spontaneously clearing

refactored the quick color toolbar

removed dead code

added a status bar and moved printed messages there

removed dead code

refactor

fixed changing a document not updating its references in other files

added an ini option to disable line stipple

refactor

fixed "edit selected object" not editing non-vertex objects

readded object editing by double click in list view

fixed the scene bounding box not getting updated as it should

automatically center the model in the renderer

reworked bounding box

added cull depth support

added some missing connections

fixed some problems

start rework

show subfile descriptions in the object list

fix warnings

started work on the pattern editor experimental

Branch close

Branch close

Branch close

Branch close scripting

Branch close projects

Branch close header experimental

Branch close integrity experimental

Branch close inspector experimental

Branch close bfc experimental

refactor

refactor

use 3 significant figures in file size representation

better representation of fractions and large numbers

The border between the canvas and left tool box is now resizable

fixed minimum values

refactor cylinder generation

reworked primitive generator

added support for new style primitive names

fixed rendering artifacts

fixed wording

added comment

added categories for 8/ and 48/ torii

more work on 8-primitives

Added support for 8-primitives

Whoops

some python cleanup

improved formatting of generated configuration code

MainWindow now stores its state in the config file so its state and geometry is preserved across instances

removed another unused class

removed unused include

replaced remaining DIRSLASH, Dirname and Basename uses with Qt file info stuff

used Qt file info stuff in the auto-subfiler

Used more Qt file info stuff

rewrote LDDocument::shortenName using Qt stuff

merged mathfunctions.cpp into algorithms/geometry.cpp

added comment

Happy new year 2018

Use 4 points of precision for circle point coordinates

roundToDecimals no longer needs an lvalue. applyToMatrix removed.

Config is now a namespace

renamed sink() to singleton()

used squared()

Moved includes, added squared() function

reorganized headers

removed unnecessary files and includes

removed the unused OpenProgressDialog

reworked includes

moved Vertex and BoundingBox into new code units

added stream operators to Vertex

reworked Vertex, no longer a QVector3D subclass

remove LDBfc

ported qOverload to drop minimum Qt requirement down to 5.5

remove LDPaths

reworked primitive scanning

Begin rework to add support for multiple libraries

fixed warning

red/green view rework complete

Bfc red/green view almost completely fixed

added more comments

reworked invert()

added license headers

moved inverting code into a new file

added comment editing

fixed color handling

fixed infinite recursion and integrated the subfilereference editor

added subfile reference editor

Added vertex object editing dialog

the header is now also saved

Added a new tool for clamping vertices

removed the old Add History Line tool

Part history can now be edited

Added basic header editing

Fixed crashing

add comments

Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.

begin work on document loading rework

added a document header structure

added signal emissions

moved emit calls

added an MVC interface to the primitives tree

fixed removing objects causing some other objects to disappear

optimized triangle count

fixed: LDDocument created one removal connection to the model for each object added, so removing an object from a model of 9 objects added 9 deletion entries to history

renamed signal

moved LDObject indices from a global array into Model

removed unused code

fixed object deleting not triggering the proper renderer updates

fixed DelHistoryEntries getting ignored...

removed some debug code

Implemented row moving in the model and replaced swapping with it

migrated model swapping to mvc and made Model::swapObjects to emit dataChanged signals as a temporary solution

removed some unneeded headers

Finally removed the cancer that is the LDObject::model pointer

Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.

fix warning

removed another LDObject::model() use

removed LDError::fileReferenced

reimplemented detection of broken references in PartDownloadRequest::downloadFinished

reimplemented finding of broken document references

LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.

removed use of model() in LDSubfileReference::inlineContents

Removed LDObject::invert, inversion code moved to basic toolset

removed LDObject::swap

moved LDObject::next to the algorithm toolset

removed LDObject::lineNumber

more selection rework

removed LDDocument::clearSelection and replaced it with a MainWindow implementation

things #2

things

add operators to LDDocument

refactor

Converted magic wand mode and other selection stuff to mvc

more work on mvc

convert MainWindow::deleteSelection to mvc

made lighting more subtle

converted highlighting to mvc

used mvc selection models

more work on mvc

begin model rework

removed unneeded stuff

Removed LDConditionalEdge::becomeEdgeLine

hook up dataChanged

changed Model into an MVC list model and replaced the objects list with a view into the model

add missing switch case

disable lighting in the selection scene

moved matrix calculations, added inverted normals for BFC back sides

BFC INVERTNEXT objects are no longer individual objects

removed GL_POLYGON_SMOOTH because it causes artifacts

made GLCamera a non-QObject

remove GL_POLYGON_SMOOTH because it causes rendering artifacts

renderer rework

begin rendering rework

encoded division slash

added support for circular 8/-primitives

simplify

add support for 8/ in part downloader

drop Qt4 support

simplify

undo config change

simplified RoundToDecimals

happy new year 2018

revamped format.h

reduce main.cpp

simplified Matrix

replaced Origin with default-constructed Vertex

fix paren style

add autosave

replaced "Config->" with "config."

increased range of GLRenderer bounds

circlemode: don't wait for the last click

Worked more on the library collection thing

LibraryCollection now derives from QObject and QVector<Library>

More work on library collections

Laid groundwork for library collection support.

Some cleanup in LDPaths

Removed the unary min and max functions.

Better encapsulated the BaseConfiguration class.

Whoops

Split the configuration main interface to a new class, BaseInterface, so that moc can properly deal with it.

Configuration changes can now be detected with signals.

Added Python tools to CMake so that they show up in IDEs

Simplified GLCompiler vbo interface

PrimitiveScanner is no longer a HierarchyElement.

Grid is now a namespace.

MathFunctions is now a namespace.

Fixed NewPartDialog leaking the memory allocated by the user interface.

NewPartDialog is no longer a HierarchyElement.

ColorSelector is no longer a HierarchyElement.

GuiUtilities is now a namespace.

The Grid class is no longer a hierarchy element or a QObject.

Made configuration a global singleton. I think I can give in at least that much because it makes solving a lot of problems easier.

Also removed the copy constructor and copy assignment because those only are bad news for a resource managing vector...

and let's put a newline there...

Deleted the copy constructor version of ResourceVector<T>::insert, like with append

Sorted the methods in Model's public section.

Renamed some methods of the Model class to remove the 'emplace' word (however cromulent it is, being from STL...) from them.

Moved LDObject lifetime management from Model to ResourceVector. This is a large refactor that removes some hacks from the Model class.

Added a new type ResourceVector which manages object lifetimes, and used it to remove a bit of memory management.

Polar grid is now togglable.

CMake fixes

Added polar grid snapping code.

Added polar grid rendering (which is disabled for now).

Grid::snap now snaps points.

Simplified Grid::snap.

At long last, the grid is finally now rendered onto the viewport. Woop!

Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.

Removed some unused class stubs and definitions.

No need for braces there...

Cleanup ColorSelector, moved direct color composition to a new LDColor constructor.

Cleanup ColorSelector::colorButtonClicked()

Changed QByteArray to QVector to avoid that ugly reinterpret_cast.

Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.

Hardened the GLRenderer interface, made methods more private.

Cleanup GLRenderer::initializeAxes()

Removed GLRenderer::refresh(), update() does the job just as fine.

GLRenderer::drawVbos no longer needs to be told the GL type

Cleanup AlgorithmToolset::subfileSelection.

Fixed more dialog instances in AlgorithmToolset.

Moved all UI files from ui/ into src/dialogs/.

Removed unused class RadioGroup.

Replaced LDObjectList with QVector<LDObject*>

Removed the Origin and axes global constants.

At long last, the g_win pointer has been removed. Down with global variables!

print() is no longer a global function but is tied to HierarchyElement.

Made the GL renderer recieve information of object deletion via signals.

Moved GetIcon and makeSettings into the MainWindow namespace as static methods.

Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.

Removed dead code

Some cleanup in mainwindow.cpp, use QSet<QString> for the 'ignore' variable.

Reformat colors.cpp.

Removed unused code from macros.h.

Made fixed cameras matrix-based. This simplifies some math.

Added gnomon.dat to version control. It helps me sort out the cameras as I rework them.

Moved LDQuadrilateral into its own source pair.

Moved LDTriangle into its own source pair.

Renamed ldObject.cpp → linetypes/modelobject.cpp

Renamed glCompiler.cpp → glcompiler.cpp

Renamed ldDocument.cpp → lddocument.cpp

Renamed glRenderer.cpp → glrenderer.cpp

Cleanup AlgorithmToolset::replaceCoordinates()

Fixed possible memory leak in AlgorithmToolset::editRaw().

Split LDConditionalEdge and LDEdgeLine into new source pairs

Removed the GLCamera::FreeToken name

LDObject subclass renaming:

Updated comments

Inlined away the LDOBJ macros in ldobject.h.

Rearranged declarations in basics.h

Removed the intXX type aliases and removed uses of intXX_t in favor of qintXX

Moved more stuff to GLCamera

Some documentation and cleanup in GLRenderer...

Fixed the free camera icon not showing up anymore.

Simplified camera tooltip code.

Moved camera names to GLCamera, other adjustments

Exported GLRenderer cameras into a new class, GLCamera.

Fixed some compilation problems

Commented GLCompiler::getColorForPolygon

Refactored configcollector.py

Moved the definitions of all configuration options into a new text file and made the configuration collector read that.

Moved definition of MainWindow::ToolInfo into mainwindow.cpp

Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"

Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it

Replaced uses of currentDocument() in GLRenderer with m_model

Axes are not rendered with normals so the normals client state has to be disabled when drawing them.

Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.

Grah

Moved LDComment and LDEmpty into their own source file pairs.

Moved dialogs.cpp to dialogs/externalprogrampathdialog.cpp

Cleaned up ExternalProgramPathDialog

Moved some global constants into appropriate namespaces.

Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.

Fixed potential memory leak

Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.

Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.

Made GLRenderer's Model pointer const

Moved more editing-related methods to Canvas.

Removed the unneeded makeCurrent overload

Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.

Moved triangle count rendering to Canvas

Moved document editing methods from GLRenderer to Canvas

Created a new GLRenderer derivative class "Canvas" and made MainWindow use it

Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.

Removed some unused code

Removed all overlay support. It's a messy pile of mess and I will reimplement it later as background images and it will be much better then.

GLRenderer no longer exposes the model pointer.

LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.

Made a new renderer be created for each document, instead of reusing the same renderer for all documents.

Simplified GLRenderer::convert3dTo2d. The multiplication with the modelview matrix is not necessary, it's identity all the time... with that, I think the function makes much more sense now.

- Use a QGenericMatrix to store the matrix, instead of a C array

Changed from GLdouble to GLfloat. Apparently the performance difference is greater on the GPU..? It doesn't really matter but let's be consistent.

GLRenderer::clampAngle is no longer used as of the previous commit so we can do away with it.

Switched from euler angle rotation to matrix rotation. Gimbal lock is now broken.

Wrote documentation to the Model class.

The current document pointer may no longer be null.

minor amendment

Reworked and cleaned up the circle mode

Some code cleanup in abstract editing modes.

Removed some unnecessary #include-directives.

Removed the status bar, since it's not used for anything

Split object list representation into virtual methods

Removed LDDocument::getObjectCount (superceded by Model::size)

The "all objects have valid models" invariant seems to be holding up now. At least basic drawing works again.

Made all LDObject constructors protected. Emplacement is now the only way to create objects.

Removed the LDSpawn function and replaced its last use cases.

More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.

Removed uses of LDSpawn in the algorithm toolset

Replaced uses of LDSpawn with the Model class in edit modes

Removed dead code that's standing in the way of refactoring

Removed the AddObjectDialog. Garbage code that absolutely needs to be reimplemented.

Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)

Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.

Happy new year 2017!

Matrices are now input with 9 spinboxes instead of a MLCad-style line edit

Moved the identity matrix constant into Matrix's namespace

Removed the dangerous C-array constructor from the matrix - no need for it anyway since the matrix already is an array of doubles.

Reworked the Matrix interface so that less index math is involved

Fixed formatFileSize

Refactor roundToDecimals and formatFileSize

Actually, let's call it countof(). Makes more sense.

Replaced '.length()' with 'length()' where appropriate

Replaced uses of 'x.size()' with 'length(x)'

refactor: added the length() function that's like Python's len()

refactor

Display error string if unable to write a crash log.

Made DEFINE_FLAG_ACCESS_METHODS a function macro

Cleaned up crash catcher, fixed missing <math.h> include

Fixed additive range selection not working properly.

Cleanup in GL renderer...

Cleaned up PrimitiveScanner

Further cleanup

Refactor primitives

Refactor FileToolset

Moved the about dialog into the file toolset and removed the mail button (the forums are better for this anyway)

Removed the 'once' macro since it's not used

Removed the USE_QT5 macro now that we're Qt5 only.

Change "m_" prefix to "_" in members of PartDownloader

Changed QList to QVector in PartDownloader

Cleanup PartDownloader

Unabbreviate "transform" to "transformationMatrix"

Cleanup colors.cpp/.h

Refactor GuiUtilities

Some cleanup

Draw line lengths to 2 decimal points only.

Dropped Qt 4 support. We're Qt 5 only now.

Fixed compilation.

Added doxygen.ini

Moved matrix into new source/header pair in types/

Replaced the ugly for_enum macro with a generator class

Further improved enum handling

Enum stuff

- Refactoring...

Unabbreviated overlay member names

removed removeDuplicates in favor of QSet, and the unused ObjectList class

Fixed circle mode not building the circle anymore

Removed unneeded includes from main.cpp

Moved PreferredLicenseText into HierarchyElement and made the config pointer be passed to LDPaths. Now I can finally remove the Config global pointer.

Moved LDObject::moveObjects into MoveToolset

Rename Pi to lowercase pi

Renamed ldObjectMath.cpp/.h to mathfunctions.cpp/.h

Moved rotation point handling to ldObjectMath.cpp and encapsulated it into new class MathFunctions

Split grid stuff into a new class Grid in grid.cpp/grid.h

Use a better gcd algorithm, some style fixes

Replaced GetRecursiveFilenames with QDirIterator

Reformatted primitives.cpp

Split PrimitivePrompt into its new source files, renamed it to GeneratePrimitivePrompt

Transformed primitive management into a new class PrimitiveManager that is a member of MainWindow

Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.

Fixed line length warnings

Added triangle count to viewport, added compile-time line length check

Happy new year 2016!

Cleanup miscallenous.cpp/.h

It worx again!

Rename LDSubfile to LDSubfileReference

A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)

Fix rectangle mode for real

Fixed circle, rectangle and line path modes not working anymore. Add blip coordinates to curve and line path modes. Circle mode for now only can show the coordinates of the initial blip

Branch close

Copyright header fix, some minor stuff

Subject Bézier curve fineness to the grid. By default, the coarse grid uses 8 segments, medium 16 and fine 32. Moved rasterization from demoting to inlining, it feels more sensible for it to be there.

Bézier curves now render in 3D

Bézier curves are now parsed correctly

Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.

Added some pretty pics that I left out of the previous commit.

Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.

And now it should work again too

Now compiles again

Commit work done on document manager. Happy 3rd birthday LDForge!

LDVertexObject stuff (ultimately not worth it)

Removed some unused methods

Split PartDownloadRequest into its own file

Refactor PartDownloader

Refactor PartDownloadRequest

Use automoc so that it compiles again...

Add ${LDFORGE_HEADERS} into the add_executable call so that header files without corresponding source files show up in Qt Creator's project listing

Sort LDFORGE_HEADERS in CMakeLists.txt

Refactor LDObject API

Removed the exiting hacks

Refactor GLRenderer and GLCompiler

Remove "!= nullptr" expressions

null -> nullptr

Refactor edit history

Optimize QVariant in ConfigurationValueBag

Refactor MainWindow's API

Split LDFileLoader (now LDDocumentLoader) into its own files

Refactor LDDocument's API

Make documents members of the main window

More refactor and removal of g_win uses

Make ui a reference pointer in ConfigDialog

Move ConfigDialog into src/dialogs/ subfolder

Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions

Change color config types into actual colors now that I can do that

Now doesn't crash anymore

Now compiles and links but crashes shortly after startup.

Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)

Split actions.cpp and actionsEdit.cpp into toolsets.

Happy new year 2015

elif -> else if

Replaced Min/Max/Clamp/Abs with use of Qt versions of them.

MainWindow: "ui->" -> "ui."

More refactor

More through removal of the vertex object

Rename MainWindow files

Fix result reporting in "add borders"

Fix crash when using "add borders" with a triangle

Remove the vertex object type

Removed all asserts from the code. Removed assert handling and the bomb box dialog.

Refactor OpenProgressDialog out of dialogs.cpp

Replace LDIterate function with LDObjectIterator class

Remove g_win uses from actionsEdit.cpp

Refactor the new part dialog into a new class

Refactor LDrawPathDialog and LDPaths

Rename all .cc files to .cpp files.

Closed old branch

Move colorSelector.cc to dialogs/colorselector.cpp

actually added updaterevision.py, more fixing

Replaced updaterevision with a python script, more renames, clang fixes

ColorSelector: `ui->` -> `ui.`

Cleanup progresses

More sharedpointer removal

Replace casts

Commit work done on code cleanup

Commit work on scripting scripting

Refactoring update.

- fix spacing in cmakelists

- commit ldproject stuff projects

- more work on project files projects

- commit more work done on projects projects

- commit work done on projects projects

- merged with default projects

- fixed: actions did not fire anymore

- rewrote codegen in python and merged updaterevision into it

- moved ui files to src/

- renamed .cc files to .cpp

- added dependency to libarchive projects

- refactor MainWindow a tad

- removed the vertex object

- bump copyright year

- relaced updaterevision.c with a python script

- added/corrected license headers scripting

- ast: added root and macro nodes and processing of them scripting

- now parses to tokens scripting

- more work on scripting scripting

- commit work done on scripting scripting

- fixed stability problems

- closed old head experimental

- closed old head

- closed old head

- commit work done on header/body split experimental

- added integrity scan first steps experimental

- closed bad head experimental

- commit work done on inspector experimental

- merged experimental with default experimental

- merged with default experimental

- argh experimental

- merged two default heads

- fixed a rendering issue.. experimental

- bfc stuff (at least it works now...) experimental

- merged bfc with default experimental

- merged with default experimental

- added CMakeLists.txt.user to ignore list

- removed old .gitignore

- removed unneeded debug lines... whoops

- zoom-to-fit now works.. better than before

- commit work done on header/body split

- added integrity scan first steps

- bumped version to 0.4

- pressing ctrl while drawing now locks the draw to cardinal directions

- now remembers what toolbars are enabled and what are disabled in config

- merged with default experimental

- merged selection optimization from experimental into default

- removed the clock timer I forgot in the previous commit experimental

- rewritten updateSelection() core loop, a new algorithm there makes selection updating a ton lot faster than before experimental

- re-committed bfc work (this makes 903ec1e46298 a suitable common ancestor for experimental branch features) experimental

- backed out work done on bfc (re-committing later) experimental

- merged with default experimental

- improved part downloader: now asks for the path instead of just directing the user to settings. auto-fix download now configurable and opt-in

- interface fixes and changes: edit modes now use plain letter keybinds like gimp, fixed some edit modes missing from the menu, magic wand now follows the selection mode (in order to group selective/drawing modes together like that), etc

- fixed endless loop in prepareVBO due to badly incremented iterator

- commit work done on bfc support experimental

- fixed: missing WIN32 keyword in cmakelists caused the command prompt to show up when ldforge was executed

- fixed: due to a shared pointer called via reference called dismiss() in LDDocument::closeInitialFile, this could cause LDDocuments to delete themselves in setImplicit(true) as no shared pointers were left inside closeInitialFile to keep the refcount up.

- fixed compilation on windows

- a more elegant fix to the problem addressed in the previous commit

- fixed documentless objects being selected on document close

- if an external program fails to run properly, an stdout&stderr log is now printed

- changed the unorthodox color selection grid into a push button grid

- fixed infinite recursion when loading logoed studs

- renamed line loop to line path, updated changelog

- finished line loop mode

- added line loop mode (doesn't actually create anything yet)

- circle mode now locks the angle offset on final confirmation stage

- refactor

- display a label next to the spinbox showing the fraction

- axed an unused variable

- circle tool is now able to rotate the partial circular primitives spawned

- ring finder now also tries scaling by 10 (3.4, 6.4 -> 34, 64), fixed floating point math argghhhhhhhh

- now tries to download missing files off ldraw.org

- now able to spawn partial circular primitives

- circle mode can now do hi-res

- ldforge can now open files from command-line input

- got rid of an annoying debug message

- get rid of NUM_PRIMES

- major identifier renaming

- more refactor, updated .hgignore

- refactor

- use less verbose commit time/version string in the window title

- fixed crash-on-exit (simply by not running full destruction processing during program termination)

- and fixed compilation on linux systems too

- fixed compilation on windows systems

- fixed: changing the document of a subfile wasn't recorded into history properly

- whoah looks like I forgot to save in designer...

- down with all these unnecessary semicolons!

- refactored up the configuration dialog. Instead of setting all configuration values one-by-one, dynamically fill in the values and save them into config based on widget names and data

- changed configuration entry name from minuscule camelCase to majuscule CamelCase. reasoning for this being that these variables are globals.

- fixed: direct color support did not work properly with full-black #000000

- refactoring

- refactor

- use the untransformed subfile when testing whether a subfile is flat, otherwise it won't be considered flat if the subfile is rotated. or worse...

- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism

- changed copyright lines to use my legal name instead of my nickname

- moved LDMatrixObject to be an abstract class deriving from LDObject. LDSubfile only inherits from LDMatrixObject.

- moved ringFinder into root source directory, clearing the src/misc/ directory

- split the rectangle ability out of the draw mode into its own edit mode

- changed `&&` and `||` operators to their named variants `and` and `or`

- part downloader: update the input widget with the corrected part name when guesswork is done

- initialize History as not ignoring or history will not work at all with new files

- altered the non-release version string format

- fixed incorrect conversions of weak pointers to strong ones

- reimplemented vertex tracking using a method similar to what the GL compiler uses

- now prints the filesize upon successful save

- magic wand: when flood-selecting surfaces, also pick any matching conditional lines

- fixed: ring finder's solutions' scale values would drop to 0.0 if it would not choose to upscale radii

- okay that was dumb

- updated filenames

- now with license headers

- and now it works fine too

- now compiles

- merged with main

- more work on edit modes

- more work on edit modes

- saving work done on edit mode revamp

- updated qrc

- draw the free camera icon when in magic wand mode

- changelog entry for magic wand

- update the object list when the magic wand empties the selection when clicking on background

- added the magic wand tool

- optimized simplify()

- refactor

- added ability to filter out surfaces/edgelines/condlines from the viewport

- refactored stuff

- refactor

- ringfinder: attempt to upscale fractional radii to integral ones. this improves results

- refactored up the ringfinder, apply -DDEBUG with RelWithDebInfo

- imported the .gitignore from the old git repository as .hgignore and adapted it slightly

README.md edited online with Bitbucket

- adapted the code to use hg-based updaterevision

- transitioned from git to hg

- moved most of LDColorData API into LDColor

- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action

- added split lines action, doesn't yet work very well

- allow 5 decimals for grid precision

- refactor glRenderer.h

- made transparent direct colors a compile-time opt-in since it appears to be non-standard

- got rid of the old numeric() function

- minor edit

- added close buttons to tabs

- removed obsolete stuff from colors.cc header

- disable the 'transparent' checkbox when there is no direct color selected

- changed all color usage to use LDColor classes instead of color indices. Added support for direct colors.

- source reformat

- added various hi-res counterpart primitive categories

- updated the fast-draw studs category to use the 8\ subdirectory, all existing fast-draw primitives have been moved-to so those now go to Other.

- sort primitive categories alphabetically

- added primitives toolbox

- String -> QString

- added an action for opening the subfiles pointed to by selected references as editable documents

- made select by color/type no longer require uniform selection

- LDObject::Type moved back to global namespace

- removed code rendered unnecessary

- made LDDocument use shared pointers, this eliminates a lot of document-related crashes

- subfile inverting now detects flatness and acts accordingly instead of naively applying invertnext to everything

- simplified parse error handling

- when saving, prepare the data first into a buffer and then write to disk, minimizing the time needed to perform the I/O operation.

- made coordinate rounding precision configurable

- further edits to crashcatcher

- crashcatcher: don't use the bomb box at all, instead just write the crashlog and then abort for good

- reformatted the changelog. 0.3-specific changes reformatted to use Zandronum-like version history, this is much easier to work with

- selecting an invertnext'd object now also selects the invertnext

- don't crash when inverting conditional lines

- removed the build time in favor of commit time which I think is much more important

- bfc red/green view and random colors are now mutually exclusive, enabling one disables the other.

- make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight

- use a faster ID choosing setup, this should work so long as nobody goes to create 17 million objects

- hopefully stabilized the entire shared pointers deal now

- improved shared pointer behavior, still not there yet

- initial overhaul with smart pointers

- slight refactor in ldobject methods

- renamed some renderer members

- crashcatcher: hide the main window before doing anything and also write the crashlog into a file

- when an object is deleted, if it's the renderer's object-under-cursor the field needs to be cleared or ldforge crashes

- grid-snap the drawn circle radius, not the point used for the distance calculation

- added a macro for adding operator++ and operator-- to enums, less cast hell this way

- significantly sped up selecting all objects, it is now an actually fast operation

- made the mouse-hover object highlight togglable from configuration

- added a selection hover effect to the renderer. selecting objects just became a lot more convenient...

- cut unnecessary code from MainWindow::updateSelection. speeds it up a bit, especially when unselecting but it's not fast enough to my tastes yet

- overhauled configuration setup a bit: configuration entries renamed and are now in a cfg:: namespace

- changed the config dialog's grid ui from being dynamically generated into a static one in the designer interface

- use a function for utf16 type conversion instead of a macro

- grids now have a single coordinate snap value instead of individual X, Y and Z values

- buh

- optimized picking, black is background now in pick scenes

- don't let random colors be too dark (or fully white either for dark backgrounds which use white lines)

- more icons

- fixed: the random colors action wasn't being checked on startup if it was enabled in config, causing it to go out of sync

- some minor cleanup

- simplified the code handling bfc statements a bit

- don't simplify (aka remove extra whitespace from) comment texts

- added build time to window title properly

- removed rest of the uses of <anonymous>

- added changelog entries

- vertex snapping is now smarter, does a depth compare to favor vertices closer to camera and does a short-range 2d check + out-of-range 2d check

- removed some relics from the old immediate mode renderer

- apply #pragma once to glShared.h

- type-aliased QString to String

- resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit

- more elegant version of ded0a9b, do not zoom to fit in setDocument, instead zoom to fit before rendering

- use #pragma once for the gl compiler header

- when setting the current document, the GL compiler must be told that a merge is necessary *before* setting the renderer's document as setDocument will call zoomToFit which renders the scene. this rendering must trigger a merge or ldforge crashes if a new document is created when a document is already open.

- <anonymous> -> untitled

- reimplemented the Vertex class as a derivative of QVector3D

- more icons

- more icons

- more icons

- started work on new icon set

Merge ../ldforge into gl

- added an icon for random colors

- refactored the gl compiler a tad, made selection blend work with BFC/random colors

- added ability to draw with random colors

- fixed: rotating a subfile would make known verts go out of sync

- use less saturated colors for the axes

- conditional lines are now rendered with stippled lines again

- now works with selection subfiling

- removed more debug stuff

- sped up known vertex information gathering by an order of magnitude

- cleanup

- reimplemented vertex snapping

- removed the debug code

- fixed: use @surfacenum instead of @surfacevbo to GLCompiler::vboSize... this was causing these damn artifacts whose root cause I've been hunting for MONTHS

Merge ../ldforge into gl

- more debug stuff....

Merge ../ldforge into gl

Merge ../ldforge into gl

Merge ../ldforge into gl

- added safety check to the countof macro

- more debugging...

Merge ../ldforge into gl

Merge ../ldforge into gl

Merge ../ldforge into gl

- fixed: an overlay that failed to load no longer attempts to reload it over and over again

- renamed some enumerators, added license header to glcompiler.cc

- subfile coloring now works again

- renamed several GLCompiler members and methods

- only sort and strip duplicates from the objects-staged-to-compile list when actually compiling staged objects, this eliminates needless calls which slowed file loading down a ton.

- fixed zoom value not being initialized properly + some other minor things

- refactor

- hooked object compilation to low-level functions so as to remove the compileObject() crap from edit actions

- objects need to be compiled when added to the document

- ported over the selected color blend from master

- the GL compiler now supports multiple documents

- LDDocument must be initialized with m_needsGLReInit as true or it will not be compiled properly...

- fixed build errors

Merge ../ldforge into gl

Merge ../ldforge into gl

- minor stuff

Merge ../ldforge into gl

- axes are now drawn properly again

Merge ../ldforge into gl

Merge ../ldforge into gl

- greatly improved the GL compiler, now deals colors and object removal properly

Merge ../ldforge into gl

Merge ../ldforge into gl

- work on improved rendering performance

Merge ../ldforge into gl

- now actually renders stuff correctly

- renamed some member variables for clarity

- removed some unneeded code

- converted to VBO

Merge ../ldforge into gl

- refactoring

- rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts

- renamed VertexCompiler to GLCompiler

- reworked the vertex compiler, objects are now colorized properly

- Merge ../ldforge into gl

- Merge ../ldforge into gl

- now compiles again

- Merge commit '5c835eb' into HEAD

now compiles again

Merge branch 'master' into gl

Merge branch 'master' into gl

- moved the uncolorize action to the color toolbar, renamed to uncolor

- use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.

- renamed some cmake identifiers

- now compiles with clang

- doubled buffer sizes in updaterevision to prevent GIT_HASH from being truncated

- some tweaks to version.cc

- generate gitinfo.h in the build directory, not source directory. made ldforge depend on revision_check properly

- use index-based iterating in LDDocument::closeUnused because deleting documents while iterating over g_loadedFiles causes the iterator to become invalidated

- renamed files to camelCase

- added a long int overload to StringFormatArg

- fixed various compilation issues

- doxygen'd DocumentPointer.h

- doxygenified Version.h

- changed doxygen entity style from @argh to \argh

- whoah whoops

- doxygenified Types.h

- made MessageLog.h and RingFinder.h suitable for doxygen

- added doxygen support for MainWindow.h

- added license header to format.h

- replaced the fmt/log/dlog/fprint macros in favor of template functions. renamed to format, print, dprint and fprint respectively.

- forgot macros.h out of the previous commit

- migrated the codebase to use a simpler PROPERTY macro, arrrrrrrrrrrrrrrrrrrrrgh

- changed header guards into #pragma once

- renamed LDObject::deleteSelf to LDObject::destroy

- unified separator styles

- renamed several LDObject methods

- removed debug stuff

- replaced the left-hand document list with a tab bar

- derp

- separated version stuff to new files to allow version changes be compiled near-instantly

- fixed compilation

- migrated to CMake again

- reorganized the toolbar a little bit

- updated the PROPERTY macro

- refactored filenames

- bleh, don't need IN_IDE_PARSER there..

- added dvalof debug macro

- some corrections to zoomtofit

- removed some pointless typedefs

- changed the default color toolbar

- forgot the invokation deferer files

- refactoring

- added .cfg files to .gitignore

- use the correct text color to draw coordinates on the viewport

- GL-variables that should be document-specific are now properly document-specific (i.e. pan and zoom won't be shared across documents anymore)

- make the remaining virtual methods of LDObject pure virtual

- added a type alias LDObjectList

- whoopsie, forgot to re-add the cache flag to that inline flagset there

- make subfile references subject to position transformation again

- improved rotation point finding behavior. not sure what did I even do to improve it...

- use QCoreApplication::applicationDirPath instead of a custom hack to get the application path

- changelog: the file loading fix was backported to 0.2.1

- configuration is now always situated and read from the application working directory

- did stuff to types, fixed primitive listing

- removed the File class in favor of QFile

- if loading another file to replace an explicitly loaded file, this file won't get closed automatically and thus needs to be manually closed. We also need to check that it's safe to close before doing this. Also fixed a rather argh problem with ::save not using the proper path...

- corrected relationships between documents: opening a main file with the same name as another document is to overload it and editing the document is to invalidate its cache so that it gets rendered properly in other documents possibly referencing it.

- removed the 'str' typedef, use QString directly

- use --long in the git describe command for the GIT_DESCRIBE macro definition

- some cleanup

- reformatting

- added Ball Joint-8 stuff to primitive categories

- updated copyright year in the about prompt

- updated copyright year. Best wishes for 2014!

- when configuration options are default, they need to be removed from the settings

- whoops, forgot an #include in gldraw.cc

- minor edit

- split the ring finder to separate files

- fixed: subfile rotation had matrix multiplication done with operands the wrong way around, causing morphing

- removed some unnecessary full refreshes

- added a configurable select color

- "black edges" now actually mean white edges when the background is dark

- removed debug code from ldobject::select

- refactored config code

- use a local file with QSettings at all times. Registry is such a pain..

- now recognizes the recently added 8\ subdirectory

- removed the horrible actions.h hack in favor of usage of Qt's meta object system

- updated .gitignore

- forgot this too!

- forgot these new files out...

- documents are now refcounted. This should seriously stabilize (and speed up!) the pruning of unused files

- OH MY FORKING GOD

- fixed configuration dialog not accepting values past 99.99 for grid angles

corrected angle display

further improved file behavior

- added visible line angles when drawing

removed some debug code

- bumped max amount of recent files from 5 to 10

- added selection auto-subfiling(!)

- line lengths are now displayed when drawing

- non-release builds now display git revision info if available. This turned out to be much simpler to implement than I expected..

- code parser no longer complains about scientific notation

- cleanup closing of unused files is now defered to the event loop using a new InvokationDeferer class. This prevents ldforge from closing unused files when it *really* shouldn't be doing that, instead waiting until everything is done before it begins the cleanup process.

- fixed minor goofup with for_axis

- ext programs requiring wine now properly display an error prompt if wine is missing

- convert overlay images explicitly to ARGB32 format, otherwise they might not be able to be made translucent properly

- added file headers to crashcatcher.cc and .h

- removed the version monikers, new version is now just 0.3 instead of 0.3-alpha. BUILD_ID can now only be INTERNAL and RELEASE. It was way too complicated to my tastes.

- history now works on object list moving as well

- implicit documents are now auto-closed when rendered unused, in general, a LOT better document closing behavior

- made history ignore file loading and undo/redo calls instead of having hard-coded ignore on the actions, this will probably save a lot of hair

- fixed: LDObject methods still used operator delete directly, causing *a very frustrating* crash to debug

History should now behave properly..

- corrected history behavior. LDObject::clone() is now off-limits, createCopy() must be used instead. LDObject::deleteSelf() must be used to delete LDObjects (destructor is protected now)

- fixed: cones with 3 digit numbers wouldn't go to the "Cones (48)" category properly

- LDEmpty now overrides getTypeName properly

- changed source file extension from .cpp to .cc

- LDObject::move is no longer virtual

- fixed: LDMatrixObject's position would be an invalid pointer if it was created with the default constructor, causing a crash

- Reworked primitive listing. No longer uses multi-threading.

- LDFile renamed to LDDocument, file.h -> document.h

net_autoclose is now true by default

renamed LDCndLine to LDCondLine

more stuff

Cleaned up download.cpp/.h, used PROPERTY. Added LIST_OPS to PROPERTY

minor cleanup

Renamed "quick colors" in the configuration to "color toolbar"

- re-added the external programs to the toolbar

updated README.md with a mention of the ring drawing

minor cleanup

- added build_shared to .gitignore

- Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well

- Renamed common.h to main.h, split the PROPERTY macro and supporting macros to property.h

- Changed the callback parm of PROPERTY to a stock/custom write method argument.

- upgraded the PROPERTY macro, resulting in a major code refactor

- ensured header files' guards start with LDFORGE_

removed old and unused src.pro file

renamed the version to 0.3-alpha in the changelog

changelog entry

Made rotation/pan/zoom values camera-dependant (so now there's 7 sets of them instead of 1)

updated .gitignore

removed the legacy dir

forgot the new icons

- Added new actions "Hide" and "Reveal" which allow direct setting of objects' visibility setting instead of toggling it.

added a configuration option for line anti-aliasing

fixed: deleting objects would trigger a crash

more minor changes

style corrections

i'm dumb

also removed the if() case mentioned in the prior commit from addObjectDialog.cpp. :P

enclosed the assert replacement in braces. In release mode, the assert is replaced with nothing and there's a little bit of code in addObjectDialog which uses it as a statement in an one-line if(). With the assert disappearing in release builds this triggered a GCC warning, as the if would be left without a body.

- migrated selection from ForgeWindow to individual LDFiles. Should've done this long ago.

changeProperty(): don't change the property if the value would not change, this should save some procecssing..

initialize GLRenderer::m_hoverpos to (0, 0, 0)

cosmetic fixes

fixed: the file loader would skip every 300th line. And I thought I was going nuts when my quads kept disappearing...

Made the config dialog use a list widget for navigation over a tab widget.

- added LDSharedVertex class for holding copy-on-write vertices. Will need this for future features..

now displays build type in the window title (unless a release build of a release), fixed some macro shenanigans

made messagelog handle messages with newlines

Added a crash catcher which trigger under Linux. It calls GDB and tries to get a backtrace. Also integrated assertion failure handling to this new system. Removed the print() function in the process (because the new bomb box uses a text edit and QTextDocuments's print method clashes with the macro and I figured it was a good idea to rid it anyway) and replaced all calls with log().

fixed: LDForge would crash if message log got full - the older lines would be removed with ::erase, which now expects an iterator because of the recent transition to QList. Why does QList::iterator allow 0 to be passed?

fixed a small memory leak

Fixed: LDForge would sometimes crash over unitialized data in the GL renderer. This crash sure eluded me for a while. Turned out zoomToFit(), which uses m_width and m_height is called before resizeGL() which initializes these variables. This data is used in an operator new[] call.

- added debug/release build configuration. Debug builds are really useful things!

removed some custom functions in favor of Qt implementations

reworked the ring finder algorithm greatly, tries harder to find the optimal solution

Added last-resort ring draw with quads

Ring draw: maintain separate polygons for the ring circles and draw them separately of the ring fill to prevent artifact lines from being drawn

Removed the List -> QList alias, use QList directly

removed the List class in favor of QList

removed debug prints from the ring finder

ring finder integrated! it lives!

Finally got the ringfinder working! Working on integrating it to ring drawing...

Ring drawing: previewing complete

further cleansing - removed most uses of unsigned ints, removed list reversers

a bit more cleanup

nuked "container_cast"

When drawing circles, draw the radius in the middle

further cleanup

last code reformatting i swear

Added a new editing mode for drawing circles.

it's LDForge's 1st birthday!

Stuff

Further work on VAO rendering

VAO rendering works now! woo!

Merge branch 'master' into gl, reworked stuff

For some reason, of all changesets, 4fb5763 made compiling subfiles extremely slow. WTF? Reverted the change to restore compilation speed.

down with cmake!

made LDFile interfacing a bit clearer

removed unused LabeledWidget

redirect the user to configuration if the download path is not given

err

rework quick color code a tad

rename RadioBox to RadioGroup

bit of a clarification

fixed: couldn't open larger files because of a type mismatch in moc method calling, leading into runtime problems

fixed: front and back camera wouldn't render anything

Apparently CMake requires the moc files to be compiled separately.. qt4_wrap_cpp does nothing if I don't include the results in the executable... why?

add .kdev_include_paths to gitignore

Changed build system from qmake to CMake.

merged aboutDialog.cpp to dialogs.cpp

stuff

Fixed crash with closing: since logoed studs are now loaded, the first file in g_loadedFiles is not explicit anymore. the closing code assumed this

more changes. Spawn the config prompt on first start, on the profile tab. gl_colorbfc and gl_blackedges now default to false.

woo smallification!

Added ListConfig type, using it in recent files now

minor cleanup

removed broken config type check

added profile data auto-filling

ensure that all Configs are polymorphic

bit more cleanup

- added "Go to line" action, renamed the config classes to proper camelcase

Cut the Object-suffix from LDObject types, it doesn't help things at all

Use QFlags for the inlining flags, type-safety++

Rewrote stud logo support, restructuring inlining stuff in the process. Logoed studs must only be used for rendering scenes, otherwise they will for instance get inlined in and that's not desired, or the vertex snapper will catch onto the logo's coordinates.

added support for logoed studs

more cleanup

Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit

ask the user for isecalc's path if adding edges to intersector output and no path is defined

added missing UI file

ask the user for ext prog paths instead of telling to go to configuration if no path is defined

minor change

made config dialog default to the correct tab again

made downloaded files be stored into recent files

Use a busy cursor while compiling all

Use brighter text color with dark backgrounds for the message manager

::getIndex() should never return -1 if ::file() is not null so no check needed there..

fixed: LDObject's various methods still assumed that the current file wouldn't change

Added action "add history line" for adding new history entries

rework

Picking now works with the VAO setup

BIG COMMIT -- Moving from display lists to VAOs.

camera icons now draw real tooltips instead of faking them

fixed crashing with inlining

updates to recent files menu

corrected problems with the version string

Converted configuration code to use QSettings.

Merged PartDownloader into the prompt and renamed the prompt to PartDownloader

now with changelog entry

Moved the alias macro to common.h

finalized downloading

stability to downloading

added config option, refined logic and regexps. This behaves coherently now. :)

More work on downloading

handle errors

now actually downloads parts

added missing files

Begin groundwork on downloading from ldraw.org

Create README.md

Angles need to be reset when changing the current file too

Fixed crash on opening a file

style cleanup - it should be all unified now

chglog

If the vertex snapper finds a vertex closer than 4 pixels, it likely is the vertex being looked for and the algorithm can terminate early, hopefully this will save a few cycles on large parts.

added support for BFC CLIP/NOCLIP

Added an option for listing implicit files

Added an action for creating a new, blank file, improved multi-file stability

No need to test whether it's safe to close all when creating a new part anymore, since it no longer closes anything.

some further little optimization

Don't recompile everything when using quick colors, this speeds things up a little

more cleanup

cleanup

Include the moc files in the source cpp files to reduce compile time

Renamed LDOpenFile to LDFile

- fixed: checking the hi-res option would not allow segment values over 16.

primitive generator: added support for multiple spaces before primitive numbers, add "Hi-Res" to the names of 48/ primitives

Separated LDConfig.ldr-specific stuff to ldconfig.cpp/h

commentary++

cosmetics

Made File::iterator private - it's used only for range-for loops so it should not be used by anything else than File itself.

Renamed vector to List, changed it to wrap around std::deque.

Use repaint() instead of update() when redrawing the scene after a pick so that the new scene is repainted immediately.

Fixed crashing when closing all

stuff

restyle

Apply the proper edge color in the color sector too

restyle colorselectdialog.cpp

Further restructure, removed GUI toolbar icon size slider (always 22x22 now)

fixed: the list view couldn't select multiple items anymore

some rework with closing files, not right there, seems

change camera to top if switching to draw mode in free camera

Finalized multi-file behavior. The future is here! :P

behavior update

Added actions for saving all files, closing and closing all files

Multiple file support works now! woo!

moved ext program action definitions to extprogs.cpp rather than proxying it through gui_editactions.cpp

fixed config dialog crashing

Shortcuts are now properly loaded again

updates on file list

File list is populated now..

Converted ForgeWindow to Designer UI(!)

restructure; removed g_BBox

Moved the bbox class to types

Made the pointer to current file a private member of an anonymous shell class, thus getting accessors

more formatting

Appended 'Object' to the names of all LDObject derivatives so even though the LD prefix isn't reserved for just LDObjects anymore, these classes remain distinct

Reformatting..

Bump version to 0.2.999-intern now that 0.2-alpha is out.

Tag 0.2 alpha

Fixed compilation under windows/qt5

added missing openprogress.ui

make aborting work in the new setup

make file loading be done properly as just a QObject rather than multi-threaded..

handle empty lines better

Use system clipboard rather than an internal one

apply the c++11 'override' keyword to overriding virtual functions

fixed: history is supposed to be closed by default

further work on primitive cond-lines. I think I got it now.

Renamed the color class to LDColor for clarity

primitive generator: add conditional lines to cylinders; improved bad color handling

Added history functionality for swapping

fixed: double-clicking an object and editing it that way would not register to history

when inlining (as an action), reinterpret the inlinees so that there's not any pointer mess-ups

more restyle/refactor

restyle..

Removed the two string arrays containing object types and icon names, moved these as LDObjects' virtual functions

Cleaned up the toolbars, removed clutter by removing most of the not-so-often-used items

removed the history dialog, it doesn't fit in with the new history system

Fixed: color selector prompt would crash if no default was given

dded an action to quickly toggle BFC red/green view.

pngout'd

uh, stuff

BFC icon stuff - old icon is now used for bfc red/green view-to-be

rename: msglog.cpp/h -> messagelog.cpp/h

fixed: stuff that was changed during file open was written to history

astyle history.cpp

Converted flip prompt to Designer UI

Converted Ytruder interface to Designer UI

Further verbosity, #ifdef the test axle pic out of release builds

Completed Edger 2 interface

gitignore *.dat files so I won't commit in my test files accidentally

Update gitignore

Added missing src/src.pro file

Also put all generated UI headers on ignore

remove ldforge.kdev4 and put it on ignore

Converted ldraw path prompt

fixed: overlays coudln't be defined for other cameras than the one used currently

Converted overlay prompt

Added missing what's this in edit raw prompt

Removed more obsolete code

Converted rotation point prompt

Converted about dialog

converted the raw edit prompt

Designerified the replace coordinates action

Converted the config dialog to a designer UI file

Largely reworked the color selector. Still not perfect but is better

applied message log to some actions

optimize the common case

fixed: when a new message line was added, the viewport wasn't updated

remove old test messages

Re-added the message log, now draws into the viewport

Apply tr() for possible future translations

rework aborting.. I'm still not sure I'm doing it right, though.

Show values in file opening prompt

simplify a bit

Added ability to load the overlay meta

Made overlay data be contained in the part files, still wip

UI-ified the new part prompt

changelog entry

Turns out I overlooked a slot and didn't need to derive from QSpinBox after all

Nuked the obsolete radial type now

Further work on the primitive generator

Begin converting the radial type into a primitive generator

restyled file.cpp

Added an atof overload to convert from string to float, hopefully without any precision error

Use unique IDs instead of file indices in picking lists, this is much less prone to error

minor improvements to primitive handling

Exported Rectifier interface to .ui file

..

Converted Intersector UI, improved handling of failed ext program launches, fixed launch of non-wine programs

Converted Isecalc front-end dialog to Designer UI

Added an ui file for a to-be edger2 launcher

Added support for launching external programs with Wine

Only write config options to file that actually deviate from the default. Should've done this earlier on... before 0.1 alpha was tagged

Nuked the now-empty string.cpp/.h

Added license header to primitives.cpp

Use a more greenish green rather than yellowish lime, added some constraints to when double-clicking in the viewport should edit the given object to prevent unwanted popups

When editing an existing subfile, select the primitive from the list automatically if found

Better categorized Technic primitives

Added support for regex-based primitive categorization

Moved primitive handling to new code files

Make camera icons a member of GLRenderer so multiple renderers won't conflict about them

Added primitive scanning, replaced parts list in subfile add dialog with it

Nuked parts.lst parsing, that was stupid

Converted from C-style fopen to the new File class

Added a File type that wraps around QFile and provides stuff like a null file and range-for-iterating

Converted to 16-bit strings.. again

Also allow objects to be edited by double-click in the viewport

forgot changelog entry about some key defaults changes

Objects can now be edited by double-clicking on them in the object list view

Minor tweak to drawing rectangle selection (don't draw it if it was to be an additive pick)

Update the rect vertices right after rect draw mode is entered so that the old values don't remain to spook around

And I forgot to rebrand the actual dialog box...

Renamed Set Contents into Edit LDraw Code; made the add object dialog's comment line box wider

changelog update

Clipboard now stores LDraw code rather than object clones, this seems much less prone to problems

Made history work with most things

Color changing is now logged into history

Reworked properties a bit

Restructed recent files handling, the list shouldn't screw the hell up anymore.

Cleansed the string class, moved implementations from header to code file

Laid down the foundations of the new history system

fixed: subfiles and radials couldn't be moved, made add-picking with control work again despite its double-use as range picking, changed 'Name' to 'Title' in new part dialog and widened it a bit

Refactor LDSubfile

Make LDMatrixObject's transform and pos members properties

Make LDRadial's members accessed properties

Make LDObject's color and parent properties with accessors

Purged out the old history code

Made range selection be done with Ctrl+Left rather than Shift+Left, additive is Ctrl+Alt+Left. Shift+Left is now an aliasing for panning alongside Mid.

Make drawn vertices display a label containing coordinate informations, round down calculated coordinates

Fixed behavior of mid-button vertex selector, add ability to all-replace and relative moving to replace coords

Added ability to snap to pre-existing vertices while drawing, added changelog

Fixed: Coordinates weren't drawn properly on a bright background (was always drawn in bright colors..). Note that previous commits were left dangling in their own head, the string class changes broke too many things.

Removed the Configure button from the LDraw path config dialog, it's no longer needed

Fixed text editing not triggering configuration. So simple..

Added Export To File action, moved it + insert from to File menu

rewrote isNumber using range-for

Added method for zooming to fit, fixed zoom being inappropriate when parts are first loaded

Further work on image generation experiment

Added ability to have multiple GLRenderers

Take the aforementioned operator<< into use

Made a vector class which wraps around std::vector... finally I have an operator<< for the thing.

Make LDOpenFile's members PROPERTIES

Use QMutex for the thread locking, remove filename from the progress dialog since it's not known anyway

Added a progress dialog for file loading to respond to desktops while loading files. With large files the no-response policy could be a bad thing. My first real use case of multi-threading...

Replace direct abort() calls with fatal() in String methods

Now that 0.1 is released, version number becomes 0.1.999

Added tag v0.1-alpha for changeset 3125c2a1a9ba

Tag version 0.1 alpha (for real this time)

Changed shortcut of Set Color to C, like MLCAD

Fixed: selecting objects in list view didn't update the GL view properly

Added LICENSE.icons to help clarity on the licensing of the icons

License graphical assets under CC BY-SA 3.0 Unported

Use a C-array for config too for the same reasons as with actions

Use a more Windows-like config dir name under Windows; warn when unable to read it

Added fatal error message box for the.. fatal stuff. Windows isn't really good at conveying error messages, converted actions into a C-style array because I've had a ton of problems with the vector approach (it gets zeroed when it shouldn't be..)

Fixed basename (for real...) and ported ::first and ::last from my previous string class implementation, std::string::find_last_of doesn't do what I thought it did

fix basename

added basename since windows doesn't have it

changed the way config dialog gets key input from user so it works in qt5

Renamed the OpenFile class to LDOpenFile as MinGW doesn't appear to like the former name

update project file to only use no overpainting under Windows and -lGLU under *nix

Added support for overpaint-less mode since I'm having serious trouble with that

Show the version info in the about dialog properly

Added patch version number, kind of late to do this but oh well

Update the part's Name: field when saving

Prompt for unsaved changes before loading or creating a new file

Prompt for unsaved changes in the current file if it's anonymous

Added version moniker

Added PROPERTY macro for easier exposed member variable management

Make zooming more intuitive - use incremental zooming after crossing the 15.0f mark

Add some missing icons

Added auto-coloring, this colors objects with the first found unused color

Added ability to set the depth value to something else than 0.

Always scroll to selection after building the object list. Maybe this is less irritating to deal with...

Fixed: moving objects up/down the object list messed up selection

Hopefully fixed the problem regarding objects not getting drawn at first

Fixed: pasting would add objects in reverse order

Added demote function for making conditional lines normal lines

Look for LDraw files in the part's directory first

Fixed: rotation point dialog didn't accept negative custom coords; objects were rotated by the grid angle's half

Added dialog for rotation points

Better support for dark backgrounds..

Don't do any object offsetting, instead use origin as the rotation point for the free camera.

Allow rectangle drawing by pressing shift when inserting the first vertex.

Made drawing an edit mode, allowing me to add more modes in the future

Added icons for Isecalc and coordinate replacer

Added Isecalc interface

Added icon for drawing

Added Coverer interface

Un-templated CheckBoxGroup, moved it and RadioButton into widgets.cpp/widgets.h; removed license text tab because I think LICENSE is enough.

Added icons for wireframe and inversion

Merged new part and LDraw path dialogs into dialogs.cpp

Made Qt file includes more proper (<QLineEdit> instead of <qlineedit.h>), merged setContentsDialog.cpp into dialogs.cpp

Split some stuff into separate files

Allow changing of existing overlay values

Allow one of the dimensions be filled via aspect ratio

Added image overlays, these are offset and scaled photos drawn on top of the part model to help getting part data from pictures.

Fixed coordconv3_2 algorithm, plane drawing works on any of the fixed cameras now.

Added wireframe mode

Split inverting into methods into LDObject and its subclasses, fixed a rather severe memory leak issue (GL display lists weren't being removed properly)

Readded BFC red-green view, although determining inversion isn't always correct and it cannot handle CW-certified files...

Added tool for replacing coordinate values

Rewrote the string class with a simpler version. The old one was more than probably leaking water like a boat with an elephant on board...

Further removal of hungarian notation

New gui_colortoolbar default

Make quick color toolbar use QToolButtons, make color selector's process of making color icons a method and use that for generic color icons

Speed up picking - no need to rebuild the object list as its contents do not change while picking. Fixed transparent stuff always being opaque (although it still appears messed up for some reason)

Move external prog actions into gui_actions.cpp because linking order changed

Moved source files to src/, removed zz_ prefix off dialog files.

Viewport no longer offsets stuff based on bbox size, that was stupid. Only use bbox size for initial zoom.

Object editing dialog now can alter the matrix of subfiles and radials

Moved LDraw path setting out of the configuration dialog to the LDraw path dialog, it does the job better.

Added a dialog for inquering the user's LDraw directory, not having it set leads to crashing...

Added icon for intersector

Removed groups.. that was stupid. Intersector input now based on colors.

Removed the message log. I'll find a better way to convey messages at some point..

Added Intersector interface. I'm beginning to think that groups were a bad idea...

Added rectifier interface

Add functionality for setting paths to ext progs in config dialog

Restructured the shortcut configuration tab a little, allowing it to be sorted.

Forgot the icon

Added visibility toggling

Added grouping basics - will be needed for ext programs (Intersector, Isecalc and a lot of others use 2 or more inputs, need to get all of those in somehow...) plus I think they can be useful for the actual authoring process

Further work on ext programs, LDObjectType_e integrated into LDObject

Further ytruder support

add missing license headers from new files

Begin work on external program support (Ytruder partially supported)

cleanup

Plane drawing is functional at last!!!11 Also added meta function findAction to find an action by name so I don't have to extern all of them manually in gui.cpp

matrix is now templated with N=int (usually 3)

Further tweaking

Mass renaming and cleanup. GLRenderer's and ForgeWindow's members made private. Names of common identifiers shortened, moved logVA to ForgeWindow since it's a GUI-related function (though logf remains under main.cpp for ubiquitous usage)

Compressed icons - saves 14.2 kb

Compile the icon resources to a QRC file, so that they are embedded in the application

Un-templated ButtonBox and renamed to RadioBox. Much better this way.

Added axes rendering

Added select all

Added context menu and uncolorize action

Adding objects now actually updates the bounding box like it should be.

Camera is now stored to configuration so it is preserved across program shutdown. I don't know how significant this is but eh

Switched the object list from a QTreeWidget to a QListWidget-derivative. Derivative because I'm going to add a context menu.

Added new BFC dialog

Corrected camera icon order (and association), added tool tips

Added icons to the renderer for switching between cameras. It works! Yay!

Further work on constrained cameras

Now capable of calculating coordinates based on mouse x and y and snapping them to the grid

Base work regarding constrained cameras

Fixed view going blank after resize

Added screencapping

Added action from inserting raw LDraw data into the part.

corrections to inserting from file

Added insert from action to import file contents from another file

Insertion point calculations fixed, make pasting objects cause the new objects be selected.

Added new subfile dialog

Fixed additive selection; use a green selection area background instead of blue when selecting additive; selection area borders now appear black on bright backgrounds; single additive picking an already-selected object un-selects it.

Converted combo boxes in add object and new part dialogs to radio buttons. Added a convenience widget which makes it easier for me to add groups of radio buttons. My first widget.. :')

Cleanup and some restructuring

Save the configuration before exiting so that grid choice is preserved.

Area selection! This sure was a *pain* to add.

Added panning to GL view, added action for resetting angles, zoom and pan

Use mouse wheel for zooming instead of pressing the mouse button and detecting vertical movement.

Show an error message box when main file loading fails.

A saving failure is a critical error, not a warning and should be drawn as such

Warn for save failures with the save and save as actions, also provide with a button to save the file under a different name.

Keep track of when the file was last saved and warn if there are unsaved changes when the application is closing.

Grid icons..

Make grid actions regular actions rather than auto-generated, this way they can have keyboard shortcuts

Added three configurable grid layouts, coarse, medium and fine grids, like those of MLCad. The grids are considerably finer by default simply because part editing works at a lower scale than model editing.

Added the about dialog.

Rotate subfiles and radials by their origin and not by their contents' bboxes.

Rotation improvements; allow radials be inlined

Rotation and rounding. Rotation needs work to get proper origin stuff

some GUI tweaks

Added winding reversal, though undoing it isn't quite ready yet.

Generalized SetContentsHistory to an EditHistory

Some renaming

Redrew selection icons to be clearer

Added functionality for getting a primitive name from a radial.

Radial saving and reading from files

Added object list representation for radials

Added the radial type, this one sure has been on my wishlist for a while. :)

Added select by type. Selection is now preserved over operations.

Improved shared selection handling; added select by color

More selection work - selecting from GUI updates the GL renderer now

Picking improvements

Added additive selection blending, with a toggable flash effect. :P

Highlight selected objects with a different color

GL picking stuff

Added the ability to add vertices to object corners

Added basic object moving with MLCAD-like controls.

Remade vertex icons, the old ones sucked.

Added user-configurable quick-coloring toolbar for.. quick coloring.

Recent files are now remembered and displayed in a submenu

Added inlining history management

Fleshed out the history dialog further

Added history dialog, cannot display all types yet

Added history support for adding objects.

Added history management for cut and paste, copy doesn't alter the object list by itself so it doesn't touch history

Added history handling for quad splitting.

Added history management for auto-bordering (and mass-addition in general)

History handling for list moving

Added history handling for set contents

Allow undo of set color

Allow the user to alter the tool bar icon size

Split some stuff out of the edit tool bar into move and object tool bars. The object tool bar is now located on the left side of the screen as the top one is running out of space.

Added icons for undo and redo

Added undo/redo foundations. Capable of undoing and redoing delete operations

Added move up/down actions.

Added a button to clear a keyboard shortcut.

Touched up the error icon, show the error icon in the set contents dialog if the contents are gibberish.

Added an icon for the exit action - the last one without one! Woo!

Added an icon for the 'about Qt' action. Let's hope Digia doesn't tear me apart for my horrible recreation of the Qt logo. :)

Extracted actions from ForgeWindow into their own files. The ACTION macro now manages meta, instances and callback definitions all in one. Too bad I still need to extern these actions in gui.cpp... maybe someday I'll find a way around it :)

Keyboard shortcuts can now be configured.

Systemized actions and added (for now no-op) key configurations for them

Added a New Part dialog

Don't include non-INVERTNEXT BFC statements in inlined objects.

LDObject::getIndex was bogus which would cause inlining to crash

Added support for BFC types

Added LDConfig.ldr parsing. All colors now available as long as LDConfig.ldr is provided.

Draw main color in the selection dialog based on preferences, take subfiles into account when calculating bbox

Phased out FOREACH macro in favor of C++11-style for iteration.

Simplified configuration code. Use a std::vector object to contain config pointers and have config objects register themselves upon creation instead of relying on a cfgdefs.h. Removed sections, all configurations are just simply written one after another now.

Further fixes to bad color handling. Allow main color be represented with arbitrary transparency.

57181.dat (Philo's model of the XL-motor) showcased a new problem.. there was no handling of unknown colors which led into crashes. Added stdout warnings, also added mid and dark stone colors

Restructured inlining to use a proper caching.. one cache per sub-file reference? What was I thinking? *whacks self with a 55295.dat*

Reverted changes on LDSubfile::getContents, I had a temporary, hackier solution there and forgot to change it back

Considerably improved sub-file inlining. Use a matrix class instead of double[9], educated myself on what matrix multiplication actually is and fixed the algorithm up. Aside from I/O problems, 32551.dat is correctly rendered now.

Implemented the inline action to expose inlining to the user. Also added a `deep inline` action to inline subfile recursively down into polygons and lines only.

Got inlining working. 3002.dat renders properly now! Now just to iron out the bugs and hone the behavior..

If editing contents of a gibberish object, show the reason for the gibberishness in the dialog. Clamp the bounding box scale to at least 1.0 so that polygons are visible in new files.

Parsing stability, finally figured that dumb crash

LDraw still uses inverted y-scale... I always used symmetrical objects for testing so I never noticed I had this wrong.

Scroll the color picker dialog to the selected color if it's off-screen

Added polygon bordering function

Simplify ForgeWindow::slot_splitQuads with the new methods

Added clipboard, added delete action

Done the rendering end of the red/green BFC view

Make line thickness user-configurable, draw conditional lines dashed, use the bounding box to offset the model so that it is centered properly.

Colorized polygons now appear colorized in the list view (unless disabled). GL rendered now draws transparent polygons properly.

Added color selectors for the add object dialog

Turned the test palette action into a set color action for mass object coloring.

Finished with the color selection dialog

Color dialog almost up and running. Need to make it actually selectable now. TODO: make it read LDConfig.ldr

Made the GL renderer actually use the main color configuration

Finally got the renderer to actually draw something! Still needs a lot of work but at least it doesn't show garbage or blank anymore.

Disable the locale when parsing LDraw code or atof's behavior becomes locale-dependant. Who the hell thought that was a great idea?

With removal of vectors, I don't need to keep the bearing class around either

Removed vectors. I realized that subfiles can actually perform their job just as well and that keeping them around would just imply extra work - for nothing.

Added code for parsing vertices

Added insert vertex function and added vertex icons.

Added triangle, quad and condline to the add object dialog

Begin work on dialogs for adding objects. Comments functional!

Implemented insertion of triangles, quads, condlines and comments

er, I said don't limit the amount of decimals

ftoa: don't limit the amount of decimals

Temporarily set the locale to C when using ftoa, or the resulting string is subject to the locale and gets unexpected symbols (e.g. commas for the decimal dots while the function expects periods)

Added main color configuration option, not implemented yet

Added color selection icon

Made the GL renderer background color configurable

Added RC file for the application icon introduced in d2d86021

Licensed LDForge GPL3, added some more icons

Added LDraw path setting dialog

added Save As function

and of course I forget to update ldforge.pro... or to test compile for that matter

Renamed io.cpp to file.cpp, draw.cpp to gldraw.cpp

Deleted scanner.cpp (don't need it), merged model.cpp into io.cpp. Renamed LDForgeWindow to just ForgeWindow since I want the LD* prefix only be given to LDObject derivatives.

added dummy action for future inlining command. Also GCC says that deleting instances of classes with virtual members but no virtual destructors is bad.

begin work on subfile caching

So much for that pointer class, caused more problems than it solved. For instance splitting a second quad after a first one had been split would trigger a peculiar crash...

Added split-quads-to-triangles function

Yay! This thing can save now.

Added pointer serializing so I can keep track of all LDObject* members. This way I can replace them all properly when needed.

Convert the static getCoordinateRep to a common ftoa, use this function to get proper coordinate representation when converting objects to LDraw code

Allow addition of dummy lines..

Added icon for setting contents

oops, forgot the new dialog files out

this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.

Added logf function to write to message log. Write warnings of unparsable files into the message log.

Check whether the numeric arguments of lines really are numeric, and treat lines that don't pass this check as gibberish

Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)

remove leading whitespace from comments when drawing them in the list

Added icons for the comment.

Don't version control moc files... whoops

Set window title dynamically based on filename

Add icon for file open action

rename file-specific icons to file-*

improve opening, don't auto-load 55966.dat (:P)

don't crash if g_CurrentFile is null

Recolored ends of the conditional line graphic purple instead of red for better distinguishment

Added icons for conditional lines

Initial commit

(0) tip

mercurial