Revision: 58821
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58821
Author:   lfrisken
Date:     2013-08-02 06:46:53 +0000 (Fri, 02 Aug 2013)
Log Message:
-----------
brought accross a lot of the comments from the wiki for snap.c

Modified Paths:
--------------
    branches/soc-2012-sushi/source/blender/blenkernel/intern/snap.c

Modified: branches/soc-2012-sushi/source/blender/blenkernel/intern/snap.c
===================================================================
--- branches/soc-2012-sushi/source/blender/blenkernel/intern/snap.c     
2013-08-02 06:10:53 UTC (rev 58820)
+++ branches/soc-2012-sushi/source/blender/blenkernel/intern/snap.c     
2013-08-02 06:46:53 UTC (rev 58821)
@@ -103,12 +103,23 @@
        SnapPoint isect_point; //for use if the intersection is a single point 
(isect_type == SNAP_ISECT_TYPE_POINT)
 };
 
+/*Snap struct/class is used for calculating snaps, and drawing them.
+ *It can be thought of as an abstract class. It doesn't do anything by itself,
+ *but it has many subclasses which do*/
 struct Snap{
+       /*s_type is the type of snap (Mesh, Curve, Bone, Axis...)*/
        Snap_type s_type;
-       int snap_found; //boolean whether snap point has been found
+       /*snap found is boolean whether snap point has been found*/
+       int snap_found;
+       /*snap_point is the storage point for the calculated snap point*/
        SnapPoint snap_point;
-       SnapPoint* closest_point; //previously calculated closest point to 
mouse and screen.
-       Snap* pick; //previously calculated snap to use as a picking point in 
modes such as parallel snap and planar snap
+       /*closest_point, when set is used during calculations to ignore
+        *potential snaps which are not as close to the screen (depth) or the 
mouse.
+        *It is the previously calculated closest point to mouse and screen.*/
+       SnapPoint* closest_point;
+       /*pick is a previously calculated snap to be used for mosed such as 
planar
+        *and parallel snapping, as the user picked face/line/vert.*/
+       Snap* pick;
 
        //TODO: all extra data in Snap should be subject to streamlining and 
change
        //in the near future, as soon as I get something working. A lot of quick
@@ -127,25 +138,29 @@
        /*internal calculation data*/
        float ray_start[3], ray_normal[3];
        float ray_start_local[3], ray_normal_local[3];
+       /*min_distance is the minimum distance from the mouse to the snap point 
required
+        *for the snap point to be valid during calculations*/
        int min_distance;
 
-       //matrix storage
+       /*matrix storage*/
        float imat[4][4];
        float timat[3][3];
 
-
        //snap type -- type of snap to calculate
        //geom_data_type
 
        //transform
 
-       /*subclass data struct*/
+       /*snap_data stores the data for Snap's subclasses (e.g. SnapMesh_data)*/
        void* snap_data;
 
        /*function pointers*/
+       /*run is the function which calculates the snap.*/
        void (*run)(Snap*);
        SnapIsect* (*interesect)(Snap*,Snap*); //for use with multisnap
+       /*draws the snap. By default this is set to Snap_draw_default()*/
        void (*draw)(Snap*);
+       /*function pointer to the subclass's free function*/
        void (*free)(Snap*);
        //void callback for doing transform -- function pointer
 };
@@ -163,8 +178,10 @@
        /*events and state machine variables*/
        /*most are hacks to get this working for now*/
        SnapSystem_state state;
-       Snap* pick; //used for parallel snap, perpendicular and planar snap to 
store user picked geometry
 
+       /*used for parallel snap, perpendicular and planar snap to store user 
picked geometry*/
+       Snap* pick;
+
        /*external data pointers required by all snap modes*/
        bContext* C;
        Scene* scene;
@@ -172,9 +189,12 @@
        ARegion* ar;
        Object* obedit;
 
-       SnapPoint snap_point; //storage of the snapsystem's current snap point 
for access by the outside world
-       int min_distance; //minimum distance between mouse and geometry for 
snap to occur
-       int retval; //if a snap_point has been found retval == 1 else retval == 0
+       /*snap_point is storage of the snapsystem's current snap point for 
access by the outside world*/
+       SnapPoint snap_point;
+       /*minimum distance between mouse and geometry for snap to occur*/
+       int min_distance;
+       /* reval is a boolean indicating whether or not a valid snap point has 
been found*/
+       int retval;
 
        //list of objects in the scene which the snapssystem can currently 
operate upon
        ListBase ob_list;
@@ -182,10 +202,21 @@
 
        SnapSystem_mode_select mode_select; //todo: find out more about what 
this does
 
-       void* callback_data; //data from external system (e.g. transform) for 
use in callbacks
-       void (*update_callback)(SnapSystem *ssystem, void* callback_data, 
SnapPoint sp); //update the view in external system, but don't finalize the 
snap.
+       /*callback_data is the data assigned from parent code using snapsystem 
(e.g. transform)
+        *to be used when the function pointers update, finish or 
cancel_callback are called.*/
+       void* callback_data;
+
+       /*update_callback gets called when the snapping system has not yet 
recieved confirmation from
+        *the user of the chosen snap point, but there is a temporary 
snap_point available for providing
+        *realtime feedback to the user of their actions when moving the mouse. 
In the case of transform,
+        *this means the geometry moves towards the snap point without 
permenantly being applied.*/
+       void (*update_callback)(SnapSystem *ssystem, void* callback_data, 
SnapPoint sp);
+
        void (*nofeedback_callback)(SnapSystem *ssytem, void* callback_data); 
//TODO: change name of this function
-       void (*finish_callback)(SnapSystem *ssystem, void* callback_data, 
SnapPoint sp); //update the view and finalize the snap.
+       /*finish_callback is the same as update_callback, but the snap_point is 
to be applied this time.*/
+       void (*finish_callback)(SnapSystem *ssystem, void* callback_data, 
SnapPoint sp);
+       /*cancel_callback tells the code using the snapsystem that the current 
snapsystem snap
+        *search has been cancelled.*/
        void (*cancel_callback)(SnapSystem *ssystem, void* callback_data);
 
        void (*object_iterator)(SnapSystem* ssystem, void* callback_data);
@@ -195,6 +226,8 @@
        void (*bonedata_selector)(SnapStack* stack, void* callback_data);
 };
 
+/*SnapSystem_create is a function used to setup and create an instance of 
SnapSystem.
+ *Remember to call SnapSystem_free() when finished with it.*/
 SnapSystem* SnapSystem_create( Scene* scene, View3D* v3d, ARegion* ar, Object* 
obedit, bContext* C,
                                                                void* 
callback_data,
                                                                void 
(*update_callback)(SnapSystem *ssystem, void* callback_data, SnapPoint sp),
@@ -366,6 +399,8 @@
        ssystem->retval |= retval;
 }
 
+/*evaluate the SnapStack contained within SnapSystem to
+ *allow final snappoint to be aquired and for draw functions to work. */
 void SnapSystem_evaluate_stack(SnapSystem* ssystem){
        ssystem->object_iterator(ssystem, NULL);
        SnapSystem_state_logic(ssystem);
@@ -562,6 +597,9 @@
 
 //}
 
+
+/*This function drives the snapping system by passing it events. It indicates 
whether the events
+ * have been consumed by its return value, so external code can act 
accordingly.*/
 /*TODO:
   there will be a patch soon to replace this with function based state 
handling, according to Martin's Idea.
   I've experimented with it a bit so far on a small scale and it makes sense, 
just ran out of time for this patch
@@ -663,6 +701,8 @@
        ssystem->n_obs = 0;
 }
 
+/*SnapSystem operates on a specific list of objects. This function is used to 
add objects to that list.
+ *There are other internal functions which use this function to add objects 
automatically by a filter.*/
 void SnapSystem_add_ob(SnapSystem* ssystem, Object* ob){
        SnapObRef *ob_ref = MEM_callocN(sizeof(TransSnapPoint), "SnapObRef");
        ob_ref->ob = ob;
@@ -677,6 +717,7 @@
        return ob_ref->ob;
 }
 
+/*calls draw for each of the active snaps in the stack*/
 void SnapSystem_draw(SnapSystem* ssystem){
        Snap* s;
        if(ssystem->retval && SnapStack_getN_Snaps(ssystem->sstack) > 0){
@@ -713,6 +754,7 @@
        }
 }
 
+/*reset snap system back to default state*/
 void SnapSystem_reset(SnapSystem* ssystem){
        SnapSystem_reset_ob_list(ssystem);
        SnapSystem_reset_snappoint(ssystem);
@@ -785,11 +827,16 @@
 
 
 /* -- Snap Class -- */
+/*This class represents an individual snap. */
+
+/*This function creates an instance of the Snap class.
+ *Don't forget to call Snap_free on it when you're finished with it!*/
 Snap* Snap_create(Snap_type s_type,
                                  Scene *scene, Object* ob, View3D *v3d, 
ARegion *ar, bContext *C, int mval[2],
                                  void (*run)(Snap*), void (*draw)(Snap*), void 
(*free)(Snap*)){
        Snap* s = (Snap*)MEM_mallocN(sizeof(Snap), "snap");
 
+       /*s_type is the type of snap (Mesh, Curve, Bone, Axis...)*/
        s->s_type = s_type;
 
        s->scene = scene;
@@ -799,16 +846,27 @@
        s->C = C;
        copy_v2_v2_int(s->mval, mval);
 
+       /*min_distance is the minimum distance from the mouse to the snap point 
required
+        *for the snap point to be valid during calculations*/
        s->min_distance = 30; //TODO: change to a user defined value;
-
+       /*pick is a previously calculated snap to be used for mosed such as 
planar and
+        *parallel snapping, as the user picked face/line/vert. */
        s->pick = NULL;
+       /*closes_point is a pointer, that when set is used during calculations 
to ignore
+        *potential snaps which are not as close to the screen (depth) or the 
mouse.*/
        s->closest_point = NULL;
        s->snap_found = 0;
 
        //TODO: pass the function pointers in as arguments
        s->run = run;
        s->draw = draw;
+
+       /*This variable stores the function pointer to the subclass's free 
function.
+        *It's an internal variable, please call Snap_free instead if you want 
to free
+        * the Snap class*/
        s->free = free;
+
+       /*snap_data stores the data for Snap's subclasses (e.g. SnapMesh_data)*/
        s->snap_data = NULL;
        return s;
 }
@@ -869,6 +927,9 @@
        s->free(s);
 }
 
+/*Snap_free_f() frees Snap struct's internal data. This is useful to call
+ *after Snap's subclasses have finished their own free, and need to free
+ *parent data. */
 void Snap_free_f(Snap* s){
        MEM_freeN(s);
 }
@@ -881,6 +942,8 @@
        s->draw(s);
 }
 
+/*Default drawing function to be assigned to s->draw.
+ *It draws the snap_point as a circle at its location.*/
 void Snap_draw_default(Snap *UNUSED(s)){
 //     unsigned char col[4], selectedCol[4], activeCol[4];
 //     UI_GetThemeColor3ubv(TH_TRANSFORM, col);
@@ -943,22 +1006,40 @@
 
 /* -- MESH SNAPPING -- */
 
+/* SnapMesh isn't really a class, but rather a collection of functions
+ *designed to operate on one type (Mesh) of instance of Snap defined by
+ *its s_type variable. It could be thought of as a subclass of Snap, 
introducing
+ *the necessary methods to snap with meshes*/
+
 /*TODO: implement a better system for input/output with snaps to allow things 
such as
   user configurable values for snaps like angles, number of sections for 
midpoint, and other things
   */
 typedef struct {

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to