https://brlcad.org/w/api.php?action=feedcontributions&user=Gaganjyotsingh&feedformat=atomBRL-CAD - User contributions [en]2024-03-28T15:13:08ZUser contributionsMediaWiki 1.32.2https://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9709Google Summer of Code/20162016-05-16T18:00:31Z<p>Gaganjyotsingh: /* LibreCAD V3 Bezier and FILE I/O */</p>
<hr />
<div>= GSoC 2016 With BRL-CAD =<br />
<br />
'''BRL-CAD was accepted as a [https://summerofcode.withgoogle.com mentoring organization] for the Google Summer of Code!'''<br />
<br />
We accepted '''9''' students that prepared quality proposals and demonstrated commitment, with details below for those students that were successful. As an umbrella org, several students were selected for associated orgs LibreCAD, OpenSCAD, and FreeCAD.<br />
<br />
= Accepted Projects =<br />
<br />
== Automatic Polygonal Mesh Healing ==<br />
* Adding mesh healing features to BoT<br />
* Student: [[User:tandoorichick|Rakshika Bagavathy]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:tandoorichick/GSoC2016/Project |Project Plan]]<br />
* [[User:tandoorichick/GSoC2016/Logs|Development Logs]]<br />
<br />
== BRL-CAD Web Infrastructure Update ==<br />
* Create brand new main website and wiki update<br />
* Student: [[User:Oleksandr_dubenko|Oleksandr Dubenko]]<br />
* [https://summerofcode.withgoogle.com/projects/#6118551983226880 Abstract]<br />
* [https://blog.esde.name/project-plan/ Project Plan]<br />
* [https://blog.esde.name/ Development Logs]<br />
<br />
== User Interface for Customizing Models ==<br />
* Create user interface to Customize Model interactively instead of modifying them manually.<br />
* Student: [[User:Amarjeet_Singh_Kapoor|Amarjeet Singh Kapoor]]<br />
* [https://summerofcode.withgoogle.com/projects/#6243883906236416 Abstract]<br />
* [[User: Amarjeet_Singh_Kapoor/GSoC2016/Project |Project Plan]]<br />
* [https://amarjeetkapoor1.wordpress.com/ Development Logs ]<br />
<br />
== GPGPU Support for Boolean Evaluation Used in Ray Tracing ==<br />
* Accelerate Boolean Evauluation using a GPU, if available<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Catchchaos/GSoC2016/Proposal|Project Plan]]<br />
* [https://catchchaos.wordpress.com/ Development Logs]<br />
<br />
== LibreCAD 3 Scriptable User Interface Creation ==<br />
* Create GUI for operations and allow it to be modified without recompilation<br />
* Student: [[User:Feragon.xi|Florian Roméo]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Feragon.xi/GSoC2016/Project |Project Plan]]<br />
* [https://gsoc16.feragon.net/ Development Logs]<br />
<br />
== LibreCAD V3 Bezier and FILE I/O==<br />
* Adding support of beziers and DXF output to LibreCAD_3<br />
* Student: [[User:Gaganjyotsingh|Gaganjyot Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[https://codebasement.wordpress.com/bio/ Project Plan]]<br />
* [[https://codebasement.wordpress.com Development Logs]]<br />
<br />
== Online Geometry Viewer ==<br />
* Making [https://github.com/BRL-CAD/OGV-meteor OGV] production ready and available to use for a wider majority of people.<br />
<br />
* Student: [[User:Gauravjeet|Gauravjeet Singh]]<br />
* [https://summerofcode.withgoogle.com/projects/#4756339498680320 Abstract]<br />
* [http://gauravjeetsingh.github.io/proposal/ Project Plan]<br />
* [http://gauravjeetsingh.github.io/ Development Logs]<br />
<br />
== Plate Mode NURBS raytracing ==<br />
* Implementing plate mode raytracing for NURBS surfaces<br />
* Student: [[User:bojian_ustc|Bojian Wu]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:bojian_ustc/GSoC2016/Project |Project Plan]]<br />
* [http://bojianwu.github.io Development Logs]<br />
<br />
== The FreeCAD Plugin Installer ==<br />
* The main idea is to implement a plugin manager for FreeCAD that will be used to install/remove/update plugins and other unofficial workbenches or modules and macros.<br />
* Student: [[User:mandeeps708|Mandeep Singh]]<br />
* [https://summerofcode.withgoogle.com/projects/#5341872155262976 Abstract]<br />
* [[User:Mandeeps708/gsoc_proposal |Project Plan]]<br />
* [http://mandeep7.wordpress.com Development Logs]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9703Google Summer of Code/20162016-05-13T18:57:23Z<p>Gaganjyotsingh: /* LibreCAD V3 Bezier and FILE I/O */</p>
<hr />
<div>= GSoC 2016 With BRL-CAD =<br />
<br />
'''BRL-CAD was accepted as a [https://summerofcode.withgoogle.com mentoring organization] for the Google Summer of Code!'''<br />
<br />
We accepted '''9''' students that prepared quality proposals and demonstrated commitment, with details below for those students that were successful. As an umbrella org, several students were selected for associated orgs LibreCAD, OpenSCAD, and FreeCAD.<br />
<br />
= Accepted Projects =<br />
<br />
== Automatic Polygonal Mesh Healing ==<br />
* 80-char summary<br />
* Student: [[User:tandoorichick|Rakshika Bagavathy]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:tandoorichick/GSoC2016/Project |Project Plan]]<br />
* [[User:your_wiki_username/GSoC2016/Logs|Development Logs]]<br />
<br />
== BRL-CAD Web Infrastructure Update ==<br />
* Create brand new main website and wiki update<br />
* Student: [[User:Oleksandr_dubenko|Oleksandr Dubenko]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [https://blog.esde.name/project-plan/ Project Plan]<br />
* [https://blog.esde.name/ Development Logs]<br />
<br />
== User Interface for Customizing Models ==<br />
* Create user interface to Customize Model interactively instead of modifying them manually.<br />
* Student: [[User:Amarjeet_Singh_Kapoor|Amarjeet Singh Kapoor]]<br />
* [https://summerofcode.withgoogle.com/projects/#6243883906236416 Abstract]<br />
* [[User: Amarjeet_Singh_Kapoor/GSoC2016/Project |Project Plan]]<br />
* [https://amarjeetkapoor1.wordpress.com/ Development Logs ]<br />
<br />
== GPGPU Support for Boolean Evaluation Used in Ray Tracing ==<br />
* Accelerate Boolean Evauluation using a GPU, if available<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Catchchaos/GSoC2016/Proposal|Project Plan]]<br />
* [https://catchchaos.wordpress.com/ Development Logs]<br />
<br />
== LibreCAD 3 Scriptable User Interface Creation ==<br />
* Create GUI for operations and allow it to be modified without recompilation<br />
* Student: [[User:Feragon.xi|Florian Roméo]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Feragon.xi/GSoC2016/Project |Project Plan]]<br />
* [https://gsoc16.feragon.net/ Development Logs]<br />
<br />
== LibreCAD V3 Bezier and FILE I/O==<br />
* Adding support of beziers and DXF output to LibreCAD_3<br />
* Student: [[User:Gaganjyotsingh|Gaganjyot Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[https://goo.gl/1O2zkV Project Plan]]<br />
* [[https://codebasement.wordpress.com Development Logs]]<br />
<br />
== Online Geometry Viewer ==<br />
* Making OGV production ready and available to use for a wider majority of people.<br />
<br />
* Student: [[User:Gauravjeet|Gauravjeet Singh]]<br />
* [https://summerofcode.withgoogle.com/projects/#4756339498680320 Abstract]<br />
* [http://gauravjeetsingh.github.io/proposal/ Project Plan]<br />
* [http://gauravjeetsingh.github.io/ Development Logs]<br />
<br />
== Plate Mode NURBS raytracing ==<br />
* Implementing plate mode raytracing for NURBS surfaces<br />
* Student: [[User:bojian_ustc|Bojian Wu]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:bojian_ustc/GSoC2016/Project |Project Plan]]<br />
* [http://bojianwu.github.io Development Logs]<br />
<br />
== The FreeCAD Plugin Installer ==<br />
* The main idea is to implement a plugin manager for FreeCAD that will be used to install/remove/update plugins and other unofficial workbenches or modules and macros.<br />
* Student: [[User:mandeeps708|Mandeep Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Mandeeps708/gsoc_proposal |Project Plan]]<br />
* [http://mandeep7.wordpress.com Development Logs]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9698Google Summer of Code/20162016-05-13T14:25:17Z<p>Gaganjyotsingh: /* LibreCAD V3 Bezier and FILE I/O */</p>
<hr />
<div>= GSoC 2016 With BRL-CAD =<br />
<br />
'''BRL-CAD was accepted as a [https://summerofcode.withgoogle.com mentoring organization] for the Google Summer of Code!'''<br />
<br />
We accepted '''9''' students that prepared quality proposals and demonstrated commitment, with details below for those students that were successful. As an umbrella org, several students were selected for associated orgs LibreCAD, OpenSCAD, and FreeCAD.<br />
<br />
= Accepted Projects =<br />
<br />
== Automatic Polygonal Mesh Healing ==<br />
* 80-char summary<br />
* Student: [[User:tandoorichick|Rakshika Bagavathy]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:tandoorichick/GSoC2016/Project |Project Plan]]<br />
* [[User:your_wiki_username/GSoC2016/Logs|Development Logs]]<br />
<br />
== BRL-CAD Web Infrastructure Update ==<br />
* Create brand new main website and wiki update<br />
* Student: [[User:Oleksandr_dubenko|Oleksandr Dubenko]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [https://blog.esde.name/project-plan/ Project Plan]<br />
* [https://blog.esde.name/ Development Logs]<br />
<br />
== User Interface for Customizing Models ==<br />
* Create user interface to Customize Model interactively instead of modifying them manually.<br />
* Student: [[User:Amarjeet_Singh_Kapoor|Amarjeet Singh Kapoor]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User: Amarjeet_Singh_Kapoor/GSoC2016/Project |Project Plan]]<br />
* [https://amarjeetkapoor1.wordpress.com/ Development Logs ]<br />
<br />
== GPGPU Support for Boolean Evaluation Used in Ray Tracing ==<br />
* Accelerate Boolean Evauluation using a GPU, if available<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Catchchaos/GSoC2016/Proposal|Project Plan]]<br />
* [https://catchchaos.wordpress.com/ Development Logs]<br />
<br />
== LibreCAD 3 Scriptable User Interface Creation ==<br />
* Create GUI for operations and allow it to be modified without recompilation<br />
* Student: [[User:Feragon.xi|Florian Roméo]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Feragon.xi/GSoC2016/Project |Project Plan]]<br />
* [[User:Feragon.xi/GSoC2016/Logs|Development Logs]]<br />
<br />
== LibreCAD V3 Bezier and FILE I/O==<br />
* Adding support of beziers and DXF output to LibreCAD_3<br />
* Student: [[User:Gaganjyotsingh|Gaganjyot Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[https://goo.gl/1O2zkV Project Plan]]<br />
* [[http://blog.gaganjyot.com Development Logs]]<br />
<br />
== Online Geometry Viewer ==<br />
* Making OGV production ready and available to use for a wider majority of people.<br />
<br />
* Student: [[User:Gauravjeet|Gauravjeet Singh]]<br />
* [https://summerofcode.withgoogle.com/projects/#4756339498680320 Abstract]<br />
* [http://gauravjeetsingh.github.io/proposal/ Project Plan]<br />
* [http://gauravjeetsingh.github.io/ Development Logs]<br />
<br />
== Plate Mode NURBS raytracing ==<br />
* Implementing plate mode raytracing for NURBS surfaces<br />
* Student: [[User:bojian_ustc|Bojian Wu]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:bojian_ustc/GSoC2016/Project |Project Plan]]<br />
* [http://bojianwu.github.io Development Logs]<br />
<br />
== The FreeCAD Plugin Installer ==<br />
* The main idea is to implement a plugin manager for FreeCAD that will be used to install/remove/update plugins and other unofficial workbenches or modules and macros.<br />
* Student: [[User:mandeeps708|Mandeep Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Mandeeps708/gsoc_proposal |Project Plan]]<br />
* [http://mandeep7.wordpress.com Development Logs]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9697Google Summer of Code/20162016-05-13T14:11:47Z<p>Gaganjyotsingh: /* LibreCAD V3 Bezier and FILE I/O */</p>
<hr />
<div>= GSoC 2016 With BRL-CAD =<br />
<br />
'''BRL-CAD was accepted as a [https://summerofcode.withgoogle.com mentoring organization] for the Google Summer of Code!'''<br />
<br />
We accepted '''9''' students that prepared quality proposals and demonstrated commitment, with details below for those students that were successful. As an umbrella org, several students were selected for associated orgs LibreCAD, OpenSCAD, and FreeCAD.<br />
<br />
= Accepted Projects =<br />
<br />
== Automatic Polygonal Mesh Healing ==<br />
* 80-char summary<br />
* Student: [[User:tandoorichick|Rakshika Bagavathy]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:tandoorichick/GSoC2016/Project |Project Plan]]<br />
* [[User:your_wiki_username/GSoC2016/Logs|Development Logs]]<br />
<br />
== BRL-CAD Web Infrastructure Update ==<br />
* Create brand new main website and wiki update<br />
* Student: [[User:Oleksandr_dubenko|Oleksandr Dubenko]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [https://blog.esde.name/project-plan/ Project Plan]<br />
* [https://blog.esde.name/ Development Logs]<br />
<br />
== User Interface for Customizing Models ==<br />
* Create user interface to Customize Model interactively instead of modifying them manually.<br />
* Student: [[User:Amarjeet_Singh_Kapoor|Amarjeet Singh Kapoor]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User: Amarjeet_Singh_Kapoor/GSoC2016/Project |Project Plan]]<br />
* [https://amarjeetkapoor1.wordpress.com/ Development Logs ]<br />
<br />
== GPGPU Support for Boolean Evaluation Used in Ray Tracing ==<br />
* Accelerate Boolean Evauluation using a GPU, if available<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Catchchaos/GSoC2016/Proposal|Project Plan]]<br />
* [https://catchchaos.wordpress.com/ Development Logs]<br />
<br />
== LibreCAD 3 Scriptable User Interface Creation ==<br />
* Create GUI for operations and allow it to be modified without recompilation<br />
* Student: [[User:Feragon.xi|Florian Roméo]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Feragon.xi/GSoC2016/Project |Project Plan]]<br />
* [[User:Feragon.xi/GSoC2016/Logs|Development Logs]]<br />
<br />
== LibreCAD V3 Bezier and FILE I/O==<br />
* Adding support of beziers and DXF output to LibreCAD_3<br />
* Student: [[User:Gaganjyotsingh|Gaganjyot Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[https://goo.gl/1O2zkV Project Plan]]<br />
* [[http://gaganjyot.com/blog/ Development Logs]]<br />
<br />
== Online Geometry Viewer ==<br />
* Making OGV production ready and available to use for a wider majority of people.<br />
<br />
* Student: [[User:Gauravjeet|Gauravjeet Singh]]<br />
* [https://summerofcode.withgoogle.com/projects/#4756339498680320 Abstract]<br />
* [http://gauravjeetsingh.github.io/proposal/ Project Plan]<br />
* [http://gauravjeetsingh.github.io/ Development Logs]<br />
<br />
== Plate Mode NURBS raytracing ==<br />
* Implementing plate mode raytracing for NURBS surfaces<br />
* Student: [[User:bojian_ustc|Bojian Wu]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:bojian_ustc/GSoC2016/Project |Project Plan]]<br />
* [http://bojianwu.github.io Development Logs]<br />
<br />
== The FreeCAD Plugin Installer ==<br />
* The main idea is to implement a plugin manager for FreeCAD that will be used to install/remove/update plugins and other unofficial workbenches or modules and macros.<br />
* Student: [[User:mandeeps708|Mandeep Singh]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Mandeeps708/gsoc_proposal |Project Plan]]<br />
* [http://mandeep7.wordpress.com Development Logs]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh&diff=9696User:Gaganjyotsingh2016-05-13T14:02:25Z<p>Gaganjyotsingh: User information Update</p>
<hr />
<div>== Personal information ==<br />
<br />
* '''Name:''' Gaganjyot Singh<br />
* '''Email:''' thegaganx@gmail.com<br />
* '''IRC:''' gaganjyot<br />
* '''GitHub:''' https://github.com/gaganjyot/<br />
<br />
Currently I am working on implementations for Bezier curves and File IO for the new version of LibreCAD.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2014&diff=7136Google Summer of Code/20142014-05-25T22:51:54Z<p>Gaganjyotsingh: /* LibreCAD Kernel */</p>
<hr />
<div><!--<br />
{|align="right"<br />
|[[Image:BRL-CAD_GSoC2014_flyer.png|thumb|left|256px]]<br />
|}<br />
--><br />
<br />
= GSoC 2014 With BRL-CAD =<br />
<br />
'''BRL-CAD has applied as a [http://www.google-melange.com/ mentoring organization] for the Google Summer of Code!'''<br />
<br />
We intend to accept at least as many students as we have mentors and quality student proposals. Once announced, a summary of our GSoC students accepted to work on projects for BRL-CAD will be posted here.<br />
<br />
= Accepted Projects =<br />
==Benchmark Performance Database==<br />
* '''Objective''' : Build a database and visualization website for the BRL-CAD Benchmarks.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Ankeshanand/ Ankesh Anand]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/ankeshanand/5750085036015616 Google-Melange]<br />
<br />
==Embedding a framebuffer window==<br />
* '''Objective''' : Creating a new cross platform Qt framebuffer and embedding a framebuffer window in the actual Qt display manager.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Vladbogolin Bogolin Simion Vlad]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/Proposal/EmbeddingFrameBuffer Project Proposal]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/vladbogolin/5812572515205120 Google-Melange]<br />
<br />
==Online Geometry Viewer==<br />
* '''Objective''' : Port existing Online Geometry Viewer to node.js, and improve it.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Inderpreet/ Inderpreet Singh]<br />
* [http://brlcad.org/wiki/User:Inderpreet/OGV_Proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Inderpreet/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/ishwerdas/5649050225344512 Proposal on Google-Melange]<br />
<br />
==STEP Libraries: Improving Thread Safety and Performance==<br />
* '''Objective''' : Modify the existing STEP Libraries to make them thread safe. Implement multithreading (atleast) in lazyloading. Identify exisitig bottlenecks and improve the performance of the serial code.<br />
* '''Student''' : Pulkit Mittal<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/hoiji/5629499534213120 Google-Melange]<br />
<br />
==Creating a Geometry Conversion Library==<br />
* '''Objective:''' To produce a new programming library that provides a clean API for converting geometry between formats<br />
* '''Student:''' [http://brlcad.org/wiki/User:Hcurtis0010/ Henry Curtis]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/hcurtis0010/5733935958982656 Project Description on Google-Melange]<br />
<br />
==Mesh Library Cleanup==<br />
* '''Objective:''' Clean, validate and verify relevant source code about NMG, and then add the missing Euler Operation to it.<br />
* '''Student:''' Zhao Anqing<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/clouddrift/5668600916475904 Google-Melange]<br />
<br />
==UI Brushup of OpenSCAD==<br />
* '''Objective''' : To improve the UI of OpenSCAD by removing existing bugs and adding new features.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Shainasabarwal/ Shaina Sabarwal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/Openscad_UI_Brushup Project Proposal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/shaina/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Python Geometry==<br />
* '''Objective''' : To write Python Bindings for BRL-CAD Geometry <br />
* '''Student''' : [http://brlcad.org/wiki/User:Krajkreddy/main Raj K. Reddy]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC13/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC14/summary Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/krajkreddy/5766466041282560 Google-Melange]<br />
<br />
==Materials Database Project==<br />
* '''Objective''' : To make a web application where users can easily store / retrieve the properties or traits of materials in a methodical manner.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Albertcoder/ Albert]<br />
* [http://brlcad.org/wiki/User:Albertcoder/Proposal/materialdatabase Project Proposal]<br />
* [http://brlcad.org/wiki/User:Albertcoder/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/albertcoder/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Object-oriented C++ Geometry API==<br />
* '''Objective''' : Implement a number of selected primitives in an OOP manner, according to the rt_*_internal structure<br />
* '''Student''' : [http://brlcad.org/wiki/User:Popescu.andrei1991 Andrei Popescu]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/proposal2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/devlogs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/popescuandrei/5653164804014080 Proposal on Google-Melange]<br />
<br />
<br />
==LibreCAD Kernel==<br />
* '''Objective''' : To create a 2D Kernel of LibreCAD's version 3.<br />
* '''Student''' : [brlcad.org/wiki/User:Gaganjyotsingh/ Gaganjyot]<br />
* [http://brlcad.org/wiki/User:Gaganjyotsingh/Proposal/LibreCADkickoff Project Proposal]<br />
* [http://codebasement.wordpress.com/ Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/gaganjyot/5662278724616192 Proposal on Google-Melange]<br />
<br />
= Additional Information =<br />
<br />
Students discussed and collaborated with BRL-CAD developers on formulating projects with most selecting from a detailed list of project suggestions from our [[Google_Summer_of_Code/Project_Ideas|Project Ideas]] page. Student applications for [[Google_Summer_of_Code|GSoC]] will be accepted at http://google-melange.com from March 10 through March 21.<br />
<br />
[[Category: Summer of Code]]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2014&diff=7096Google Summer of Code/20142014-05-21T11:45:53Z<p>Gaganjyotsingh: /* LibreCAD Kernel */</p>
<hr />
<div><!--<br />
{|align="right"<br />
|[[Image:BRL-CAD_GSoC2014_flyer.png|thumb|left|256px]]<br />
|}<br />
--><br />
<br />
= GSoC 2014 With BRL-CAD =<br />
<br />
'''BRL-CAD has applied as a [http://www.google-melange.com/ mentoring organization] for the Google Summer of Code!'''<br />
<br />
We intend to accept at least as many students as we have mentors and quality student proposals. Once announced, a summary of our GSoC students accepted to work on projects for BRL-CAD will be posted here.<br />
<br />
= Accepted Projects =<br />
==Benchmark Performance Database==<br />
* '''Objective''' : Build a database and visualization website for the BRL-CAD Benchmarks.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Ankeshanand/ Ankesh Anand]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/ankeshanand/5750085036015616 Google-Melange]<br />
<br />
==Embedding a framebuffer window==<br />
* '''Objective''' : Creating a new cross platform Qt framebuffer and embedding a framebuffer window in the actual Qt display manager.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Vladbogolin Bogolin Simion Vlad]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/Proposal/EmbeddingFrameBuffer Project Proposal]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/vladbogolin/5812572515205120 Google-Melange]<br />
<br />
==Online Geometry Viewer==<br />
* '''Objective''' : Port existing Online Geometry Viewer to node.js, and improve it.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Inderpreet/ Inderpreet Singh]<br />
* [http://brlcad.org/wiki/User:Inderpreet/OGV_Proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Inderpreet/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/ishwerdas/5649050225344512 Proposal on Google-Melange]<br />
<br />
==STEP Libraries: Improving Thread Safety and Performance==<br />
* '''Objective''' : Modify the existing STEP Libraries to make them thread safe. Implement multithreading (atleast) in lazyloading. Identify exisitig bottlenecks and improve the performance of the serial code.<br />
* '''Student''' : Pulkit Mittal<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/hoiji/5629499534213120 Google-Melange]<br />
<br />
==Creating a Geometry Conversion Library==<br />
* '''Objective:''' To produce a new programming library that provides a clean API for converting geometry between formats<br />
* '''Student:''' [http://brlcad.org/wiki/User:Hcurtis0010/ Henry Curtis]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/hcurtis0010/5733935958982656 Project Description on Google-Melange]<br />
<br />
==Mesh Library Cleanup==<br />
* '''Objective:''' Clean, validate and verify relevant source code about NMG, and then add the missing Euler Operation to it.<br />
* '''Student:''' Zhao Anqing<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/clouddrift/5668600916475904 Google-Melange]<br />
<br />
==UI Brushup of OpenSCAD==<br />
* '''Objective''' : To improve the UI of OpenSCAD by removing existing bugs and adding new features.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Shainasabarwal/ Shaina Sabarwal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/Openscad_UI_Brushup Project Proposal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/shaina/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Python Geometry==<br />
* '''Objective''' : To write Python Bindings for BRL-CAD Geometry <br />
* '''Student''' : [http://brlcad.org/wiki/User:Krajkreddy/main Raj K. Reddy]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC13/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC14/summary Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/krajkreddy/5766466041282560 Google-Melange]<br />
<br />
==Materials Database Project==<br />
* '''Objective''' : To make a web application where users can easily store / retrieve the properties or traits of materials in a methodical manner.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Albertcoder/ Albert]<br />
* [http://brlcad.org/wiki/User:Albertcoder/Proposal/materialdatabase Project Proposal]<br />
* [http://brlcad.org/wiki/User:Albertcoder/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/albertcoder/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Object-oriented C++ Geometry API==<br />
* '''Objective''' : Implement a number of selected primitives in an OOP manner, according to the rt_*_internal structure<br />
* '''Student''' : [http://brlcad.org/wiki/User:Popescu.andrei1991 Andrei Popescu]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/proposal2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/devlogs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/popescuandrei/5653164804014080 Proposal on Google-Melange]<br />
<br />
<br />
==LibreCAD Kernel==<br />
* '''Objective''' : To create a 2D Kernel of LibreCAD's version 3.<br />
* '''Student''' : [brlcad.org/wiki/User:Gaganjyotsingh/ Gaganjyot]<br />
* [http://brlcad.org/wiki/User:Gaganjyotsingh/Proposal/LibreCADkickoff Project Proposal]<br />
* [http://brlcad.org/wiki/User:Gaganjyotsingh/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/gaganjyot/5662278724616192 Proposal on Google-Melange]<br />
<br />
= Additional Information =<br />
<br />
Students discussed and collaborated with BRL-CAD developers on formulating projects with most selecting from a detailed list of project suggestions from our [[Google_Summer_of_Code/Project_Ideas|Project Ideas]] page. Student applications for [[Google_Summer_of_Code|GSoC]] will be accepted at http://google-melange.com from March 10 through March 21.<br />
<br />
[[Category: Summer of Code]]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2014&diff=7095Google Summer of Code/20142014-05-21T11:44:29Z<p>Gaganjyotsingh: </p>
<hr />
<div><!--<br />
{|align="right"<br />
|[[Image:BRL-CAD_GSoC2014_flyer.png|thumb|left|256px]]<br />
|}<br />
--><br />
<br />
= GSoC 2014 With BRL-CAD =<br />
<br />
'''BRL-CAD has applied as a [http://www.google-melange.com/ mentoring organization] for the Google Summer of Code!'''<br />
<br />
We intend to accept at least as many students as we have mentors and quality student proposals. Once announced, a summary of our GSoC students accepted to work on projects for BRL-CAD will be posted here.<br />
<br />
= Accepted Projects =<br />
==Benchmark Performance Database==<br />
* '''Objective''' : Build a database and visualization website for the BRL-CAD Benchmarks.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Ankeshanand/ Ankesh Anand]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Ankeshanand/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/ankeshanand/5750085036015616 Google-Melange]<br />
<br />
==Embedding a framebuffer window==<br />
* '''Objective''' : Creating a new cross platform Qt framebuffer and embedding a framebuffer window in the actual Qt display manager.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Vladbogolin Bogolin Simion Vlad]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/Proposal/EmbeddingFrameBuffer Project Proposal]<br />
* [http://brlcad.org/wiki/User:Vladbogolin/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/vladbogolin/5812572515205120 Google-Melange]<br />
<br />
==Online Geometry Viewer==<br />
* '''Objective''' : Port existing Online Geometry Viewer to node.js, and improve it.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Inderpreet/ Inderpreet Singh]<br />
* [http://brlcad.org/wiki/User:Inderpreet/OGV_Proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Inderpreet/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/ishwerdas/5649050225344512 Proposal on Google-Melange]<br />
<br />
==STEP Libraries: Improving Thread Safety and Performance==<br />
* '''Objective''' : Modify the existing STEP Libraries to make them thread safe. Implement multithreading (atleast) in lazyloading. Identify exisitig bottlenecks and improve the performance of the serial code.<br />
* '''Student''' : Pulkit Mittal<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Pulkit%20Mittal/GSOC2014/logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/hoiji/5629499534213120 Google-Melange]<br />
<br />
==Creating a Geometry Conversion Library==<br />
* '''Objective:''' To produce a new programming library that provides a clean API for converting geometry between formats<br />
* '''Student:''' [http://brlcad.org/wiki/User:Hcurtis0010/ Henry Curtis]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Hcurtis0010/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/hcurtis0010/5733935958982656 Project Description on Google-Melange]<br />
<br />
==Mesh Library Cleanup==<br />
* '''Objective:''' Clean, validate and verify relevant source code about NMG, and then add the missing Euler Operation to it.<br />
* '''Student:''' Zhao Anqing<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Clouddrift/GSoC2014/Logs Development Logs]<br />
* [https://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/clouddrift/5668600916475904 Google-Melange]<br />
<br />
==UI Brushup of OpenSCAD==<br />
* '''Objective''' : To improve the UI of OpenSCAD by removing existing bugs and adding new features.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Shainasabarwal/ Shaina Sabarwal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/Openscad_UI_Brushup Project Proposal]<br />
* [http://brlcad.org/wiki/User:Shainasabarwal/GSoC14/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/shaina/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Python Geometry==<br />
* '''Objective''' : To write Python Bindings for BRL-CAD Geometry <br />
* '''Student''' : [http://brlcad.org/wiki/User:Krajkreddy/main Raj K. Reddy]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC13/proposal Project Proposal]<br />
* [http://brlcad.org/wiki/User:Krajkreddy/GSOC14/summary Development Logs]<br />
* [http://www.google-melange.com/gsoc/project/details/google/gsoc2014/krajkreddy/5766466041282560 Google-Melange]<br />
<br />
==Materials Database Project==<br />
* '''Objective''' : To make a web application where users can easily store / retrieve the properties or traits of materials in a methodical manner.<br />
* '''Student''' : [http://brlcad.org/wiki/User:Albertcoder/ Albert]<br />
* [http://brlcad.org/wiki/User:Albertcoder/Proposal/materialdatabase Project Proposal]<br />
* [http://brlcad.org/wiki/User:Albertcoder/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/public/google/gsoc2014/albertcoder/5629499534213120 Proposal on Google-Melange]<br />
<br />
==Object-oriented C++ Geometry API==<br />
* '''Objective''' : Implement a number of selected primitives in an OOP manner, according to the rt_*_internal structure<br />
* '''Student''' : [http://brlcad.org/wiki/User:Popescu.andrei1991 Andrei Popescu]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/proposal2014 Project Proposal]<br />
* [http://brlcad.org/wiki/User:Popescu.andrei1991/devlogs Development Logs]<br />
* [https://www.google-melange.com/gsoc/project/details/google/gsoc2014/popescuandrei/5653164804014080 Proposal on Google-Melange]<br />
<br />
<br />
==LibreCAD Kernel==<br />
* '''Objective''' : To create a 2D Kernel of LibreCAD's version 3.<br />
* '''Student''' : [brlcad.org/wiki/User:Gaganjyotsingh/ Gaganjyot]<br />
* [http://brlcad.org/wiki/User:Gaganjyotsingh/librecadkernel Project Proposal]<br />
* [http://brlcad.org/wiki/User:Gaganjyotsingh/GSoC2014/logs Development Logs]<br />
* [http://www.google-melange.com/gsoc/proposal/review/student/google/gsoc2014/gaganjyot/5662278724616192 Proposal on Google-Melange]<br />
<br />
= Additional Information =<br />
<br />
Students discussed and collaborated with BRL-CAD developers on formulating projects with most selecting from a detailed list of project suggestions from our [[Google_Summer_of_Code/Project_Ideas|Project Ideas]] page. Student applications for [[Google_Summer_of_Code|GSoC]] will be accepted at http://google-melange.com from March 10 through March 21.<br />
<br />
[[Category: Summer of Code]]</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6902User:Gaganjyotsingh/librecadkernel2014-03-20T10:19:17Z<p>Gaganjyotsingh: </p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.<br />
<br />
LibreCAD kernel is a library to perform 2D operations. Rightnow it supports the basic entities like circle, line, arc, ellipse ( Although can be extended to b-splines, beizer curves ) and the code is built in C++ and Qt. .<br />
<br />
It now follows a document based approach and has been designed to be very extensible. <br />
<br />
It supports the operations of creating, deleting and trimming of entities. Has an undo-redo stack hence you can do unlimited undos and redos.<br />
<br />
Things that are going to be implemented in GSoC are,<br />
*support for moving entities from one position to another.<br />
*Ability to copy entities any number of times.<br />
*Scaling the entities.<br />
*Rotating the entities with respect to some point.<br />
<br />
*It will have support for text and dimensioning after the GSoC period.<br />
<br />
Directory structure and operations,<br />
<br />
Base directory :<br />
<br />
cadentity.*<br />
<br />
It is the base class for all entities and each entity is inherited from this class.<br />
<br />
id.*<br />
<br />
These file contain the class that generates a unique ID for every new entity so created.<br />
<br />
metainfo.*<br />
<br />
These files contains the classes which are metatypes for any entity. For example the pen color, line width, layer of entity.<br />
<br />
Dochelpers :<br />
<br />
These are the implementation files of the files in document folder( containing the virtual functions).<br />
<br />
documentimpl<br />
<br />
contains the following functions,<br />
*addentity<br />
*removeentity<br />
*begin a process<br />
*commiting a process<br />
<br />
documentlayerimpl<br />
*add entity // adds an entity to the layer<br />
*remove entity // removes the entity from the layer<br />
*find by id // Finds the entity by the unique ID specified<br />
<br />
layermanagerimpl<br />
It manages the layers, adds/deletes layers.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6900User:Gaganjyotsingh/librecadkernel2014-03-20T10:17:35Z<p>Gaganjyotsingh: </p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.<br />
<br />
LibreCAD kernel is a library to perform 2D operations. Rightnow it supports the basic entities like circle, line, arc, ellipse ( Although can be extended to b-splines, beizer curves ) and the code is built in C++ and Qt. .<br />
<br />
It now follows a document based approach and has been designed to be very extensible. <br />
<br />
It supports the operations of creating, deleting and trimming of entities. Has an undo-redo stack hence you can do unlimited undos and redos.<br />
<br />
Things that are going to be implemented in GSoC are,<br />
*support for moving entities from one position to another.<br />
*Ability to copy entities any number of times.<br />
*Scaling the entities.<br />
*Rotating the entities with respect to some point.<br />
<br />
*It will have support for text and dimensioning after the GSoC period.<br />
<br />
Directory structure and operations,<br />
<br />
Base directory :<br />
<br />
cadentity.*<br />
<br />
It is the base class for all entities and each entity is inherited from this class.<br />
<br />
id.*<br />
<br />
These file contain the class that generates a unique ID for every new entity so created.<br />
<br />
metainfo.*<br />
<br />
These files contains the classes which are metatypes for any entity. For example the pen color, line width, layer of entity.<br />
<br />
Dochelpers :<br />
<br />
These are the implementation files of the files in document folder( containing the virtual functions).<br />
<br />
documentimpl<br />
<br />
contains the following functions,<br />
*addentity<br />
*removeentity<br />
*begin a process<br />
*commiting a process<br />
<br />
documentlayerimpl<br />
*add entity // adds an entity to the layer<br />
*remove entity // removes the entity from the layer<br />
*find by id // Finds the entity by the unique ID specified</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6899User:Gaganjyotsingh/librecadkernel2014-03-20T10:05:27Z<p>Gaganjyotsingh: </p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.<br />
<br />
LibreCAD kernel is a library to perform 2D operations. Rightnow it supports the basic entities like circle, line, arc, ellipse ( Although can be extended to b-splines, beizer curves ) and the code is built in C++ and Qt. .<br />
<br />
It now follows a document based approach and has been designed to be very extensible. <br />
<br />
It supports the operations of creating, deleting and trimming of entities. Has an undo-redo stack hence you can do unlimited undos and redos.<br />
<br />
Things that are going to be implemented in GSoC are,<br />
*support for moving entities from one position to another.<br />
*Ability to copy entities any number of times.<br />
*Scaling the entities.<br />
*Rotating the entities with respect to some point.<br />
<br />
*It will have support for text and dimensioning after the GSoC period.<br />
<br />
Directory structure and operations,<br />
<br />
Base directory :<br />
<br />
cadentity.*<br />
<br />
It is the base class for all entities and each entity is inherited from this class.<br />
<br />
id.*<br />
<br />
These file contain the class that generates a unique ID for every new entity so created.<br />
<br />
metainfo.*</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6897User:Gaganjyotsingh/librecadkernel2014-03-20T09:56:08Z<p>Gaganjyotsingh: </p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.<br />
<br />
LibreCAD kernel is a library to perform 2D operations. Rightnow it supports the basic entities like circle, line, arc, ellipse ( Although can be extended to b-splines, beizer curves ) and the code is built in C++ and Qt. .<br />
<br />
It now follows a document based approach and has been designed to be very extensible. <br />
<br />
It supports the operations of creating, deleting and trimming of entities. Has an undo-redo stack hence you can do unlimited undos and redos.<br />
<br />
Things that are going to be implemented in GSoC are,<br />
support for moving entities from one position to another.<br />
Ability to copy entities any number of times.<br />
Scaling the entities.<br />
Rotating the entities with respect to some point.<br />
<br />
It will have support for text and dimensioning after the GSoC period.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6896User:Gaganjyotsingh/librecadkernel2014-03-20T09:47:44Z<p>Gaganjyotsingh: </p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.<br />
<br />
LibreCAD kernel is a library to perform 2D operations. Rightnow it supports the basic entities like circle, line, arc, ellipse ( Although can be extended to b-splines, beizer curves ) and the code is built in C++ and Qt. .<br />
<br />
It now follows a document based approach and has been designed to be very extensible. <br />
<br />
It supports the operations of creating, deleting and trimming of entities. Has an undo-redo stack hence you can do unlimited undos and redos.<br />
<br />
Things that are going to be implemented in GSoC are,<br />
support for moving entities from one position to another.<br />
Ability to copy entities any number of times.<br />
Scaling the entities.<br />
Rotating the entities with respect to some point.<br />
<br />
It will have support for text and dimensioning after the GSoC period.<br />
<br />
.<br />
|-- base<br />
| |-- cadentity.cpp<br />
| |-- cadentity.h<br />
| |-- id.cpp<br />
| |-- id.h<br />
| |-- metainfo.cpp<br />
| `-- metainfo.h<br />
|-- const.h<br />
|-- dochelpers<br />
| |-- documentimpl.cpp<br />
| |-- documentimpl.h<br />
| |-- documentlayerimpl.cpp<br />
| |-- documentlayerimpl.h<br />
| |-- entitymanagerimpl.cpp<br />
| |-- entitymanagerimpl.h<br />
| |-- layermanagerimpl.cpp<br />
| |-- layermanagerimpl.h<br />
| |-- undomanagerimpl.cpp<br />
| `-- undomanagerimpl.h<br />
|-- document<br />
| |-- abstractdocument.cpp<br />
| |-- abstractdocument.h<br />
| |-- basemanager.h<br />
| |-- documentlayer.h<br />
| |-- entitymanager.h<br />
| |-- layermanager.h<br />
| |-- selectionmanager.h<br />
| `-- undomanager.h<br />
|-- events<br />
| |-- absoleteentityevent.h<br />
| |-- addentityevent.h<br />
| |-- beginprocessevent.h<br />
| |-- commitprocessevent.h<br />
| |-- removeentityevent.h<br />
| `-- replaceentityevent.h<br />
|-- functions<br />
| |-- intersect.cpp<br />
| |-- intersect.h<br />
| |-- trim.cpp<br />
| `-- trim.h<br />
|-- geometry<br />
| |-- geoarc.cpp<br />
| |-- geoarc.h<br />
| |-- geoarea.cpp<br />
| |-- geoarea.h<br />
| |-- geocircle.cpp<br />
| |-- geocircle.h<br />
| |-- geocoordinate.cpp<br />
| |-- geocoordinate.h<br />
| |-- geoellipse.cpp<br />
| |-- geoellipse.h<br />
| |-- geotext.cpp<br />
| |-- geotext.h<br />
| |-- geovector.cpp<br />
| `-- geovector.h<br />
|-- interface<br />
| |-- entitydispatch.h<br />
| |-- entityvisitor.h<br />
| |-- metatype.h<br />
| |-- snapable.h<br />
| `-- variantable.h<br />
|-- math<br />
| |-- geointersect.cpp<br />
| `-- geointersect.h<br />
|-- meta<br />
| |-- color.cpp<br />
| |-- color.h<br />
| |-- layer.cpp<br />
| |-- layer.h<br />
| |-- linewidth.cpp<br />
| |-- linewidth.h<br />
| |-- pen.cpp<br />
| `-- pen.h<br />
|-- operations<br />
| |-- createentities.cpp<br />
| |-- createentities.h<br />
| |-- deleteentities.cpp<br />
| |-- deleteentities.h<br />
| |-- moveentities.cpp<br />
| |-- moveentities.h<br />
| |-- operation.h<br />
| |-- trimentity.cpp<br />
| |-- trimentity.h<br />
| `-- undoable.h<br />
|-- primitive<br />
| |-- arc.cpp<br />
| |-- arc.h<br />
| |-- circle.cpp<br />
| |-- circle.h<br />
| |-- ellipse.cpp<br />
| |-- ellipse.h<br />
| |-- line.cpp<br />
| |-- line.h<br />
| |-- text.cpp<br />
| `-- text.h<br />
`-- vo<br />
|-- entitycoordinate.h<br />
`-- entitydistance.h</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/librecadkernel&diff=6895User:Gaganjyotsingh/librecadkernel2014-03-20T07:50:35Z<p>Gaganjyotsingh: Created page with "LibreCAD Kernel Documentation/API Documentation for the usage with other softwares."</p>
<hr />
<div>LibreCAD Kernel Documentation/API Documentation for the usage with other softwares.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6749User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T20:49:58Z<p>Gaganjyotsingh: </p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
==Project Information :==<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
===Brief Summary:===<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
===Detailed Description:===<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
The Kernel ( My playground ):<br />
<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity. Listed below are the operations, entities and the intersection pattern which is to be implemented.<br />
<br />
====Operations :====<br />
<br />
=====Move:=====<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
<br />
void move_line ( coordinate offset ) {<br />
<br />
start_point = start_point + offset;<br />
<br />
end_point = end_point + offset;<br />
<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=====Copy :=====<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=====Rotate:=====<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
<br />
// Rotation around itself at some angle.<br />
<br />
// first the double value will be converted into a coordinate using sin cos <br />
functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
<br />
y = x * angle.y – y * angle.x<br />
<br />
x = temp<br />
<br />
}<br />
<br />
====Entites:====<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
*Text will have support for the following attributes,<br />
<br />
**Insertion point : The point at wich entity is to be inserted.<br />
**SecondPoint : It is used by the aligned fit.<br />
**Widthrel : It is the width of reference rectangle around the text.<br />
**Height : Height of text<br />
**Valign : Vertical Alignment of the Dimension value text<br />
**Halign : Horizontal Alignment of the dimension value text <br />
**Text : Text value held by dimension entity<br />
**Style : Style of the text <br />
**Angle : If the text is aligned at some angle<br />
<br />
*Dimension has the following attributes,<br />
<br />
**DefinitionPoint : The point at which dimension is defined<br />
**MiddleOfText : Middle of the dimension text<br />
**Valign : Vertical Alignment of the Dimension value text<br />
**Halign : Horizontal Alignment of the dimension value text<br />
**LineSpacingStyle : Spacing style if any for the dimension <br />
**LineSpacingFactor : Spacing factor if any<br />
**Text : Text value held by dimension entity<br />
**Style : Style of the text <br />
**Angle : If the text is aligned at some angle<br />
<br />
====Intersection Stuff====<br />
<br />
The Kernel manages the intersection of two entities. The types of entities being Arc, Line, Ellipse, circle, point if we create the functions to check and return intersection between entities, we will get a number of functions.<br />
For example :<br />
<br />
intersect_line_line(line, line);<br />
<br />
intersect_line_arc(line, arc);<br />
<br />
intersect_line_ellipse(line, ellipse);<br />
<br />
and so on for every entity.<br />
<br />
The quadratic of any entity can be found. Then the quadratic of two entities can be passed to a common function that just calculates the intersection points from the two quadratic equations.<br />
<br />
quad1 = line.get_quadratic()<br />
<br />
quad2 = circle.get_quadratic()<br />
<br />
quad3 = ellipse.get_quadratic() // ellipse quadratic equation<br />
<br />
get_intersection(quad1,quad2) // will give intersection points of line and circle<br />
<br />
get_intersection(quad1,quad3)// will give intersection points of line and ellipse<br />
<br />
For example,<br />
<br />
Approach 1 ( Line Line direct intersection calculation )<br />
<br />
void Intersect::visit(shared_ptr<const lc::Line> l1, shared_ptr<const lc::Line> l2) {<br />
<br />
geo::Coordinate p1 = l1->start();<br />
geo::Coordinate p2 = l1->end();<br />
geo::Coordinate p3 = l2->start();<br />
geo::Coordinate p4 = l2->end();<br />
<br />
double num = ((p4.x() - p3.x()) * (p1.y() - p3.y()) - (p4.y() - p3.y()) * (p1.x() - p3.x()));<br />
double div = ((p4.y() - p3.y()) * (p2.x() - p1.x()) - (p4.x() - p3.x()) * (p2.y() - p1.y()));<br />
<br />
// TODO: We properly should add a tolorance here ??<br />
if (fabs(div) > 0.0) {<br />
double u = num / div;<br />
double xs = p1.x() + u * (p2.x() - p1.x());<br />
double ys = p1.y() + u * (p2.y() - p1.y());<br />
geo::Coordinate coord(xs, ys);<br />
<br />
if (_method == Method::Any || (_method == Method::MustIntersect && l1->isCoordinateOnPath(coord) && l2->isCoordinateOnPath(coord))) {<br />
_intersectionPoints.append(coord);<br />
}<br />
}<br />
}<br />
<br />
Approach 2 ( First calculate quadratic of entities and then calculate intersection from quadratic )<br />
<br />
void Intersect::visit(const shared_ptr<const lc::Line>& l1, const shared_ptr<const lc::Line>& l2) {<br />
<br />
//getIntersection<br />
QList<geo::Coordinate>&& points=LC_Quadratic::getIntersection(l1->getQuadratic(), l2->getQuadratic());<br />
// Where getQuadratic is a function to calculate quadratic of lines.<br />
if (points.empty() == false )<br />
_intersectionPoints.append(points);<br />
<br />
}<br />
<br />
References :<br />
http://en.wikipedia.org/wiki/Quadratic_form<br />
<br />
Maths will be taken from LibreCAD2 :<br />
<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/lc_quadratic.h<br />
<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/rs_math.h<br />
<br />
===Deliverables:===<br />
The project can be divided in at least 4 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
#Operations:<br />
##Move<br />
##Copy<br />
##Rotate<br />
#Entities :<br />
##Text<br />
##Dimensions<br />
#Intersection support extended to Arc, Line, Circle, ellipse.<br />
#Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
===Milestones( or Plan ):===<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
===Future work / scope (Post GsoC):===<br />
*After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
*Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
==Time Availability:==<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
==Why LibreCAD?==<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
==Why me?==<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6748User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T20:45:55Z<p>Gaganjyotsingh: </p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
==Project Information :==<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
===Brief Summary:===<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
===Detailed Description:===<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
The Kernel ( My playground ):<br />
<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity. Listed below are the operations, entities and the intersection pattern which is to be implemented.<br />
<br />
====Operations :====<br />
<br />
=====Move:=====<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
<br />
void move_line ( coordinate offset ) {<br />
<br />
start_point = start_point + offset;<br />
<br />
end_point = end_point + offset;<br />
<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=====Copy :=====<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=====Rotate:=====<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
<br />
// Rotation around itself at some angle.<br />
<br />
// first the double value will be converted into a coordinate using sin cos <br />
functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
<br />
y = x * angle.y – y * angle.x<br />
<br />
x = temp<br />
<br />
}<br />
<br />
====Entites:====<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
*Text will have support for the following attributes,<br />
<br />
**Insertion point : The point at wich entity is to be inserted.<br />
**SecondPoint : It is used by the aligned fit.<br />
**Widthrel : It is the width of reference rectangle around the text.<br />
**Height : Height of text<br />
**Valign : Vertical Alignment of the Dimension value text<br />
**Halign : Horizontal Alignment of the dimension value text <br />
**Text : Text value held by dimension entity<br />
**Style : Style of the text <br />
**Angle : If the text is aligned at some angle<br />
<br />
*Dimension has the following attributes,<br />
<br />
**DefinitionPoint : The point at which dimension is defined<br />
**MiddleOfText : Middle of the dimension text<br />
**Valign : Vertical Alignment of the Dimension value text<br />
**Halign : Horizontal Alignment of the dimension value text<br />
**LineSpacingStyle : Spacing style if any for the dimension <br />
**LineSpacingFactor : Spacing factor if any<br />
**Text : Text value held by dimension entity<br />
**Style : Style of the text <br />
**Angle : If the text is aligned at some angle<br />
<br />
====Intersection Stuff====<br />
<br />
The Kernel manages the intersection of two entities. The types of entities being Arc, Line, Ellipse, circle, point if we create the functions to check and return intersection between entities, we will get a number of functions.<br />
For example :<br />
<br />
intersect_line_line(line, line);<br />
<br />
intersect_line_arc(line, arc);<br />
<br />
intersect_line_ellipse(line, ellipse);<br />
<br />
and so on for every entity.<br />
<br />
The quadratic of any entity can be found. Then the quadratic of two entities can be passed to a common function that just calculates the intersection points from the two quadratic equations.<br />
<br />
quad1 = line.get_quadratic()<br />
quad2 = circle.get_quadratic()<br />
quad3 = ellipse.get_quadratic() // ellipse quadratic equation<br />
get_intersection(quad1,quad2) // will give intersection points of line and circle<br />
get_intersection(quad1,quad3)// will give intersection points of line and ellipse<br />
<br />
For example,<br />
<br />
Approach 1 ( Line Line direct intersection calculation )<br />
<br />
void Intersect::visit(shared_ptr<const lc::Line> l1, shared_ptr<const lc::Line> l2) {<br />
<br />
geo::Coordinate p1 = l1->start();<br />
geo::Coordinate p2 = l1->end();<br />
geo::Coordinate p3 = l2->start();<br />
geo::Coordinate p4 = l2->end();<br />
<br />
double num = ((p4.x() - p3.x()) * (p1.y() - p3.y()) - (p4.y() - p3.y()) * (p1.x() - p3.x()));<br />
double div = ((p4.y() - p3.y()) * (p2.x() - p1.x()) - (p4.x() - p3.x()) * (p2.y() - p1.y()));<br />
<br />
// TODO: We properly should add a tolorance here ??<br />
if (fabs(div) > 0.0) {<br />
double u = num / div;<br />
double xs = p1.x() + u * (p2.x() - p1.x());<br />
double ys = p1.y() + u * (p2.y() - p1.y());<br />
geo::Coordinate coord(xs, ys);<br />
<br />
if (_method == Method::Any || (_method == Method::MustIntersect && l1->isCoordinateOnPath(coord) && l2->isCoordinateOnPath(coord))) {<br />
_intersectionPoints.append(coord);<br />
}<br />
}<br />
}<br />
<br />
Approach 2 ( First calculate quadratic of entities and then calculate intersection from quadratic )<br />
<br />
void Intersect::visit(const shared_ptr<const lc::Line>& l1, const shared_ptr<const lc::Line>& l2) {<br />
<br />
//getIntersection<br />
QList<geo::Coordinate>&& points=LC_Quadratic::getIntersection(l1->getQuadratic(), l2->getQuadratic());<br />
// Where getQuadratic is a function to calculate quadratic of lines.<br />
if (points.empty() == false )<br />
_intersectionPoints.append(points);<br />
<br />
}<br />
<br />
References :<br />
http://en.wikipedia.org/wiki/Quadratic_form<br />
Maths will be taken from LibreCAD2 :<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/lc_quadratic.h<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/rs_math.h<br />
<br />
===Deliverables:===<br />
The project can be divided in at least 4 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
#Operations:<br />
##Move<br />
##Copy<br />
##Rotate<br />
#Entities :<br />
##Text<br />
##Dimensions<br />
#Intersection support extended to Arc, Line, Circle, ellipse.<br />
#Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
===Milestones( or Plan ):===<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
===Future work / scope (Post GsoC):===<br />
*After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
*Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
==Time Availability:==<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
==Why LibreCAD?==<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
==Why me?==<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6747User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T20:35:48Z<p>Gaganjyotsingh: </p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
==Project Information :==<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
===Brief Summary:===<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
===Detailed Description:===<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
The Kernel ( My playground ):<br />
<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity. Listed below are the operations, entities and the intersection pattern which is to be implemented.<br />
<br />
====Operations :====<br />
<br />
=====Move:=====<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
<br />
void move_line ( coordinate offset ) {<br />
start_point = start_point + offset;<br />
end_point = end_point + offset;<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=====Copy :=====<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=====Rotate:=====<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
// Rotation around itself at some angle.<br />
// first the double value will be converted into a coordinate using sin cos functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
y = x * angle.y – y * angle.x<br />
x = temp<br />
}<br />
<br />
====Entites:====<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
*Text will have support for the following attributes,<br />
<br />
Insertion point : The point at wich entity is to be inserted.<br />
SecondPoint : It is used by the aligned fit.<br />
Widthrel : It is the width of reference rectangle around the text.<br />
Height : Height of text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text <br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
*Dimension has the following attributes,<br />
<br />
DefinitionPoint : The point at which dimension is defined<br />
MiddleOfText : Middle of the dimension text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text<br />
LineSpacingStyle : Spacing style if any for the dimension <br />
LineSpacingFactor : Spacing factor if any<br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
====Intersection Stuff====<br />
<br />
The Kernel manages the intersection of two entities. The types of entities being Arc, Line, Ellipse, circle, point if we create the functions to check and return intersection between entities, we will get a number of functions.<br />
For example :<br />
intersect_line_line(line, line);<br />
intersect_line_arc(line, arc);<br />
intersect_line_ellipse(line, ellipse);<br />
and so on for every entity.<br />
<br />
The quadratic of any entity can be found. Then the quadratic of two entities can be passed to a common function that just calculates the intersection points from the two quadratic equations.<br />
<br />
quad1 = line.get_quadratic()<br />
quad2 = circle.get_quadratic()<br />
quad3 = ellipse.get_quadratic() // ellipse quadratic equation<br />
get_intersection(quad1,quad2) // will give intersection points of line and circle<br />
get_intersection(quad1,quad3)// will give intersection points of line and ellipse<br />
<br />
For example,<br />
<br />
Approach 1 ( Line Line direct intersection calculation )<br />
<br />
void Intersect::visit(shared_ptr<const lc::Line> l1, shared_ptr<const lc::Line> l2) {<br />
<br />
geo::Coordinate p1 = l1->start();<br />
geo::Coordinate p2 = l1->end();<br />
geo::Coordinate p3 = l2->start();<br />
geo::Coordinate p4 = l2->end();<br />
<br />
double num = ((p4.x() - p3.x()) * (p1.y() - p3.y()) - (p4.y() - p3.y()) * (p1.x() - p3.x()));<br />
double div = ((p4.y() - p3.y()) * (p2.x() - p1.x()) - (p4.x() - p3.x()) * (p2.y() - p1.y()));<br />
<br />
// TODO: We properly should add a tolorance here ??<br />
if (fabs(div) > 0.0) {<br />
double u = num / div;<br />
double xs = p1.x() + u * (p2.x() - p1.x());<br />
double ys = p1.y() + u * (p2.y() - p1.y());<br />
geo::Coordinate coord(xs, ys);<br />
<br />
if (_method == Method::Any || (_method == Method::MustIntersect && l1->isCoordinateOnPath(coord) && l2->isCoordinateOnPath(coord))) {<br />
_intersectionPoints.append(coord);<br />
}<br />
}<br />
}<br />
<br />
Approach 2 ( First calculate quadratic of entities and then calculate intersection from quadratic )<br />
<br />
void Intersect::visit(const shared_ptr<const lc::Line>& l1, const shared_ptr<const lc::Line>& l2) {<br />
<br />
//getIntersection<br />
QList<geo::Coordinate>&& points=LC_Quadratic::getIntersection(l1->getQuadratic(), l2->getQuadratic());<br />
// Where getQuadratic is a function to calculate quadratic of lines.<br />
if (points.empty() == false )<br />
_intersectionPoints.append(points);<br />
<br />
}<br />
<br />
References :<br />
http://en.wikipedia.org/wiki/Quadratic_form<br />
Maths will be taken from LibreCAD2 :<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/lc_quadratic.h<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/rs_math.h<br />
<br />
===Deliverables:===<br />
The project can be divided in at least 4 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
#Operations:<br />
##Move<br />
##Copy<br />
##Rotate<br />
#Entities :<br />
##Text<br />
##Dimensions<br />
#Intersection support extended to Arc, Line, Circle, ellipse.<br />
#Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
===Milestones( or Plan ):===<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
===Future work / scope (Post GsoC):===<br />
*After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
*Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
==Time Availability:==<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
==Why LibreCAD?==<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
==Why me?==<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6746User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T20:34:07Z<p>Gaganjyotsingh: </p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
==Project Information :==<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
===Brief Summary:===<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
===Detailed Description:===<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
The Kernel ( My playground ):<br />
<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity. Listed below are the operations, entities and the intersection pattern which is to be implemented.<br />
<br />
====Operations :====<br />
<br />
=====Move:=====<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
void move_line ( coordinate offset ) {<br />
start_point = start_point + offset;<br />
end_point = end_point + offset;<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=====Copy :=====<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=====Rotate:=====<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
// Rotation around itself at some angle.<br />
// first the double value will be converted into a coordinate using sin cos functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
y = x * angle.y – y * angle.x<br />
x = temp<br />
}<br />
<br />
====Entites:====<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
*Text will have support for the following attributes,<br />
<br />
Insertion point : The point at wich entity is to be inserted.<br />
SecondPoint : It is used by the aligned fit.<br />
Widthrel : It is the width of reference rectangle around the text.<br />
Height : Height of text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text <br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
*Dimension has the following attributes,<br />
<br />
DefinitionPoint : The point at which dimension is defined<br />
MiddleOfText : Middle of the dimension text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text<br />
LineSpacingStyle : Spacing style if any for the dimension <br />
LineSpacingFactor : Spacing factor if any<br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
====Intersection Stuff====<br />
<br />
The Kernel manages the intersection of two entities. The types of entities being Arc, Line, Ellipse, circle, point if we create the functions to check and return intersection between entities, we will get a number of functions.<br />
For example :<br />
intersect_line_line(line, line);<br />
intersect_line_arc(line, arc);<br />
intersect_line_ellipse(line, ellipse);<br />
and so on for every entity.<br />
<br />
The quadratic of any entity can be found. Then the quadratic of two entities can be passed to a common function that just calculates the intersection points from the two quadratic equations.<br />
<br />
quad1 = line.get_quadratic()<br />
quad2 = circle.get_quadratic()<br />
quad3 = ellipse.get_quadratic() // ellipse quadratic equation<br />
get_intersection(quad1,quad2) // will give intersection points of line and circle<br />
get_intersection(quad1,quad3)// will give intersection points of line and ellipse<br />
<br />
For example,<br />
<br />
Approach 1 ( Line Line direct intersection calculation )<br />
void Intersect::visit(shared_ptr<const lc::Line> l1, shared_ptr<const lc::Line> l2) {<br />
<br />
geo::Coordinate p1 = l1->start();<br />
geo::Coordinate p2 = l1->end();<br />
geo::Coordinate p3 = l2->start();<br />
geo::Coordinate p4 = l2->end();<br />
<br />
double num = ((p4.x() - p3.x()) * (p1.y() - p3.y()) - (p4.y() - p3.y()) * (p1.x() - p3.x()));<br />
double div = ((p4.y() - p3.y()) * (p2.x() - p1.x()) - (p4.x() - p3.x()) * (p2.y() - p1.y()));<br />
<br />
// TODO: We properly should add a tolorance here ??<br />
if (fabs(div) > 0.0) {<br />
double u = num / div;<br />
double xs = p1.x() + u * (p2.x() - p1.x());<br />
double ys = p1.y() + u * (p2.y() - p1.y());<br />
geo::Coordinate coord(xs, ys);<br />
<br />
if (_method == Method::Any || (_method == Method::MustIntersect && l1->isCoordinateOnPath(coord) && l2->isCoordinateOnPath(coord))) {<br />
_intersectionPoints.append(coord);<br />
}<br />
}<br />
}<br />
<br />
Approach 2 ( First calculate quadratic of entities and then calculate intersection from quadratic )<br />
<br />
void Intersect::visit(const shared_ptr<const lc::Line>& l1, const shared_ptr<const lc::Line>& l2) {<br />
<br />
//getIntersection<br />
QList<geo::Coordinate>&& points=LC_Quadratic::getIntersection(l1->getQuadratic(), l2->getQuadratic());<br />
// Where getQuadratic is a function to calculate quadratic of lines.<br />
if (points.empty() == false )<br />
_intersectionPoints.append(points);<br />
<br />
}<br />
<br />
References :<br />
http://en.wikipedia.org/wiki/Quadratic_form<br />
Maths will be taken from LibreCAD2 :<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/lc_quadratic.h<br />
https://github.com/LibreCAD/LibreCAD/blob/master/librecad/src/lib/math/rs_math.h<br />
<br />
===Deliverables:===<br />
The project can be divided in at least 4 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
#Operations:<br />
##Move<br />
##Copy<br />
##Rotate<br />
#Entities :<br />
##Text<br />
##Dimensions<br />
#Intersection support extended to Arc, Line, Circle, ellipse.<br />
#Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
===Milestones( or Plan ):===<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
===Future work / scope (Post GsoC):===<br />
*After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
*Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
==Time Availability:==<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
==Why LibreCAD?==<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
==Why me?==<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6741User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T16:24:48Z<p>Gaganjyotsingh: </p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
==Project Information :==<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
===Brief Summary:===<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
===Detailed Description:===<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
The Kernel ( My playground ):<br />
<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity. Listed below are the operations, entities and the intersection pattern which is to be implemented.<br />
<br />
====Operations :====<br />
<br />
=====Move:=====<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
void move_line ( coordinate offset ) {<br />
start_point = start_point + offset;<br />
end_point = end_point + offset;<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=====Copy :=====<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=====Rotate:=====<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
// Rotation around itself at some angle.<br />
// first the double value will be converted into a coordinate using sin cos functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
y = x * angle.y – y * angle.x<br />
x = temp<br />
}<br />
<br />
====Entites:====<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
*Text will have support for the following attributes,<br />
<br />
Insertion point : The point at wich entity is to be inserted.<br />
SecondPoint : It is used by the aligned fit.<br />
Widthrel : It is the width of reference rectangle around the text.<br />
Height : Height of text <br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text <br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
*Dimension has the following attributes,<br />
<br />
DefinitionPoint : The point at which dimension is defined<br />
MiddleOfText : Middle of the dimension text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text<br />
LineSpacingStyle : Spacing style if any for the dimension <br />
LineSpacingFactor : Spacing factor if any<br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
====Intersection Stuff====<br />
// YET TO BE ADDED AND IS THE MAIN MATHS PART<br />
<br />
====References :====<br />
Circle circle intersection<br />
http://mathworld.wolfram.com/Circle-CircleIntersection.html<br />
http://stackoverflow.com/questions/3349125/circle-circle-intersection-points<br />
Ellipse Line :<br />
http://www.nabla.hr/Z_MemoHU-029.htm<br />
http://gieseanw.wordpress.com/2013/07/19/an-analytic-solution-for-ellipse-and-line-intersection/<br />
<br />
<br />
===Deliverables:===<br />
The project can be divided in at least 5 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
#Operations:<br />
##Move<br />
##Copy<br />
##Rotate<br />
#Entities :<br />
##Text<br />
##Dimensions<br />
#Intersection support extended to Arc, Line, Circle, ellipse.<br />
#Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
===Milestones( or Plan ):===<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
===Future work / scope (Post GsoC):===<br />
*After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
*Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
==Time Availability:==<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
==Why LibreCAD?==<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
==Why me?==<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsinghhttps://brlcad.org/w/index.php?title=User:Gaganjyotsingh/Proposal/LibreCADkickoff&diff=6734User:Gaganjyotsingh/Proposal/LibreCADkickoff2014-03-16T15:02:49Z<p>Gaganjyotsingh: Created page with "=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff= ==Personal Information== '''Name:''' Gaganjyot Singh '''Email Address:''' thegaganx@gmail.com '''IRC Username:''' gag..."</p>
<hr />
<div>=GSoC 2014 Project Proposal : LibreCAD Kernel kickoff=<br />
==Personal Information==<br />
<br />
'''Name:''' Gaganjyot Singh<br />
<br />
'''Email Address:''' thegaganx@gmail.com<br />
<br />
'''IRC Username:''' gaganjyot<br />
<br />
'''Brief Background Information:'''<br />
<br />
Studying in second year bachelors degree in computer science and engineering from Chandigarh Engineering College, Chandigarh, Punjab, India. Working with CAD softwares like LibreCAD, FreeCAD and BRL-CAD and CAD formats as DXF, DWG. GSoC 2013 student.<br />
<br />
'''Phone number:''' +91 988 836 2700<br />
<br />
'''Programming background :'''<br />
<br />
As it comes to programming languages I prefer C/C++ and Python, in which I also have more experience (about 2 years in Python and more than 4 years with C/C++).<br />
Other programming languages I have experienced: PHP, Vala, Bash Scripting, Assembly language.<br />
Versioning tools: I am quite familiar with Git (I update my work done on github using git) and SVN (maintainer of GNU Dr. Geo and commit code using SVN).<br />
<br />
<br />
===Project Information :===<br />
<br />
===Project Title: LibreCAD Kickoff===<br />
<br />
<br />
====Brief Summary:====<br />
<br />
LibreCAD v3 kernel was developed in 2012 by Ries Van Twisk as in experimental stage using modern technologies and the new C++11 standard code and libraries. A kernel is the part of any software which stands the base for software. A CAD kernel is one which manages the various operations such as scale, move, copy, trim, rotate. It manages the entities, attributes of entities and the data/information of the entity. It also manages the way the data is stored in memory and how the data will be written to a file ( file format ) or storing the values in a database. This project will extend the new completely rewritten code base so as to stand as the base for the new LibreCAD.<br />
<br />
<br />
==Detailed Description:==<br />
<br />
LibreCAD when started was a fork of QCADv2 community edition. The QCAD version was only working on QT3 while qt 4 was in the market. So LibreCAD was forked and ported to Qt4. This fork was about 10 years ago and hence the codebase is quite old. To overcome this problem, Ries started developing a new versions of LibreCAD from scratch.<br />
This new version, so called the LCv3 is divided into 3 parts.<br />
#The UI<br />
#The Kernel<br />
#The CAD viewer<br />
<br />
==The Kernel ( My playground ):==<br />
The kernel is the base of this CAD software. It does the operations that are to be done on any entity. This kernel follows the immutable entity approach. Every entity in this kernel has its own unique ID. This means if an entity is created, if any operation is to be performed on it, it will be deleted and a new entity will be created with the operation performed on it with the same ID as of the deleted entity.<br />
<br />
=Operations :=<br />
<br />
=Move:=<br />
The implementation of the Move operation involves ( atleast ) an offset. Offset is the value by which the entity needs to be moved.<br />
<br />
For the Line, the move can be implemented as<br />
void move_line ( coordinate offset ) {<br />
start_point = start_point + offset;<br />
end_point = end_point + offset;<br />
}<br />
<br />
delete_line(id); // Immutable approach, older gets deleted and a new will be created.<br />
new_line(start_point, end_point); // values changed above.<br />
<br />
For Circle and Arc, the center will be moved by the offset value<br />
For the Ellipse, with the center another attribute will be<br />
For the Text entity, the placement points will be moved by the offset.<br />
<br />
This pseudo-code refers to very basic move. While moving the user can also rotate if he wants.<br />
It will look something like,<br />
void move_line ( coordinate offset, double angle ) // angle by which the entity needs to be rotated. Though circle is a special case since it will look same on rotation.<br />
<br />
<br />
=Copy :=<br />
Copy includes almost the same code as the code of Move. Even in the copy, the new copy will be placed at some offset.<br />
The only difference between Copy and move is only that in the move, the older entity is deleted but in Copy both the entity remain in the document.<br />
<br />
Copy also supports rotation while copying.<br />
void copy_entity ( coordinate offset, double angle ) // where entity will be replaced by specific entity name in the entity specific classes.<br />
<br />
Copy will support a special feature of multiple copies.<br />
void copy_entity ( coordinate offset, double angle, int copies ) // copies will be created each at a difference of offset provided in first argument.<br />
<br />
=Rotate:=<br />
Rotate is required for rotating an entity. It could be rotating with respect to any other special point ( such as the origin ) or may be with respect to entity it self.<br />
<br />
void rotate ( double angle ) {<br />
// Rotation around itself at some angle.<br />
// first the double value will be converted into a coordinate using sin cos functions for x and y coordinate respectively<br />
and then the algo will be applied to rotate the entity. Which is like<br />
temp_x = x * angle.x – y * angle.y // stored in temp since we need older x value<br />
y = x * angle.y – y * angle.x<br />
x = temp<br />
}<br />
<br />
=Entites:=<br />
<br />
Two entities will be added.<br />
1) Text<br />
2) Dimension<br />
<br />
Text will have support for the following attributes,<br />
<br />
Insertion point : The point at wich entity is to be inserted.<br />
SecondPoint : It is used by the aligned fit.<br />
Widthrel : It is the width of reference rectangle around the text.<br />
Height : Height of text <br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text <br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
Dimension has the following attributes,<br />
<br />
DefinitionPoint : The point at which dimension is defined<br />
MiddleOfText : Middle of the dimension text<br />
Valign : Vertical Alignment of the Dimension value text<br />
Halign : Horizontal Alignment of the dimension value text<br />
LineSpacingStyle : Spacing style if any for the dimension <br />
LineSpacingFactor : Spacing factor if any<br />
Text : Text value held by dimension entity<br />
Style : Style of the text <br />
Angle : If the text is aligned at some angle<br />
<br />
Intersection Stuff<br />
// YET TO BE ADDED AND IS THE MAIN MATHS PART<br />
<br />
References :-<br />
Circle circle intersection<br />
http://mathworld.wolfram.com/Circle-CircleIntersection.html<br />
http://stackoverflow.com/questions/3349125/circle-circle-intersection-points<br />
Ellipse Line :<br />
http://www.nabla.hr/Z_MemoHU-029.htm<br />
http://gieseanw.wordpress.com/2013/07/19/an-analytic-solution-for-ellipse-and-line-intersection/<br />
<br />
==Deliverables:==<br />
The project can be divided in at least 5 parts, so all of this can be considered a specific measurable goal (one for every feature implemented). LibreCAD v3 Kernel will be delivered with the support of following,<br />
<br />
==Operations:==<br />
1. Move<br />
2. Copy<br />
3. Rotate<br />
<br />
==Entities :==<br />
1. Text<br />
2. Dimensions<br />
<br />
Intersection support extended to Arc, Line, Circle, ellipse.<br />
<br />
Unit tests so as to test the working of implemented stuff.<br />
<br />
<br />
Milestones( or Plan ):<br />
<br />
19 May – 27 May:<br />
Move will be implemented to all the entities.<br />
28 May – 5 June:<br />
Copy will be implemented to all the entities.<br />
6 June – 14 june:<br />
Rotate will be implemented to all the entities.<br />
<br />
15 June – 25 June:<br />
Text entity will be implemented with support for move,copy and rotate.<br />
<br />
26 June - 6 July<br />
Dimension support will be added with support for the operations.<br />
<br />
7 July – 27 July<br />
Visitor pattern will be implemented in this time. ( Most important and challenging of all tasks so have provided the maximum time).<br />
<br />
28 July – 10 August:<br />
Unit tests for copy, move rotate will be added.<br />
Unit test for adding dimension and text will be added.<br />
<br />
11 August – 18 August:<br />
Code Cleanup, fixing bugs if any and preparing/submitting final submission.<br />
<br />
<br />
<br />
<br />
Future work / scope (Post GsoC):<br />
After the GSoC, the LibreCAD kernel will have functionalities to be embedded into the LibreCAD v3 and hence on with the development of UI and CAD viewer of LibreCADv3, it will be soon replacing the LibreCADv2.<br />
Moreover since this is a complete rewrite, this way the license be totally on the LibreCAD team and hence we will be able to avoid the conflict that is going from about 3 years between the LibreCAD and LibreDWG library. This way users will also be able to read the DWG files into LibreCAD hence uplifting the status of CAD on opensource platforms.<br />
<br />
<br />
Time Availability:<br />
I will be available 40 to 48 hours a week, if needed can spend more.<br />
<br />
<br />
Why LibreCAD?<br />
My interest in CAD programs.<br />
There is no CAD program till now which satisfies my needs exactly right now on Linux. LibreCAD meets my demands more than others. Hence I will be making libreCAD do all my work.<br />
<br />
<br />
Why me?<br />
I wish to lift up the level of open source CAD and Linux. With previous Summer of code done with a CAD library, I have gained more experience about the working of CAD. There is a great need of a person who basically has knowledge of softwares like AutoCAD, LibreCAD, BRL-CAD, SolidWorks, NX and knowledge in field of machines, I being a mechanical engineer and a programmer have undergone rigorous practice for CAD softwares listed above. Moreover, My recent college project was also first designed on solidworks and BRL-CAD before bringing it to reality. I therefore can easily understand user requirements can and bring it to reality. At last my wish to work for open source/open source CAD and my passion for programming.</div>Gaganjyotsingh