From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

GSOC 2012 Progress Reports


Week 1 Report

What I did this week:
So far I have explored how the snapping system currently works, and implemented midpoint snapping. Also had various discussions with mentor and others about coding style and design issues. I'm still at uni with exams for another few weeks, but can't wait till I'm finished!

What's in store for next week?
Next week I'll be looking into how parallel snapping can work using existing code, and try to implement it. Flesh out design ideas a bit more. Explore how the snapping in the knife tool is currently implemented.

Roadblocks? Difficulties?
My mentor's internet problems get resolved this week, so with that out of the way I guess I can't really complain.

Week 2 Report

What I did this week:
Attempted to implement parallel snapping using existing code design but came to the painful realization that this tool will probably be best implemented after the redesign. I did learn in the experience, that snapping will require some kind of system to choose targets other than what you are snapping to. i.e. pick a line to snap parallel to, pick a face to snap parallel to. So I've taken this into consideration for the design of the new system. Some of the user comments on blenderartists have also been helpful in this regard. Snapping to curves also seems to be a big request so I guess I'll add that to thethe extras that I'll do when I finish the basic goals I set out to achieve. Hopefully I'll have a fairly complete idea, design and plan on how to go about this project of changing the snapping system by the time my exams are over on the 13th.

What's in store for next week?
Work on the drawing/display code for parallel line and face snapping. Find out the best way to do this using opengl. I'm planning on doing something similar to axis constraints for parallel line snapping, but planar/face snapping will require something a little different. Roadblocks? Difficulties?
Just wondering where in blender's codebase should be putting a more generic snapping system than just for transforms?


Week 3 Report

What I did this week:
This week has been rather taken up with study for the exams that I have at the start of next week. What I have done is figured out how to and implemented in a test case drawing the "axis" for parallel snapping, and the plane for planar snapping using opengl.

What's in store for next week?
Get the overall design details checked out and figured out with Martin now that he has internet again, before I launch headlong into it after my exams. Not sure at this point what I'll be starting with first, later this next week, but I hope to find out tomorrow, and hopefully begin to make ammends for the slow start.

Roadblocks? Difficulties?
Having trouble with stippling for faces, hopefully I can work out what's going wrong. oh and I hate exams.


Week 4 Report

What I did this week:
Well I finally finished exams on wednesday this week. I've managed to make a decent start on implementing the design for a more generalized snapping system, putting its header in BKE_snapping.h . Mostly just boilerplate stuff so far, and figuring out by experimentation the best way in a practical sense to link it in with existing code. I've got a design diagram I'm working on/by which I've shown to Martin, will probably upload here soon when I can clean it up a bit.

What's in store for next week?
By the end of next week, I hope to have some of the existing functionality up and running again, and hopefully also midpoint or parallel snapping if all goes well.

Roadblocks? Difficulties?
Not much this week, but I'm sure they will arise in greater numbers next week.


Week 5 Report

What I did this week:
After a discussion with Martin it was decided that the snapping system should be capable of dealing with multiple types of meshes, including BMEditMesh and DerivedMesh. It took a while to account for this in the design and the code, but hopefully it will pay off. I've also managed to re-implement vertex snapping using the new system. I still need to test it properly, and clean it up a bit to better fit in with the new design.

What's in store for next week?
Test and debug the code that I've written this week, and then get it properly looked over by Martin. Have a go at the remaining mesh snapping options (midpoint, edge, face, etc...). I'll need to figure out the best way to do the drawing code for the snapping system before I try to code parallel snapping (no existing code for that). Also start documenting the new snapping system on the wiki.

Roadblocks? Difficulties?
Had some weird compiling issues a couple of days ago, I think I figured it out though. I'm still getting familiar with how Blender deals with mesh data, but already things are starting to get a bit more comfortable.


Week 6 Report

What I did this week:
This week has been a slightly painful experience of bug squashing. Vertex snapping and Edge snapping are now back to what they were, but now using the new snapping system. I'm almost glad that things went wrong when porting them, because it's forced me to learn how they work a lot better than if there had been no problem. I took breaks from debugging to talk to people and nut out how the "multi snapping" will work in practice, and created a wiki page about it, and a nice diagram.

http://wiki.blender.org/index.php/User:Kellpossible/multi-snap-design

I'm glad I did this, because before now it was kind of all "airy" "fairy", an issue I didn't need to worry about too much until later. But now that existing snapping options are almost all back in place it's time for me to have a go at some of the new ideas...

What's in store for next week?
I'm getting the feeling (and hoping) that most of the exciting features of this project are going to come in a rush, everything beforehand has been careful designing and building of the foundations.This next week I've got one more main "foundation" to work out and code, before the fun starts. The way that the snapping system interacts with the rest of blender code is somewhat still up in the air at the moment. For now I've got some simple code linking it in just for testing purposes, but in its current form, it's not using the snapping code in the way it was designed for. So, I have to make some changes to transform_snap.c

As mentioned in the wiki page above, the snapping system will need to be able to have some method of capturing mouse input, and drawing to the screen, until the final snapping point is decided, by which time the control can be handed back to the original code using it. In this case it would be the transform operator. There would be a callback which allows the transform to update to the realtime position of the snapping point as the user moves the mouse. I've got plenty of questions about the best way to achieve something like this, which I'll need to figure out some answers to this weekend before I start trying to code it.

After this issue has been resolved, I'll go and implement parallel snapping (which requires multiple clicks), and planar snapping. If that's all I manage to get done this next week I'll be happy, but I also hope to make a start on implementing multiple snapping.

Roadblocks? Difficulties?
Trouble getting in contact with mentor. Took longer than I expected to solve and smooth all the issues with porting the existing snapping options to the new system (corner cases, bugs and the like), but I've learned a lot more about them in the process.


Week 7 Report

What I did this week:

Diagram of existing snapping system

This week has been an interesting experience. My goal was to get the new snapping system properly integrated with the transform tools. The first day I launched straight into it without a clear direction, or knowledge of what I was doing. Thankfully, creating some diagrams about how the existing system helped later on. It's tough work when, one simple operation such as applying a snap to the transform is spread throughout so much of the existing code (and in some hard to find places), with plenty of corner cases. Designing the new snapping system that can deal with this without sacrificing too much of it's ability to be re-used elsewhere has been a real challenge. Thankfully I've managed to come up with solutions with most of the problems. Also, I've worked on the groundwork for the multi-snap feature. I wanted to get parallel snap done this week, but I haven't, so it'll be catch up for the next couple of days.

What's in store for next week?
Get parallel snap, face snap, and planar snap done! Seek some user feedback. These will take a while, because I've discovered quite a few corner cases that will need dealing with, and I'm sure the blender users will discover more!

Roadblocks? Difficulties?
this week's been good despite the apparent slow progress.


Week 8 Report

This week I've been continuing the work of integrating the new snapping system, and have made a good start on parallel and planar snapping. Once I make some finishing touches, fix up the drawing code, and get scons building working, I'm hoping and excited about the prospect of seeking some user feedback next week.

What's in store for next week?
Get multi snapping working in a simple form, and polish the integration code based on feedback from Martin. Seek user feedback and provide some builds.


Week 9 Report

What I did this week:

Snapping System State Diagram

Ported over the midpoint snap to new system. Experimented with parallel snapping. I'm really annoyed I didn't manage to get parallel snapping in and committed for people to try this week. Probably would have today if I was still at home. I've also done quite a lot more in making the snapping system independent from the transform system by using callbacks, and creating default functionality that can be easily overridden from outside the snapping system. I managed to waste a good chunk of time trying to get blender to compile on my laptop. Not doing that again!

What's in store for next week?
I'm honestly quite annoyed I didn't get a build out for people to test this week. So I'm making that my main aim for this coming week. Get something useful out that people can start to use and give feedback. I've gotten quite a lot of feedback on blender artists forums, so I'm anticipating there will be a number people wanting to try things out. Do parallel snapping and planar snapping needs to get done so I can move on to finishing multi snap. I've already done a chunk of planning and code for multi-snap this week, but I've realized there's really no point having that if I don't finish the new snapping modes and finish porting over the existing stuff.


Week 10 Report

What I did this week:

Parallel Snapping Screenshot

Wooo! Finally I have something that is useful this week! Parallel snapping is working. There are some refactors that need to be done from lessons learned. Quite a lot of support code and rewriting needed to get done in order to achieve this milestone, and that's what I spent this week finishing off. I also implemented a basic form of the state transition diagram from last week, and got events hooked up properly.

What's in store for next week?
Currently this snap system is being set up so you pick a snap based on the snaps available for the object you are editing. This works nicely if all objects are same type, or you only want to snap to one type of object. But often one will want to snap to many type of objects (bone, mesh, light, camera, etc). To cover this case I'm proposing to add "point" snap. I'd like to make it so the system checks whether the type of object supports "point" snapping, which is basically vertex snap in its current form for bones and meshes. If it doesn't, then the snap system falls back to using the object's location as the snap point (think camera, lamp, etc). Currently SnapSystem_default_object_handler is the limiting factor here. I'd like to come up with a nice way to handle this, and snap picking (for parallel and planar snap) within the system over the coming weeks. More specific targets for next week are:

- re-implement face snapping and then do planar snapping. This shouldn't take long. 
- Fix, and implement drawing for snapping system. 
- Get the menus working dynamically
- Implement perpendicular snapping (basically copy of parallel)
- improve on what I did this week based on feedback from Martin and users
- Expand the current state code for use with multi-snapping
- write and test a some of the intersection functions for multi-snapping

There are 3 more weeks left, I would like to have multi-snapping in a working state soon in order to have time for writing the pen tool. I will try to keep the pen tool simple and stable at first and slowly add intelligent snapping features. That way it will hopefully be useful no matter what stage I finish at.


Week 11 Report

What I did this week:
This week I started by fixing up the parallel snapping, and removing the requirement for the mouse to be near the parallel for the snap point to get created. Face snapping is back. Planar and perpendicular snapping are implemented. Drawing is working, kinda! Dynamic menus are a work in progress at the moment, and will be sure to change when I start bringing in multi-snapping next week. It's been tricky to decide which snapping options should be available to the user when snapping between different object types. This is something that really requires user feedback (arrrgg I still haven't got a build out :S). Sooo... I'm going to release a build for windows and linux tomorrow with a nicer wiki version of this progress report with screenshots so people can confidently try it out.

What's in store for next week?
I have run into an issue which will need some resolving next week: With parallel and planar snapping it is often desirable to snap parallel to the parallel of geometry which might actually be selected and part of the transform. ie: transform line parallel to itself, or face planar to itself, or vertex planar to a face which itself is attatched to. The list goes on. This weekend I have initially tried to solve for the vertex case by storing the position of the vertex before transformation, but have come to realise the the problem is much bigger than this! Will need to talk to Martin about the possibility of creating a copy of the untransformed mesh to conduct snapping on for this option. This also relates to a request that someone had on blenderartists where the other snapping modes could be conducted on the mesh in its state before the transformation. I'll need to fix up a few todo's and issues that have arrived this week, and start having a proper crack at multi-snapping, aiming to have something usable (and useful) by the end of the week. I would also like to make a start on the pen tool. Perhaps just getting the barebones draw and snap between vertex working.

Week 12 Report

What I did this week:
This week's been a busy one, with Uni just starting to ramp up again, but It's also been a really productive one in blender! Planar Snapping and Parallel snapping are working to the point where people can use them. There are still a few bugs that need solving and handy/obvious features that are missing, but it's already enjoyable to use them. I created a Youtube video and uploaded some builds for users to test: Youtube Video of Progress Also been working on some user and Dev docs for the end of GSOC.

User Docs Still need to save and upload the diagrams/schematics for the design, and write about them as of the time of this post, but I'll get that done tomorrow morning I think.

Dev Docs


What's in store for next week?(Month)
This project isn't done by any means! But It's just starting to get exciting, so I'm pumped to keep working on it over the coming months (with Martin offering to continue to oversee progress), and exchanging feedback with users to keep improving it. Current targets are: Implement a few architectural changes that didn't make the last commit. (new menu system, event/state handling, etc) A working multi-snap prototype to show at the Blender meetup next week. Get this stuff into trunk, and make sure I cover use cases of the previous snap system that may not be so obvious to me.