Difference between revisions of "User:Ian.rees"

From FreeCAD Documentation
Jump to navigation Jump to search
(added "gotchas")
Line 1: Line 1:
 
== About me ==
 
== 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.
+
My name is Ian, I'm currently a software engineer in in Dunedin, New Zealand.  Over the last year or so, I've had periods with a fair bit of free time to contribute to FreeCAD.
  
 
=== Motivation ===
 
=== Motivation ===
Line 9: Line 9:
 
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.  [http://www.amazon.com/The-Design-Everyday-Things-Expanded/dp/0465050654 Design of Everyday Things] and [http://www.amazon.com/The-Visual-Display-Quantitative-Information/dp/0961392142 The Visual Display of Quantitative Information] are two great books that might explain my taste in design.
 
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.  [http://www.amazon.com/The-Design-Everyday-Things-Expanded/dp/0465050654 Design of Everyday Things] and [http://www.amazon.com/The-Visual-Display-Quantitative-Information/dp/0961392142 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.
+
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 Windows/Visual Studio lately for work reasons, but tend to gravitate to Linux for getting work done.  My personal machine is a Mac running OS X, and I've spent more time than I care to admit fixing Windows problems.
 +
 
 +
== How I use git ==
 +
This is intended to eventually either become it's own page or get merged into an existing page.  I'm learning git as I go, so there's a good chance that this stuff is only very vaguely correct.  It works for me.
 +
 
 +
=== Initial Setup ===
 +
* Clone the FreeCAD repository to your computer
 +
* Make a github account, setup SSH access to it
 +
* Setup git to pull master branch from the FreeCAD repo, but push to your github one.
 +
 
 +
=== Scenario: Want to try a branch that someone has shared via the forum ===
 +
Link is of a format like https://github.com/someuser/somerepository/tree/somebranch , and may or may not point directly to the branch of interest.  If not, it'll hopefully be clear from the forum post.  Go to that github page, and you'll see a link on the right side with a header like "HTTPS clone URL".  Click the SSH link below that to turn the link protocol into SSH, copy the address.
 +
 
 +
Now, in your local command line, cd to your FreeCAD source directory.  We're going to check out the master branch, add that user's github repository to your local git repository as a "remote", fetch a list of their branches, then check out a local copy of the interesting branch.
 +
 
 +
  freecad-src-dir $ git checkout master
 +
    (probably not necessary, but I do this as a habit to remind myself that any changes in the working directory need to be committed)
 +
  freecad-src-dir $ git remote add your_nickname_for_remote_repo <paste SSH link here, eg git@github.com:someuser/somerepository.git>
 +
    (I tend to use the author's username as the local repository name)
 +
  freecad-src-dir $ git fetch your_nickname_for_remote_repo
 +
    (at this point, a "git branch" will show your local branches, "git branch -a" will show all available remote branches too!)
 +
  freecad-src-dir $ git checkout remotes/your_nickname_for_remote_repo/branch_name
 +
    (you'll hopefully get a message about being in 'detached HEAD' - see stackexchange if this concerns you)
 +
  freecad-src-dir $ git checkout -b todays_date_forum_test_N
 +
    (reattach your head, not strictly necessary, but can be handy to have a proper branch)
 +
 
 +
At this point, you've hopefully not run into any real problems, and have a FreeCAD source tree that's functionally identical to the one shared on the forum!  When you're done, a "git checkout master" should get back to the last master you've fetched into your local repository.
  
 
== Tinkering space ==
 
== Tinkering space ==
Line 35: Line 61:
  
 
=== Features I'd like to see ===
 
=== 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]]
+
* 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]]
 
+
* Have some ideas of a slicer (as in 3D printer slicer) wrapper/workbench, such that hints could be given to the slicer for things like volumes where loose filler is OK, where might need to be stronger, etc. and the slicer could maybe even give a nice 3D preview.
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?
+
* I'd like to get done with the new Drawing module, and have that merged in to the main FreeCAD code base.
 +
* The new Assembly and Path, and the recent work on FEM are all quite exciting!
 +
* Qt5!  Lots of good changes will come from this.
 +
* Multi-threading.
  
 
==="Gotchas" in working on FreeCAD===
 
==="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.
 
If, while adding Qt slots, "public slots:" gives you a bunch of errors: remember that in FreeCAD land, we use "public Q_SLOTS:" instead.

Revision as of 08:45, 9 June 2015

About me

My name is Ian, I'm currently a software engineer in in Dunedin, New Zealand. Over the last year or so, I've had periods with a fair bit of free time to contribute to FreeCAD.

Motivation

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 Windows/Visual Studio lately for work reasons, but tend to gravitate to Linux for getting work done. My personal machine is a Mac running OS X, and I've spent more time than I care to admit fixing Windows problems.

How I use git

This is intended to eventually either become it's own page or get merged into an existing page. I'm learning git as I go, so there's a good chance that this stuff is only very vaguely correct. It works for me.

Initial Setup

  • Clone the FreeCAD repository to your computer
  • Make a github account, setup SSH access to it
  • Setup git to pull master branch from the FreeCAD repo, but push to your github one.

Scenario: Want to try a branch that someone has shared via the forum

Link is of a format like https://github.com/someuser/somerepository/tree/somebranch , and may or may not point directly to the branch of interest. If not, it'll hopefully be clear from the forum post. Go to that github page, and you'll see a link on the right side with a header like "HTTPS clone URL". Click the SSH link below that to turn the link protocol into SSH, copy the address.

Now, in your local command line, cd to your FreeCAD source directory. We're going to check out the master branch, add that user's github repository to your local git repository as a "remote", fetch a list of their branches, then check out a local copy of the interesting branch.

 freecad-src-dir $ git checkout master
   (probably not necessary, but I do this as a habit to remind myself that any changes in the working directory need to be committed)
 freecad-src-dir $ git remote add your_nickname_for_remote_repo <paste SSH link here, eg git@github.com:someuser/somerepository.git>
   (I tend to use the author's username as the local repository name)
 freecad-src-dir $ git fetch your_nickname_for_remote_repo
   (at this point, a "git branch" will show your local branches, "git branch -a" will show all available remote branches too!)
 freecad-src-dir $ git checkout remotes/your_nickname_for_remote_repo/branch_name
   (you'll hopefully get a message about being in 'detached HEAD' - see stackexchange if this concerns you)
 freecad-src-dir $ git checkout -b todays_date_forum_test_N
   (reattach your head, not strictly necessary, but can be handy to have a proper branch)

At this point, you've hopefully not run into any real problems, and have a FreeCAD source tree that's functionally identical to the one shared on the forum! When you're done, a "git checkout master" should get back to the last master you've fetched into your local repository.

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
  • Have some ideas of a slicer (as in 3D printer slicer) wrapper/workbench, such that hints could be given to the slicer for things like volumes where loose filler is OK, where might need to be stronger, etc. and the slicer could maybe even give a nice 3D preview.
  • I'd like to get done with the new Drawing module, and have that merged in to the main FreeCAD code base.
  • The new Assembly and Path, and the recent work on FEM are all quite exciting!
  • Qt5! Lots of good changes will come from this.
  • Multi-threading.

"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.