# Editing User:NyahCh3ck20/Proposal

From BRL-CAD

**Warning:** You are not logged in. Your IP address will be publicly visible if you make any edits. If you **log in** or **create an account**, your edits will be attributed to your username, along with other benefits.

The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision | Your text | ||

Line 1: | Line 1: | ||

= Personal Information = | = Personal Information = | ||

− | |||

NAME : Check Nyah Watad Wallah | NAME : Check Nyah Watad Wallah | ||

− | |||

EMAIL: check.nyah@gmail.com | EMAIL: check.nyah@gmail.com | ||

− | |||

IRC: Ch3ck | IRC: Ch3ck | ||

Line 10: | Line 7: | ||

I am a freshman Computer Engineering Student at the University of Buea, South West Region,Cameroon. | I am a freshman Computer Engineering Student at the University of Buea, South West Region,Cameroon. | ||

After wining the 1st prize for Programming among the freshman year students at my university. I have founded a programmers club to help develop the coding skills among members of my university community | After wining the 1st prize for Programming among the freshman year students at my university. I have founded a programmers club to help develop the coding skills among members of my university community | ||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

= Project Information = | = Project Information = | ||

Line 34: | Line 18: | ||

=== Introduction === | === Introduction === | ||

− | The Pull/unpush command/routine is a high priority project for BRL-CAD. The pull command seeks to restore the original state of the csg tree from any particular node after the push command has been executed. However, the Push command is used to walk the geometry tree from a specified | + | The Pull/unpush command/routine is a high priority project for BRL-CAD. The pull command seeks to restore the original state of the csg tree from any particular node after the push command has been executed. However, the Push command is used to walk the geometry tree from a specified top to the primitive level, collecting the matrix transformations such as (translations, rotations or scales) applied to new assemblies using matrix edits(oed command). The push then applies the matrix tranformation parameters to the primitives, eliminationg the need for storing the various matrix transformations thereby setting them to identity matrices. This process however looses any local coorrdinate system used in constructing the geometric objects. The pull routine seeks to restore the original tree state by reversing any tranformation operations performed on the primitive shapes from a designated top node on the csg tree. Here, I would like to show my detailed proposal in solving this summer's project. My code patch will have a sample routine that takes as argument a designated node(such as a primitive) and performs the Inverse of any rotation, Inverse of any translation and the inverse of a scale.) and performs the matrix inverse the primitive matrix. |

Line 74: | Line 58: | ||

0 0 1 [11] | 0 0 1 [11] | ||

0 0 0 1 | 0 0 0 1 | ||

− | |||

The Inverse of the various transformations will be computed by the routine | The Inverse of the various transformations will be computed by the routine | ||

− | |||

void InverseTransform(mat_t transf); shown in the code patch | void InverseTransform(mat_t transf); shown in the code patch | ||

− | + | ||

− | + | or a preprocessor directive | |

− | + | ||

− | + | #define InverseTransform(transf) //so as to increase speed of execution. | |

+ | |||

+ | |||

The Mathematics of the Inverse Transformation | The Mathematics of the Inverse Transformation | ||

Line 99: | Line 83: | ||

Inverse Translation: | Inverse Translation: | ||

A translation is an affine transformation with no fixed points. Matrix multiplications always have the origin as a fixed point. Nevertheless, there is a common workaround using homogeneous coordinates to represent a translation of a vector space with matrix multiplication: Write the 3-dimensional vector w = (wx, wy, wz) using 4 homogeneous coordinates as w = (wx, wy, wz, 1). | A translation is an affine transformation with no fixed points. Matrix multiplications always have the origin as a fixed point. Nevertheless, there is a common workaround using homogeneous coordinates to represent a translation of a vector space with matrix multiplication: Write the 3-dimensional vector w = (wx, wy, wz) using 4 homogeneous coordinates as w = (wx, wy, wz, 1). | ||

− | so the Inverse | + | so the Inverse of a translation is simply the reverse of the matrix. if TrnA = (a, b ,c , d) Inverse(TrnA) = (-a, -b, -c, -d) |

− | if TrnA = (a, b ,c , d) Inverse(TrnA) = (-a, -b, -c, -d) | ||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

=== Overall Structure Pull routine === | === Overall Structure Pull routine === | ||

+ | The pull routine will use the inverse transformations to restore the primitive back to its original state, taking note of the local geometric transformations after each inverse transformation which will be stored together with the original matrix transformations as it moves back up the tree. | ||

− | + | However,brlcad already has the functionality for performing matrix operations on objects as in(src/libged/push.c, xpush.c). I can use the InverseTransf() as a subroutine in the pull operation and simply use the MAT_COPY directive to copy the various 4x4 original matrix transformations to the corresponding node up the tree from the leaf. | |

− | + | So, here is a summary of the pull command | |

− | However,brlcad already has the functionality for performing matrix operations on objects as in(src/libged/push.c, xpush.c). I | ||

− | + | *. create a structure to hold the original matrix and corresponding local coordinate systems while calling InverseTranf(). | |

− | + | *. create a loop to move down the tree to the leaf nodes while recording the transformations | |

− | + | *. pull leaf() routine : which runs in parallel restore the original state of the primitive objects.(leafs) | |

− | *. create a loop to move down the tree to the leaf | ||

− | *. pull leaf() routine : which runs in parallel | ||

− | |||

*. mat_restore() routine: which restores the original matrix transformation and coordinate system at each node. | *. mat_restore() routine: which restores the original matrix transformation and coordinate system at each node. | ||

+ | Tests and Verification: | ||

+ | I believe test driven development would be key in finding and fixing problems with the pull routine and then with more tests to ensure the code functions correctly and its bulletproof to all forms of object inputs. This will be enhanced with the creation of a special regression test for the pull command to avoid modification of unwanted nodes/objects.Also, this command will be included among the MGED commands and a well written manual will be made so support the usage of the command. | ||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

=== Links === | === Links === | ||

Line 191: | Line 111: | ||

= Deliverables = | = Deliverables = | ||

− | |||

− | Implementation of the complete pull routine with further testing. | + | Implementation of the Inverse transformation routine. and other pull subroutines(mat_restore()). |

− | + | Implementation of the complete pull routine with further testing. | |

− | Integration of the Pull routine into MGED command interface together with Documentation containing(summary together with usage capabilities) | + | Integration of the Pull routine into MGED command interface together with Documentation containing(summary together with usage capabilities) |

+ | |||

= Development schedule = | = Development schedule = | ||

− | |||

− | |||

− | |||

− | |||

− | + | == July 1st (~ 3 weeks) == | |

+ | Study BRLCAD Manuals and other Documentation on the Push Command | ||

+ | Discuss with other developers | ||

+ | Study the (src/libged , /include ) libraries and the implementation push/xpush commands. | ||

Discuss more coding specifications and implementations details with mentor/other developers | Discuss more coding specifications and implementations details with mentor/other developers | ||

− | + | ==July 21(1 week)== | |

− | + | Implementation of the Inverse Transformations with determination of original matrix transformations. | |

− | Implementation of the | ||

− | determination of original matrix transformations. | ||

− | |||

Tests on sample primitive matrices | Tests on sample primitive matrices | ||

− | |||

− | |||

− | |||

− | |||

− | Implementation of pull routine(pull_leaf() and others) | + | ==July 28 - Aug 18(4 weeks) == |

− | + | Implementation of do_restore() routine | |

− | Testing and functionality verification of function | + | which traverses nodes restoring the original matrix |

+ | Implementation of pull routine(pull_leaf() and others) | ||

+ | Testing and functionality verification of function | ||

− | Mid-term evaluation in July 29 - Aug. 2 | + | Mid-term evaluation in July 29 - Aug. 2 |

− | + | == Aug. 19 - Sept 14 (4 weeks) == | |

− | Finalization of complete pull routine | + | Finalization of complete pull routine |

− | + | ||

− | Tests | + | Tests |

− | Tests | + | Tests on the final pull routine on primitives |

− | + | ||

− | + | Integration of Pull into MGED command interface. | |

− | Integration of Pull into MGED command interface. | + | Testing of functionality of command |

− | + | and debugging | |

− | Testing of functionality of command and | + | == Sept 15 - Sept 21(1 week) == |

− | + | Tests | |

− | + | Fix bugs and improve performance of routine | |

− | Tests | + | Documentation and code clean up |

− | Fix bugs and improve performance of routine | ||

− | |||

− | Documentation and code clean up | ||

− | + | == Sept 23 - Sept 27(1 week) == | |

− | Final Evaluation | + | Final Evaluation |

− | Submission of Final code to Google. | + | Submission of Final code to Google. |

= Time availability = | = Time availability = | ||

− | I would be able to offer over 40 hours on the project. However, Our Second Semester ends late june or early july and our next semester begins in early October | + | |

+ | I would be able to offer over 40 hours on the project. However, Our Second Semester ends late june or early july and our next semester begins in early October. | ||

= Why BRL-CAD? = | = Why BRL-CAD? = |