From FreeCAD Documentation
Revision as of 07:35, 10 April 2015 by Ian.rees (talk | contribs) (added "gotchas")
Jump to navigation Jump to search

About me

My name is Ian, and I have a fair bit of free time to contribute to FreeCAD. I'm currently unemployed but looking for work in Dunedin, New Zealand.


I like making things, and have occasionally been in situations where a decent 3D CAD program would be nice to have for drawing up plans or ideally running finite-element simulations (mainly for thermal models, but pressure/tension/stress/strain would be good too). Especially with the proliferation of 3D printers, I imagine that an open source 3D CAD program could be quite useful, so I think the audience for a program like FreeCAD is rapidly growing.

Relevant experience

Non-computer experience is mainly with manual machine tools, but some homebrew and commercial CNC. I like bikes (mainly without motors) a lot, can TIG weld to a degree, and have some interest in renewable energy. I am interested in design; in the sense of making computer interfaces work well with people, and in presenting information as meaningfully as possible. Design of Everyday Things and The Visual Display of Quantitative Information are two great books that might explain my taste in design.

Computer experience is fairly wide-ranging, but not terribly deep in any particular area. I like Python and sometimes like C++, and have written a fair bit of code in both. For a while, I worked as a professional developer mainly in C for a big telecoms chipset company. Mainly using Linux lately for work reasons, but my personal machine is a Mac running OS X, and I've spent more time than I care to admit fixing Windows problems.

Tinkering space

This is just a scratch space - don't take anything here too seriously.

FreeCAD Design (in the sense of art) Guide

Anti-aliasing should be at least supported everywhere, and enabled by default.

Visible controls that toggle between two states should be indicated in a way that shows their current state. Eg, rather than a button "Toggle axis cross", a checkbox for "show axis cross" is much better.

Tools that are relevant to several workspaces (eg the measurement tool) should be pushed up into a set of general tools. This way, we'll have less work in implementing new workspaces and in updating tools, and we'll create more uniformity in the user interface across different workspaces.

Adding menu items - see Stack Overflow

FreeCAD Design (in the sense of source code) Guide

There needs to be more uniformity in which libraries get used for what. Eg: there seem to be at least 4 types of strings in common use. I'd propose sticking with QStrings, and Qt's signal-slot (rather than Boost's) as the default.

Personally, I don't think new code should be merged until it includes Doxygen-formatted comments!

We should come up with a FreeCAD style guide for each language in use, especially C++. google's might be a good starting point?

There's a good start to a "FreeCAD Architecture" wiki page, in a forum post by Werner at [1] .

Currently, the FCStd opening process is a bit finicky and fragile, I've put some more thoughts at [2] and some code that may, or may not, be useful at [3] . Short version is to re-work Base::Reader into something that holds onto a file handle and doles out istreams to specific files, rather than the current approach where it just holds one particular istream.

Features I'd like to see

I've made a separate page for an idea to make error dialogues more informative and helpful to both end-users and developers, for now it's called Helki

App::PropertyEnumeration has some nice features for providing string<->int mapping, but since it's a Property it can't be passed as an argument. Perhaps move the nice enumeration features in their own class and make PropertyEnumeration have one of the new class in a Property?

"Gotchas" in working on FreeCAD

If, while adding Qt slots, "public slots:" gives you a bunch of errors: remember that in FreeCAD land, we use "public Q_SLOTS:" instead.