https://brlcad.org/w/api.php?action=feedcontributions&user=Feragon.xi&feedformat=atomBRL-CAD - User contributions [en]2024-03-28T10:54:53ZUser contributionsMediaWiki 1.32.2https://brlcad.org/w/index.php?title=User:Feragon.xi/GSoC2017/Project&diff=9951User:Feragon.xi/GSoC2017/Project2017-05-06T11:49:10Z<p>Feragon.xi: Created page with "== LibreCAD 3 Lua plugin system == ===Brief project summary=== During the GSoC 2016, I began a simple implementation of Lua plugins. They offer a GUI version with preview of..."</p>
<hr />
<div>== LibreCAD 3 Lua plugin system ==<br />
<br />
===Brief project summary===<br />
During the GSoC 2016, I began a simple implementation of Lua plugins. They <br />
offer a GUI version with preview of what could be done before with the LibreCAD<br />
command line. The plugins can only add primitive entities to a document, others <br />
operations are difficult to program, and won’t be intuitive for the user.<br />
<br />
This project aims at improving this plugin system. The plugins could create new <br />
entities types, and define custom interactions. <br />
<br />
For example, the rectangle plugin is only adding 4 lines in the document. After <br />
that, individual lines can be modified, and it doesn’t look like a rectangle <br />
anymore. Here the script should handle the modification of the entity so it will <br />
always remain a rectangle.<br />
<br />
The plugins could also make operations on files, which would allow scripts to <br />
import or export different formats.<br />
<br />
The same Lua code could be run in LibreCAD, or in command line or in a quick <br />
script, and have the same result.<br />
<br />
This proposal is also including drawing optimizations for LibreCAD, and a unit <br />
test system for entities rendering.<br />
<br />
<br />
===Detailed project description===<br />
<br />
====Implementation of new plugins:====<br />
First, the Lua script system needs to be improved. For the moment each file is <br />
included by the Lua UI.<br />
<br />
The current implementation has some limits for security reasons. Some functions<br />
were modified or removed. It is currently impossible to read or write a file, and some plugins can make LibreCAD crash.<br />
<br />
The solution here is to run each plugin on its own instance. Some function <br />
currently defined in Lua would be moved to a C++ API accessible from the <br />
scripts. This includes the function to get the selected layer and metadata. New <br />
managers will be required in C++ because actually these information are only <br />
available in the Lua UI.<br />
<br />
The API needs to be integrated in the command line and in the quick script <br />
dialog. Currently, they only have an access to the bindings of the kernel entities.<br />
<br />
A plugin manager would be required in the lcadluascript library, currently <br />
everything is done in the Qt UI library, which makes it inaccessible from the <br />
command line.<br />
<br />
It would implement methods to start or stop a script, add the bindings, etc...<br />
Some needs to be implemented in the UI, for example the method to write a file, <br />
which will open a dialog in the GUI, and read console input in the command <br />
interface.<br />
<br />
The files operations needs to be secure, when a script needs to open or save a <br />
file, it will ask the user where is the file, which prevent opening sensitive files.<br />
<br />
For the automation scripts, it could operate on the files in a specific folder, like PHP does with open_basedir. <br />
<br />
The plugins will all inherit of a Lua class, with a separation between UI functions and rendering functions, so the same plugin could easily be used in the GUI and <br />
in the command line.<br />
<br />
===Implementation of custom entities:===<br />
This project will also add custom entities, which could be defined by scripts, with custom interactions. They would be associated to a block for the drawing, and allthe data would be included in the INSERT entity.<br />
<br />
I think this is the best representation, because LibreCAD will treat the custom <br />
entities like the other CAD programs, which will make the entities always look <br />
the same on two different programs, only the interactions won’t be available. <br />
If a block is modified outside LibreCAD, it will be visible in LibreCAD too, and <br />
they could be regenerated by the user.<br />
<br />
This representation is also required because otherwise it would add Lua as a <br />
dependency.<br />
<br />
The interactions with the custom entities includes:<br />
<br />
• New elements in the right click menu<br />
<br />
• Apparition of new buttons in the toolbar<br />
<br />
• Modification of the entity with their drag points<br />
<br />
• New snap points<br />
<br />
The kernel require the implementation of Blocks and INSERT entities.<br />
The data will be stored in the INSERT entity in the application defined group <br />
(code 102). The plugins can define their own code, only one will be reserved for <br />
LibreCAD with the plugin name.<br />
<br />
====Drawing order and optimizations:====<br />
<br />
A drawing order needs to be added as, actually, it is random. It wasn’t an issue <br />
before because we were using only basic entities, but now with the implementation of images, this is also needed.<br />
<br />
LibreCAD 3 is redrawing everything each time the cursor is moved, some objects<br />
don’t need to be refreshed every time (like the grid). This could be improved by <br />
redrawing only what’s needed. For example, moving the cursor should only <br />
refresh the temp entities and the cursor.<br />
<br />
The last optimization is the transfer between Cairo and Qt. Currently, there are <br />
multiple Cairo painters, which are each transferred to a QImage, and a QPainter <br />
is drawing each QImage on LCADViewer widget.<br />
<br />
The addition of the layers could be done in Cairo and drawn directly in the <br />
widget with a custom painter.<br />
<br />
<br />
====Rendering unit tests:====<br />
<br />
The idea here is to use LibreCAD command line to generate images of rendered <br />
entities, and compare them to existing images (what we expect).<br />
<br />
We can use a program to compare the differences between the images, but I’m <br />
not sure it will be portable. If that’s not possible, we can compare them using <br />
subtraction. Removing image2 from image1 should result in a totally black image. <br />
The result can be expressed in percentage: 100% – percentage of white pixels <br />
which stayed.<br />
<br />
===Deliverables===<br />
<br />
• Support of INSERT and BLOCK and custom entities in the kernel and the drawer<br />
<br />
• Load and save BLOCK/INSERT/custom entities<br />
<br />
• Lua API<br />
<br />
• Interactions of the user with the custom entities<br />
<br />
• Lua script dialog using the new API<br />
<br />
• LibreCAD command line with the new API<br />
<br />
• Unit tests<br />
<br />
• Documentation of the code and on how to create a script<br />
<br />
• Rendering unit tests<br />
<br />
• Rendering optimizations<br />
<br />
===Development schedule ===<br />
• May 30th – June 4th: <br />
I have my finals this week<br />
<br />
• June 5th – June 11th :<br />
- Add BLOCK and INSERT support in kernel and drawer<br />
- Load and save them in DXF files<br />
<br />
• June 12th – June 25th :<br />
- Move functions from Lua to a C++ class<br />
- Create bindings for this class<br />
- Create a sandbox for the plugins in C++<br />
- Create a GUI to manage plugins<br />
<br />
• June 26th – July 2nd :<br />
- Creation of the custom entity in the kernel<br />
- Load and save them in DXF files<br />
<br />
• July 3rd – July 9th:<br />
- Interactions of the user with the custom entities<br />
<br />
• July 10th – July 16th:<br />
- Add the Lua API to the Lua script dialog and to the command line<br />
<br />
• July 17th – July 23rd :<br />
- Update of the current scripts to add new features<br />
- Make the current scripts compatible as a LibreCAD plugin, as a quick Lua<br />
script, and as a command line plugin<br />
<br />
• July 24th – July 31st:<br />
- Documentation on how to create a script<br />
<br />
• August 1st – August 6th :<br />
- Create unit tests to compare rendered entities with images of expectation<br />
<br />
• August 7th – August 13th :<br />
- Optimizations of LibreCAD drawing<br />
- Create drawing order<br />
<br />
• August 14th – August 21st: <br />
- Code verification<br />
- Code optimization<br />
- Writing of missing unit tests<br />
- Writing of missing documentation<br />
<br />
===Milestones===<br />
• BLOCK and INSERT support in LibreCAD<br />
• Lua API<br />
• Custom entity support in LibreCAD<br />
• Update of plugins to add new features<br />
• Documentation on script creation<br />
• Rendering modifications and unit tests</div>Feragon.xihttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2017&diff=9950Google Summer of Code/20172017-05-06T11:36:32Z<p>Feragon.xi: </p>
<hr />
<div>= GSoC 2017 With BRL-CAD =<br />
<br />
'''BRL-CAD was accepted as an [https://summerofcode.withgoogle.com umbrella mentoring organization] for the Google Summer of Code!'''<br />
<br />
Our umbrella accepted '''10''' students that prepared quality proposals and demonstrated commitment, with details below for those students that were successful. Students were selected for LibreCAD, Slic3r, BRL-CAD, and FreeCAD.<br />
<br />
= Accepted Projects =<br />
<br />
<br />
<br />
<!-- HERE IS A TEMPLATE, COPY IT AND ADD IT TO THE ACCEPTED PROJECTS --><br />
<br />
== ORG: Simple Understandable Project Title (COPY this and leave it for others) ==<br />
* Brief description (< 250 chars)<br />
* Student: link to personal page, e.g., [[User:your_wiki_name|Your Real Name]]<br />
* Abstract: link to your abstract, e.g., [https://summerofcode.withgoogle.com/projects/#6255437804470272 Abstract]<br />
* Project Plan: link to your project plan, e.g., [[User:your_wiki_name/GSoC2017/Project]]<br />
* Dev Log: link to your dev logs, e.g., [[User:your_wiki_name/GSoC2017/Log]]<br />
<br />
== GPU Boolean Evaluation for CSG Ray-Tracing ==<br />
* Implementing Boolean Evaluation for CSG ray-tracing in OpenCL<br />
* Student: [[User:Marco-domingues|Marco Domingues]]<br />
* [https://summerofcode.withgoogle.com/projects/#4523183467134976 Abstract]<br />
* [[User:Marco-domingues/GSoC17/Project|Project Plan]]<br />
* [[User:Marco-domingues/GSoC17/Log|Dev Log]]<br />
<br />
<br />
== LibreCAD 3 plugin system ==<br />
* Creation of a Lua plugin system that could create new entities with custom interaction, and add new import/export formats<br />
* Student: [[User:Feragon.xi|Florian Roméo]]<br />
* [https://summerofcode.withgoogle.com/projects/#6730569560883200 Abstract]<br />
* [[User:Feragon.xi/GSoC2017/Project|Project plan]]<br />
* [https://gsoc17.feragon.net Dev log]</div>Feragon.xihttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9719Google Summer of Code/20162016-05-19T21:11:33Z<p>Feragon.xi: /* LibreCAD 3 Scriptable User Interface Creation */</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/projects/#5901122497675264 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 Evaluation using a GPU, if available.<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/projects/#6520583684620288 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/projects/#5170062377877504 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/projects/#5263377253269504 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/projects/#6255437804470272 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 />
* [[User:Mandeeps708/GSoC16/logs|Development Logs]]<br />
* [https://mandeep7.wordpress.com Blog]</div>Feragon.xihttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9715Google Summer of Code/20162016-05-17T20:38:57Z<p>Feragon.xi: /* Automatic Polygonal Mesh Healing */</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/projects/#5901122497675264 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 Evaluation using a GPU, if available.<br />
* Student: [[User:catchchaos|Param Hanji]]<br />
* [https://summerofcode.withgoogle.com/projects/#6520583684620288 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/projects/#5263377253269504 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/projects/#6255437804470272 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>Feragon.xihttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9702Google Summer of Code/20162016-05-13T16:27:55Z<p>Feragon.xi: /* LibreCAD 3 Scriptable User Interface Creation */</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 />
* [[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>Feragon.xihttps://brlcad.org/w/index.php?title=Google_Summer_of_Code/2016&diff=9660Google Summer of Code/20162016-05-05T20:35:27Z<p>Feragon.xi: /* LibreCAD 3 Scriptable User Interface Creation */</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:your_wiki_username/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 />
== Form based script parameterization (needs better title) ==<br />
* This project intends to define user interface to modify the parameters 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 />
* [[User:your_wiki_username/GSoC2016/Logs|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 />
* [[User:your_wiki_username/GSoC2016/Logs|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 Evolvement++ (needs better title) ==<br />
* 80-char summary<br />
* Student: [[User:your_wiki_username|Your Name Here]]<br />
* [https://summerofcode.withgoogle.com/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:your_wiki_username/GSoC2016/Project |Project Plan]]<br />
* [[User:your_wiki_username/GSoC2016/Logs|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/dashboard/project/5901122497675264/overview/ Abstract]<br />
* [[User:Gauravjeet/OGV_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>Feragon.xihttps://brlcad.org/w/index.php?title=User:Feragon.xi/GSoC2016/Project&diff=9659User:Feragon.xi/GSoC2016/Project2016-05-05T20:28:30Z<p>Feragon.xi: Created page with "== LibreCAD 3 Scriptable User Interface Creation == === Brief project summary === LibreCAD 3 have a new code base. Currently the only way to create objects is writing a Lua sc..."</p>
<hr />
<div>== LibreCAD 3 Scriptable User Interface Creation ==<br />
=== Brief project summary ===<br />
LibreCAD 3 have a new code base. Currently the only way to create objects is writing a Lua script, and there is no means to manipulate entities after their creation.<br />
<br />
This project aims at making the program usable for an end-user, who should be able to create and edit documents without writing Lua code.<br />
<br />
=== Detailed project description ===<br />
LibreCAD 3 is currently divided into 3 parts:<br />
<br />
*The user interface<br />
*The kernel<br />
*The CAD Viewer<br />
<br />
This project involves working with the LC user interface by creating a <br />
framework and a GUI, and the LC kernel to add the selection of entities.<br />
<br />
====Kernel====<br />
<br />
Actually items selection is only available in the drawer¹, not in the kernel.<br />
The kernel will need a modification to add the possibility to select one or <br />
more elements and operate on them. <br />
<br />
A new method will be added to the entities to get their definition points, that will be displayed when hovering them. The user can modify the document by moving these points.<br />
<br />
=====References=====<br />
*https://github.com/LibreCAD/LibreCAD_3/blob/master/lcviewernoqt/drawitems/lcvdrawitem.cpp<br />
<br />
====Framework====<br />
<br />
The framework should allow to create and modify entities stored in the <br />
kernel. <br />
<br />
The constraint is to be independent of drawing engine and input method, so<br />
others CAD programs could use the LCv3 engine and it can facilitate the <br />
port to other platforms (mobile, tablet, ...), so it should not depend on Qt or<br />
other GUI library. It must be extendable to evolve with the code.<br />
The framework should be able to deal with all the methods used to create <br />
and modify entities, for example a circle can be created by giving two <br />
points or a point and the radius.<br />
<br />
It will be called by the UI for each user action and will be composed of an <br />
element for each entity available in the kernel.<br />
<br />
The framework will be scriptable so we can modify the interface without <br />
recompiling. Lua will be used for this part, the actual kernel bindings¹ <br />
should be sufficient for this part. <br />
<br />
=====Reference=====<br />
*https://github.com/LibreCAD/LibreCAD_3/blob/master/lcadluascript/cad/lualibrecadbridge.cpp<br />
<br />
====GUI====<br />
<br />
The GUI should contain all the elements to create and manipulate entities. <br />
The framework will be called when an operation is selected and should <br />
allow the user to enter data manually in the console, or automatically in the<br />
canvas by selecting points or entities.<br />
<br />
It will be composed of Lua scripts for the same reason as the framework. <br />
The current Lua interpreter contains Qt bindings¹ but it’s only the data <br />
types. <br />
<br />
New bindings will be created to manipulate Qt elements with Lua. <br />
<br />
An API will be created to allow the framework to request data from the user.<br />
The main window will contain the buttons for each actions and a command <br />
prompt to enter Lua code, so instead of writing all the Lua script, the user <br />
can select the elements on the window and just enter one function.<br />
<br />
=====Reference=====<br />
*https://github.com/SteveKChiu/lua-intf/blob/d6f17a8a474814d337e1dd867238e1d5ba1b7e5c/LuaIntf/QtLuaIntf.h<br />
<br />
===Deliverable===<br />
<br />
This project will add the following features to LibreCAD 3:<br />
* Scriptable User Interface<br />
* Operations on entities exposed to the user<br />
** Creation<br />
** Rotation<br />
** Move<br />
** Copy<br />
** Remove<br />
* GUI elements to do the operations<br />
* Unit tests<br />
<br />
===Why LibreCAD ?===<br />
<br />
I used some CAD programs before and LibreCAD is the only one compatible <br />
with Linux which allows me to do what I need. And I think LibreCAD 3 has <br />
advantages over some proprietary CAD software, it is faster to start.<br />
<br />
===Why me ?===<br />
<br />
I have a good experience with C++, Qt and Lua as required for this project.<br />
As I already worked with CAD softwares, I understand the users <br />
expectations from LibreCAD.<br />
<br />
===Time availability===<br />
<br />
I can work at least 40 hours a week and more if needed.<br />
<br />
I have a finals week during the week of the 23 May, I'll do some work on the selection part during the community bonding period to not having too much delay on the schedule.<br />
<br />
===Development schedule===<br />
<br />
*Community Bonding Period:<br />
**Get to know about the community and the code<br />
**Adapt proposal with feedback and new ideas<br />
**Remove unused files of actual User Interface<br />
**Improve the Lua UI code sent for evaluation<br />
**Begin working on the selection instead of the week of 23 May<br />
*23 May - 28 May: <br />
**Finals week<br />
*29 May – 31 May: <br />
**Add selection of entities in the kernel<br />
*1 June – 14 June: <br />
**Add GUI elements<br />
**Add the API to use them<br />
*15 June – 26 June: <br />
**Implement creation for each entities<br />
*27 June – 6 July: <br />
**Implement rotation for each entities<br />
*7 July – 17 July: <br />
**Implement move for each entities<br />
*18 July – 27 July: <br />
**Implement copy for each entities<br />
*28 July – 3 August: <br />
**Implement remove for each entities<br />
*4 August – 14 August: <br />
**Creating unit tests<br />
*15 August – 23 August: <br />
**Code cleanup<br />
**Fixing bugs<br />
**Preparing final submission</div>Feragon.xihttps://brlcad.org/w/index.php?title=User:Feragon.xi&diff=9655User:Feragon.xi2016-05-05T18:12:33Z<p>Feragon.xi: Created page with "== Personal information == * '''Name:''' Florian Roméo * '''Email:''' florian.romeo@feragon.net * '''IRC:''' Feragon * '''GitHub:''' https://github.com/feragon/"</p>
<hr />
<div>== Personal information ==<br />
<br />
* '''Name:''' Florian Roméo<br />
* '''Email:''' florian.romeo@feragon.net<br />
* '''IRC:''' Feragon<br />
* '''GitHub:''' https://github.com/feragon/</div>Feragon.xi