https://brlcad.org/w/api.php?action=feedcontributions&user=Starseeker&feedformat=atom
BRL-CAD - User contributions [en]
2024-03-19T04:53:06Z
User contributions
MediaWiki 1.32.2
https://brlcad.org/w/index.php?title=Compiling&diff=12066
Compiling
2022-02-15T23:01:36Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>apt install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>apt install libc6-dev libfreetype-dev libfontconfig-dev</pre><pre>apt install xserver-xorg-dev libx11-dev libxi-dev libglu1-mesa-dev</pre><br />
<br />
** Fedora: <pre>yum install freetype-devel fontconfig-devel</pre><pre>yum install libX11-devel libXext-devel libXi-devel mesa-libGL-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12065
Compiling
2022-02-15T22:58:12Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>apt install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>apt install libc6-dev libfreetype-dev libfontconfig-dev</pre><pre>apt install xserver-xorg-dev libx11-dev libxi-dev libglu1-mesa-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12064
Compiling
2022-02-15T22:57:43Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>apt install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>apt install libc6-dev libfreetype-dev libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev libglu1-mesa-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12063
Compiling
2022-02-15T22:55:12Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>apt install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>apt install libc6-dev libfreetype-dev libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12062
Compiling
2022-02-15T22:54:54Z
<p>Starseeker: /* Step 1: Install Dev Tools */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>apt install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>aptitude install libc6-dev libfreetype-dev libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12061
Compiling
2022-02-15T22:50:57Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>aptitude install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>aptitude install libc6-dev libfreetype-dev libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12060
Compiling
2022-02-15T22:47:21Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>aptitude install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>aptitude install libfreetype-dev libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Compiling&diff=12059
Compiling
2022-02-15T22:33:28Z
<p>Starseeker: /* Step 2: Install Dependencies */</p>
<hr />
<div>= Compiling BRL-CAD =<br />
<br />
This page has simplified steps for building '''''quickly'''''. See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more detailed instruction.<br />
<br />
<br />
== Step 1: Install Dev Tools ==<br />
<br />
To build, you need at least [https://cmake.org/download/ CMake], a compiler, and at least 3GB of disk space. You will also want [https://git-scm.com/downloads/guis Git] to obtain the latest source code.<br />
<br />
* '''Windows''': Install [https://gitforwindows.org Git], [https://cmake.org/download/ CMake], and [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] or Professional. VS Code should also work, but you will need to install the "[https://visualstudio.microsoft.com/downloads/ Build Tools for Visual Studio]" also.<br />
<br />
* '''Mac''': Install [https://cmake.org/download/ CMake] and XCode or run this in Terminal: <pre>xcode-select --install</pre><br />
<br />
* '''Linux''' and Windows Subsystem for Linux ('''WSL'''):<br />
<br />
Installing is easiest with a package management system like apt, brew, yum, and dnf that install for you. Alas, the tools and names change frequently, so the following are platform-specific recommendations that may need to be adjusted for your system.<br />
<br />
** Debian/Ubuntu: <pre>aptitude install build-essential make cmake</pre><br />
<br />
** Fedora: <pre>yum install clang++ make cmake</pre><br />
<br />
** CentOS: <pre>yum install python3-pip devtoolset-9</pre><pre>pip3 install cmake</pre><pre>scl enable devtoolset-9 bash</pre><br />
<br />
* BSD: we assume you know what you're doing and can follow the gist<br />
<br />
== Step 2: Install Dependencies ==<br />
<br />
* '''Windows''': You can skip this step.<br />
<br />
* '''Mac''': Install the latest [https://www.xquartz.org XQuartz]<br />
<br />
* '''Linux''': BRL-CAD needs the Xorg development packages<br />
<br />
** Debian/Ubuntu: <pre>aptitude install libfontconfig-dev xserver-xorg-dev libx11-dev libxi-dev</pre><br />
<br />
** Fedora: <pre>yum install libx11-devel</pre><br />
<br />
== Step 3: Download BRL-CAD ==<br />
<br />
We recommend obtaining BRL-CAD by forking or cloning our repository on [https://github.com/BRL-CAD/brlcad GitHub].<br />
<br />
* '''Windows''': Run the Git GUI specifying this as the repository to clone: <pre>https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Mac''': You can either run the Git GUI, or you can run this in Terminal: <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
* '''Linux''': <pre>git clone https://github.com/BRL-CAD/brlcad.git</pre><br />
<br />
The "brlcad" folder created after cloning is a full source checkout of BRL-CAD and contains a README with additional info. If you run into trouble cloning from git, snapshot source releases [https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/ are available].<br />
<br />
== Step 4: Create a Build directory ==<br />
<br />
You can create a build folder anywhere, but it's typically named "build" and is in or near your "brlcad" source directory.<br />
<br />
* '''Windows''': create a folder named "build" inside your "brlcad" folder<br />
<br />
* '''Mac''', '''Linux''': <pre>mkdir -p brlcad/build</pre><br />
<br />
<br />
== Step 5: Configure ==<br />
<br />
Next, you'll run CMake to configure and generate a build system. CMake needs to know the top-level source dir (i.e., "brlcad" dir you cloned) and "build" dir you made are located. For your first time, we also recommend setting these CMake variables to avoid trivial issues:<br />
BRLCAD_ENABLE_STRICT=OFF<br />
BRLCAD_ENABLE_COMPILER_WARNINGS=OFF<br />
BRLCAD_BUNDLED_LIBS=ON<br />
<br />
* '''Windows''': you can use CMake GUI where you'll specify 1) your source dir (i.e. path to the "brlcad" folder that has README), 2) the build dir, and 3) variables. CMake does not display variables the first time you run, but you can "+ Add Entry" to add them or run "Configure" to list them. Once dirs and variables are set, run "Configure" again and finally "Generate" to create a Visual Studio build system. [[File:Running_cmake_on_windows.png|200px|thumb|right|Running CMake GUI on Windows]]<br />
<br />
* '''Mac''': You can either run CMake GUI like described for Windows, specifying your source dir, build dir, and the above variables, or you can follow the steps below for Linux in Terminal.<br />
<br />
* '''Linux''': <pre>cd brlcad/bulid</pre><pre>cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release</pre><br />
<br />
See [https://github.com/BRL-CAD/brlcad/blob/main/INSTALL INSTALL] for more CMake options.<br />
<br />
If CMake was successful, there will be a summary of the build printed at the end and it will have generated a build system for compiling BRL-CAD.<br />
<br />
== Step 6: Compile ==<br />
<br />
'''Windows''': navigate to your build directory and open the BRLCAD.sln file with Visual Studio. Compile the ALL_BUILD solution.<br />
<br />
'''Mac''', '''Linux''': while still in the build directory from Step 4, run <pre>make</pre><br />
<br />
If the build fails, re-run while capturing all output to a log: make 2>&1 | tee build.log<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
Note: Compilation can take anywhere from a couple minutes to an hour depending on hardware. If you had a quad-core CPU, you might run '"make -j4" to speed things up by compiling in parallel.<br />
<br />
<br />
== Step 7: Run! ==<br />
<br />
You don't have to install to run BRL-CAD. You can run the binaries you just compiled as they are in the brlcad/build/bin directory. On Windows, they can be in Debug/ or Release/ folders. Of the hundreds of tools in BRL-CAD, here's just a few to get you started:<br />
<br />
<pre><br />
bin/benchmark run<br />
bin/mged<br />
bin/archer<br />
</pre><br />
<br />
The first command (benchmark) will evaluate system performance and you can send results to benchmark at brlcad dot org.<br />
<br />
The second command (mged) is BRL-CAD's main graphical user interface application.<br />
<br />
The third command (archer) is BRL-CAD's newer graphical interface under development.<br />
<br />
= What next? =<br />
<br />
Be sure to check out the [[Documentation|docs]] and [[Main_Page]] for tutorials and more.<br />
<br />
Help make BRL-CAD better! There are many ways you can contribute to open source and you don't need to be an experienced programmer. We need artists, writers, designers, software developers, and managers. Contact us on [[IRC]].<br />
<br />
Please [https://github.com/BRL-CAD/brlcad/issues report] any build failures.<br />
<br />
See [[Deuces]] for really easy ways to get started!</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11737
Github Migration
2020-07-31T21:19:37Z
<p>Starseeker: /* Version Control History */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
BRL-CAD is migrating from Sourceforge to Github. This page is intended to identify and track steps taken so there is awareness and confidence.<br />
<br />
== Migration V&V steps ==<br />
<br />
* <s>Convert and upload repository candidate</s><br />
* Verify GitHub presentation<br />
** <s>Verify commit count is >= SVN commit count</s><br />
** <s>Ensure at least 75% of committers are represented</s> <br />
** <s>Ensure at least 95% of commits are represented by committers</s><br />
** <s>Ensure commit metadata presents meaningfully</s><br />
** Manually test file history tracing on 10+ files in different directories<br />
** Manually identify and compare a UTF file's presentation (e.g., AUTHORS)<br />
** Manually identify and compare a UTF commit message's presentation<br />
** Verify repo cloning<br />
* Verify repository contents (accounting for and documenting all discrepancies)<br />
** Verify SVN commits are all present or otherwise accounted for<br />
** Verify SVN commit metadata are all present or otherwise accounted for<br />
** Iterate all SVN committers, compare against GitHub commit count<br />
** Iterate all SVN committers, compare against GIT commit count<br />
** Iterate all SVN commits, ensure they can be found in GIT<br />
** Iterate all SVN commits, compare GIT checkout with SVN<br />
** Manually inspect 10+ files in different directories<br />
** Manually test compilation: 2 revisions and 2 tags (ideally one old, one new)<br />
** Manually identify and compare a UTF file checkout (e.g., AUTHORS)<br />
** Manually identify and compare a UTF commit message<br />
** Verify GIT repo cleanup (garbage collect, orphans) doesn't change repo<br />
** Verify checkout of all tags and branches<br />
* Migrate SourceForge project data<br />
** Migrate SourceForge tracker data for bugs/support/requests to issues<br />
** Back up SourceForge mailing lists into searchable archived form<br />
** Migrate / Encode SourceForge Metadata (project categorization, screenshots)<br />
** Migrate SourceForge patches (process TBD)<br />
* Update Docs<br />
** Update HACKING text and refs<br />
** Update README, doc/README*, & INSTALL text and refs<br />
** Search/update repo SVN/subversion/Sourceforge/sf.net references<br />
** Search/update website SVN/subversion/Sourceforge/sf.net references<br />
* Update infrastructure<br />
** Update self-hosted Jenkins<br />
** Configure GitHub repo to make branches and tags immutable<br />
** Populate GitHub with releases<br />
** Disable SourceForge trackers<br />
** Disable SourceForge mailing lists<br />
** Mirror GitHub project to Sourceforge<br />
** Migrate Zulip to Gitter<br />
* Update Website<br />
** Point Download section to GitHub<br />
* Announce<br />
** IRC+Gitter<br />
** Facebook+Twitter<br />
** News mailing list<br />
<br />
<br />
== Known Discrepancies ==<br />
<br />
* Some SVN commits are represented as multiple GIT commits<br />
** This implies the GIT commit counts may be higher<br />
* SVN metadata (i.e., props) commits are not represented in GIT<br />
** This implies the GIT commit count may be lower<br />
* Some SVN metadata is stored in the GIT log<br />
** Strip trailing \n\n(svn:.*\n)+ lines to compare commit messages<br />
* Single line SVN commit messages have been line-wrapped in GIT<br />
** Strip internal newlines to compare<br />
<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
IMPORTANT: We need to set up protections for the historical branches in Github: https://docs.github.com/en/github/administering-a-repository/configuring-protected-branches - without this, we can lose history if anyone accidentally deletes old branches whose commits are not referenced by any undeleted branches. (Unfortunately Github doesn't yet support protecting tags (https://github.community/t/feature-request-protected-tags) but if/when that feature is added we will also want to use it.)<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
We'll want to put together some usage notes on how to work with Git+BRL-CAD. Following history past renames is a problem (See https://marc.info/?l=git&m=123333586414420 and https://marc.info/?l=git&m=123333626615117) and ideally we'd like devs to move files first and commit the move before making any changes to allow us to follow local file history more easily. Git philosophically does not track per-file history, which is unfortunate given BRL-CAD's historical practices - there are often situations where following a file's individual history is the most efficient way to understand why a subset of the code base is the way it is today. We have dealt with this in the conversion by automatically inserting preliminary move commits to allow git log --follow to work with maximal efficiency, but there isn't a practical way to enforce this once we start using git itself - there's no option to explicitly track file moves and without it it is up to individual developers to remember to rename, commit, and then edit. This is especially hard since renames without file editing often break the build, and the reflex is to fix the build before committing...<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11715
Github Migration
2020-07-17T14:14:37Z
<p>Starseeker: /* In-Repository Updates */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
IMPORTANT: We need to set up protections for the historical branches in Github: https://docs.github.com/en/github/administering-a-repository/configuring-protected-branches - without this, we can lose history if anyone accidentally deletes old branches whose commits are not referenced by any undeleted branches. (Unfortunately Github doesn't yet support protecting tags (https://github.community/t/feature-request-protected-tags) but if/when that feature is added we will also want to use it.)<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
We'll want to put together some usage notes on how to work with Git+BRL-CAD. Following history past renames is a problem (See https://marc.info/?l=git&m=123333586414420 and https://marc.info/?l=git&m=123333626615117) and ideally we'd like devs to move files first and commit the move before making any changes to allow us to follow local file history more easily. Git philosophically does not track per-file history, which is unfortunate given BRL-CAD's historical practices - there are often situations where following a file's individual history is the most efficient way to understand why a subset of the code base is the way it is today. We have dealt with this in the conversion by automatically inserting preliminary move commits to allow git log --follow to work with maximal efficiency, but there isn't a practical way to enforce this once we start using git itself - there's no option to explicitly track file moves and without it it is up to individual developers to remember to rename, commit, and then edit. This is especially hard since renames without file editing often break the build, and the reflex is to fix the build before committing...<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11714
Github Migration
2020-07-17T13:15:29Z
<p>Starseeker: /* Version Control History */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
IMPORTANT: We need to set up protections for the historical branches in Github: https://docs.github.com/en/github/administering-a-repository/configuring-protected-branches - without this, we can lose history if anyone accidentally deletes old branches whose commits are not referenced by any undeleted branches. (Unfortunately Github doesn't yet support protecting tags (https://github.community/t/feature-request-protected-tags) but if/when that feature is added we will also want to use it.)<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11713
Github Migration
2020-07-17T13:03:13Z
<p>Starseeker: /* Version Control History */ Note need for branch protection</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
IMPORTANT: We need to set up protections for the historical branches in Github: https://docs.github.com/en/github/administering-a-repository/configuring-protected-branches - without this, we can lose history if anyone accidentally deletes old branches whose commits are not referenced by any undeleted branches.<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11707
Github Migration
2020-07-14T13:24:29Z
<p>Starseeker: /* Version Control History */ Probably pass on LFS, at least for the initial conversion - too much chance of inducing some problem with the history mapping, and didn't see huge space gains in early experiments.</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11706
Github Migration
2020-07-14T00:08:45Z
<p>Starseeker: /* Version Control History */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
TODO - we should decide up front whether we want to utilize Git LFS or not... for example, https://rehansaeed.com/gitattributes-best-practices/<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11705
Github Migration
2020-07-14T00:06:45Z
<p>Starseeker: /* Version Control History */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
TODO - we should decide up front whether we want to utilize Git LFS or not...<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11704
Github Migration
2020-07-13T21:06:11Z
<p>Starseeker: Explicit note to save original CVS and SVN data against possible future need.</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
For completeness, the plan is to create a Git repository that preserves the CVS and SVN repository contents in their final states. The original CVS history proved important when doing the Git conversion, and should another attempt be made someday to migrate BRL-CAD's history to a new VCS it may well prove useful to have the original early data available, as opposed to the (inevitably) lossy Git conversion of that data. (A quick test indicates such a repository would be about 1.7G in size.) For best behavior the repo should probably have a .gitattributes file identifying all file types as binary files.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11703
Github Migration
2020-07-13T14:05:46Z
<p>Starseeker: /* Email lists */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...). CMake recently switched to discourse - https://discourse.cmake.org/</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11702
Github Migration
2020-07-13T14:01:10Z
<p>Starseeker: </p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.<br />
<br />
== Email lists ==<br />
<br />
Email is currently hosted on sourceforge - need to decide what to do about migrating it (or not...)</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11701
Github Migration
2020-07-13T12:50:29Z
<p>Starseeker: /* User Workflow Updates */</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types - a prototype is at misc/repoconv/gitattributes.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11700
Github Migration
2020-07-13T12:49:00Z
<p>Starseeker: </p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.<br />
<br />
== User Workflow Updates ==<br />
<br />
Over the years a number of convenience setups have been worked out for Subversion, such as the mime type defaults. Once we convert to git, we want to establish similar defaults and standards in Git. This will be ongoing, but already known:<br />
<br />
* Add a .gitattributes file to the repository to establish default behavior for various file types.<br />
* Utilize github workflows to set up cross platform CI using github's infrastructure. Some preliminary testing has been done in throw-away repositories, and once a working setup has been identified we will enable it in the main repository.<br />
* Set up a recommended user git config that will establish some semi-standard convenience aliases - in particular, for working with the historical information encoded in the git notes.<br />
<br />
We need to investigate available hooks in git for enforcing standards, procedures, etc for pull requests and commits.</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11699
Github Migration
2020-07-13T12:42:02Z
<p>Starseeker: </p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.<br />
* Ensure any testing infrastructure is updated to connect to the new git repository rather than the (now static) SVN repository.<br />
<br />
== Secondary Information ==<br />
<br />
Sourceforge also stores user reported issues, patches, and other secondary data we would like to migrate. This migration has been less thoroughly explored, but it appears https://github.com/cmungall/gosf2github may be a good starting point.<br />
<br />
== In-Repository Updates ==<br />
<br />
Once the primary VCS migration is complete, there are a number of features and instruction files in BRL-CAD itself that will need to be updated to reflect the new location and tools. In particular:<br />
<br />
* README, INSTALL and HACKING - some of the HACKING procedures may need to be updated to reflect github's workflow.<br />
* The distcheck repository check target has some awareness of subversion in its verification steps. Preliminary work has been done to shift this logic to use Git - that work must be finalized and tested.<br />
* Once the VCS conversion is complete, remove the misc/repoconv directory - it will no longer be needed and the information it encodes will be preserved in the VCS history itself.</div>
Starseeker
https://brlcad.org/w/index.php?title=Github_Migration&diff=11698
Github Migration
2020-07-13T12:34:04Z
<p>Starseeker: Start writing down github migration steps</p>
<hr />
<div>== Migrating from Sourceforge to Github ==<br />
<br />
As BRL-CAD migrates its hosting platform from Sourceforge to Github, there are a number of complex steps that will need to play out.<br />
<br />
Currently we are in the preliminary stages, exploring available tools, conversion techniques and identifying the necessary steps. Once we are ready, a series of events will occur in succession to finalize the move. This page is intended to identify and organize those steps so the migration can proceed in an orderly manner.<br />
<br />
== Version Control History ==<br />
<br />
The most difficult and important of the conversion steps is the migration of BRL-CAD's version control based source code history from Subversion to Git. The process as it is finalizing (documented in detail in the BRL-CAD repository itself in the misc/repoconv sub-directory) will take a number of weeks to run, and will proceed roughly as follows:<br />
<br />
* Finalize the email addresses and names used to map Subversion accounts to Github accounts. (Once the final conversion begins, these user identities are "locked in" to the git history and cannot easily be changed - they must be fully ready before the process begins.)<br />
* Perform the initial Subversion -> Git process as outlined in misc/repoconv. (Est. 2-3 weeks to complete, once begun.)<br />
* Lock the Sourceforge Subversion repository into read-only mode.<br />
* Run a final update to pick up any commits made during the initial conversion process.<br />
* Run the svn-fast-export process to generate the secondary git repositories for projects (geomcore, rt^3, etc.) other than the primary BRL-CAD repo in the Subversion repository on sourceforge.net/p/brlcad. (This process is much faster than the main conversion, and shouldn't take more than a few hours.)<br />
* Upload all of the repositories to the github BRL-CAD project.<br />
** See the NOTES file in misc/repoconv for more details on this process.<br />
** In particular, the git notes with SVN repository conversion information will need a separate upload step. <br />
** Once "live", we can no longer alter the git history without potential impact to other developers - a git history rewrite (which any change will require) is guaranteed (unlike SVN) to be user visible and disruptive.<br />
* Test checkout from the new repositories on github.<br />
* Announce the change on the email list and update the website links.</div>
Starseeker
https://brlcad.org/w/index.php?title=Mesh_library_cleanup&diff=9859
Mesh library cleanup
2017-02-09T14:05:54Z
<p>Starseeker: libnmg was pulled out of librt - work needed now is docs, cleanup, robustness testing and algorithm improvements.</p>
<hr />
<div>BRL-CAD has an extensive n-manifold (NMG) polygonal mesh library called LIBNMG. N-manifold is mostly a fancy way of saying it provides an arbitrary boundary representation structure. This library is used for a wide range of tasks but is commonly interacted with during geometry export to polygonal formats (e.g., g-stl). The library goes to extensive lengths to ensure that geometry is "correct" at every step along the way, that solidity is preserved, that topology is preserved, and more. All of that work means that the library can be slow and over time has become even more "unrobust" to real geometry. There are lots of O(n^2) and O(n^3) algorithms with dynamic memory allocations that make performance suboptimal. The source code is the documentation. It's one of the best at what it does, but far from good enough.<br />
<br />
This project entails basic source code cleanup, validation, and verification. The first step is documentation cleanup pulling all of the source code comments into the nmg.h public header (or sub-header thereof) to become familiarized with the API. Then begin testing the lowest-level functions to make sure they do exactly what they are supposed to do by creating API unit tests. Test-driven development is a must here.<br />
<br />
=References=<br />
<br />
* http://en.wikipedia.org/wiki/Topological_manifold<br />
* http://cubit.sandia.gov/help-version8.1/Chapter_1/Features/Non-Manifold_Topology.html<br />
* http://ftp.arl.army.mil/mike/papers/90nmg/<br />
* src/librt/primitives/nmg<br />
* include/nmg.h<br />
* include/raytrace.h<br />
<br />
For the problem of boolean operations on NMG structures, recent papers should be studied. Some examples:<br />
<br />
* Fast, Exact, Linear Booleans: http://www.gilbertbernstein.com/resources/booleans2009.pdf<br />
* Exact and Efficient Booleans for Polyhedra: http://liris.cnrs.fr/Documents/Liris-4883.pdf<br />
* Fast and robust Booleans on polyhedra: http://www.sciencedirect.com/science/article/pii/S0010448512002412<br />
* Exact, robust, and efficient regularized Booleans on general 3D meshes: http://www.sciencedirect.com/science/article/pii/S0898122115003028<br />
* Fast, Exact and Robust Set Operations on Polyhedrons Using Localized Constructive Solid Geometry Trees: http://wwwen.zte.com.cn/endata/magazine/ztecommunications/2015/3/articles/201510/P020151021364587175341.pdf<br />
<br />
= Requirements=<br />
<br />
* Ability to read and refactor complex C<br />
* Ability to write API unit tests</div>
Starseeker
https://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas&diff=9858
Google Summer of Code/Project Ideas
2017-02-09T13:42:38Z
<p>Starseeker: /* Infrastructure */</p>
<hr />
<div>If you want to work on '''computer-aided design (CAD), geometry, or graphics''', you've come to the right place! Help us improve open source CAD.<br />
<br />
Well prepared proposals from capable students have an ''outstanding'' chance of getting selected. We consider proposals for all skill levels ranging from simple to crazy hard and everything in between. [https://lists.sourceforge.net/lists/listinfo/brlcad-devel Introduce yourself], and we'll help you plan one right for you.<br />
<br />
Remember that project descriptions are just ''initial ideas''. You must expand with [[Summer_of_Code/Application_Guidelines|considerably more detail]]. Change the goals to fit your experience and interests. See our '''[[Summer_of_Code/Checklist|checklist]]''' to get started.<br />
<br />
This year, BRL-CAD is coordinating with five other communities that will get 1-2 students each to help bridge our work and encourage collaboration. Projects that help exchange data or share code are desired!<br />
<br />
{|-<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#BRL-CAD_Projects http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png]<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#OpenSCAD_Projects http://www.openscad.org/assets/img/logo.png]<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#LibreCAD_Projects http://librecad.org/files/live/sites/lc/files/WebImages/LogoLibrecad_logo.png]<br />
|-<br />
|align="center"|'''BRL-CAD''': 3D solid modeling, geometry processing, and robust high-performance ray tracing. Help us make a better CAD system. <br />
|align="center"|'''OpenSCAD''': rich syntax, programmable geometry. Lots of possibilities to make it interoperate with BRL-CAD and LibreCAD.<br />
|align="center"|'''LibreCAD''': specializes in 2D CAD modeling, drafting, drawings. Help build a bridge to BRL-CAD or add STEP support.<br />
|-<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#STEPcode_Projects http://stepcode.org/STEPcode_logo_gears_light.png]<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#LinuxCNC_Projects http://wiki.linuxcnc.org/chips.gif]<br />
|align="center" width="15%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#FreeCAD_Projects http://www.freecadweb.org/images/logo.png]<br />
|-<br />
|align="center"|'''STEPcode''': file format on steroids, STEP is a complex standard for geometry used by nearly every pro CAD system.<br />
|align="center"|'''LinuxCNC''': software for computer control of machine tools such as milling machines and lathes, 3d printers, robot arms, and more.<br />
|align="center"|'''FreeCAD''': parametric 3D modelling with strong Python interface and general engineering functionality like FEM and CAM <br />
|}<br />
<br />
'''Project titles link to a page with more details.'''<br />
<br />
= BRL-CAD Projects =<br />
== High Priority Topics ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[Convert MGED from Tk to Qt]]:''' Transition BRL-CAD's graphical applications from the Tk toolkit to the Qt toolkit. <br />
|align=center|C/C++/Tcl/Qt<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Yapp]]<br />
|-<br />
|width=62%|'''[[Annotations]]:''' Implement support for 2D annotations, labels that can be added to geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
== Web Development ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Benchmark Performance Database]]:''' BRL-CAD's Benchmark has been used for two decades to compare performance across configurations. Build a database website. <br />
|Depends (likely PHP or Python)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Synchronize Wiki with Docbook]]:''' We use Docbook for most of our user documentation but find editing a wiki page much easier to use. Set up a system so the two are always in sync.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Interface]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the front-end usability.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Back-end]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the back-end infrastructure.<br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Mediawiki 3D Geometry Extension]]:''' Write an extension for Mediawiki that will visualize our .g files. Maybe leverage LLVM C->Javascript translation. <br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Materials Database]]:''' Create a Materials Database web site for collecting, managing, and providing programmatic interfaces to material properties.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
== Geometry ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[NURBS Editing Support]]:''' BRL-CAD doesn't currently have support for editing NURBS primitives. Fix that.<br />
|align=center|C/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Overlap tool]]:''' Resolving geometric interferences (aka overlaps) is a common geometry editing activity. Design an awesome GUI for resolving conflicts.<br />
|align=center|Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison, Greenwald]]<br />
|-<br />
|align=left width=62%|'''[[Vector Drawings from NURBS]]:''' Huge impact here if you can update one or more of our raytracers to provide vector output instead of raster. Perhaps render directly to PDF or SVG.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[NMG Editing]]:''' Our structured polygonal mesh geometry (N-Manifold Geometry = NMG) is a common export format, but our NMG edit support is non-existent. We need something.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Visualizing Constructive Solid Geometry (CSG)]]:''' CSG forms a directed acyclic graph. Tree view widgets show a simple hierarchical representation, but we need something better.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Plate Mode NURBS raytracing]]:''' Imported NURBS geometry often does NOT enclose space (i.e., not solid), so add support for specifying an implicit thickness.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[STEP exporter]]:''' We have an importer, we need a comprehensive exporter with support for implicit CSG, NURBS, or polygonal mesh geometry.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[STEP importer improvements]]:''' We have an importer, but it's preliminary. Add support for importing hierarchy information, polygonal geometry, and implicit geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|- <br />
|width=62%|'''[[STEP AP 242 Parser]]:''' We already parse a subset of AP203, but the new kid on the block is AP242. Make AP242 work with BRL-CAD's step-g importer. <br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie, Yapp, Kamga]]<br />
|-<br />
|width=62%|'''[[Convert BoT to Pipe]]:''' Command line interface to convert facetted fluid/electrical line geometry into BRL-CAD native pipe solids.<br />
|align=center|C/C++/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[IGES import improvements]]:''' We have extensive support for the International Geometry Exchange Standard (IGES) with our g-iges and iges-g converters, but they need updating.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Geometry Conversion Library]]:''' Probably our biggest open source asset is our extensive collection of importers and exporters. Turn them all into a universal conversion library. <br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[COLLADA Importer]]:''' Create an importer for the COLLADA file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[X3D Importer]]:''' Create an importer for the X3D file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Kamga]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Importer]]:''' Create an importer for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Exporter]]:''' Create an exporter for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Python Geometry]]:''' Wrap BRL-CAD's primitives in Python, make it easier to script geometry creation. <br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Perl Geometry]]:''' Wrap BRL-CAD's primitives in Perl, make it easier to script geometry creation. <br />
|align=center|Perl<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|}<br />
<br />
== Performance & Quality ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[OpenCL GPGPU Raytracing]]:''' We have about two dozen primitives that need to have a ray-object intersection function converted from C to OpenCL.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Coherent Raytracing]]:''' Our current raytrace pipeline dispatches and processes one ray at a time. Send bundles and convert the pipeline into phases. <br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Booleans]]:''' We have NURBS surface-surface intersections working. Now we're using them to create evaluated forms of our CSG geometry. Make it more robust and faster.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Optimization and Cleanup]]:''' We have a fantastic implementation of NURBS evaluation but haven't gone back to clean up or speed it up. Make it pretty and fast.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Fix Bugs]]:''' We take pride in our breadth of functionality and time-tested stability. We still have bugs. Identify some and fix them!<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|-<br />
|width=62%|'''[[NMG Raytracing Performance Improvement]]:''' BRL-CAD's structured mesh geometry (N-Manifold Geometry = NMG) needs some time in a profiler. Malloc during raytracing is bad.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Mesh library cleanup]]:''' BRL-CAD has an extensive n-manifold polygonal mesh library that needs some refactoring, testing, and optimization rework.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Space Partitioning for Tessellation]]:''' Technically an optimization task, make our geometry converters run an order of magnitude faster by using spatial partitioning during tessellation.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Code Reduction]]:''' BRL-CAD is more than 1M lines of code. Approximately 10% of that is duplication. Help reduce that percentage.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[Header Restructuring]]:''' BRL-CAD has about two dozen libraries with a single header declaring the entire public API. Break up those monster headers into modular sub-headers.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[Faster Overlap Detection]]:''' BRL-CAD has a 'gqa' tool that detects overlaps. Implement a replacement using a better approach.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|}<br />
<br />
== Infrastructure ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[New Cross-Platform 3D Display Manager]]:''' BRL-CAD uses '''''display managers''''' for visualizing 3D geometry in a window. We want one that uses a cross-platform toolkit such as Qt + OGRE.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[New Cross-Platform 2D Framebuffer]]:''' BRL-CAD uses '''''framebuffers''''' to display 2D imagery. The merits of having a single interface for most platforms is self-evident.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Advanced Sketch Primitive Editor]]:''' BRL-CAD has a 2D sketch primitive, but our handling of editing sketches doesn't incorporate parametric constraints. There are potentially applicable codes in the open source community we can leverage for this, or we can roll our own solution.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometric Constraint Solver]]:''' Our LIBPC parametric constraint library is the work-in-progress foundation of being able to validate and describe geometry relationships.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[MGED to Archer Command Migration]]:''' Our next-generation editor (Archer) needs to have the same (700+) commands that are in MGED. Help make our next CAD interface awesome.<br />
|align=center|C and Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Kamga]]<br />
|-<br />
|width=62%|'''[[General Tree Walker]]:''' We have a half dozen or more functions that will traverse a geometry hierarchy in different ways. There only needs to be one.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Consolidate image processing]]:''' We have 100+ image processing tools that independently read and write file data. Needs much reuse love.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Daga]]<br />
|-<br />
|width=62%|'''[[GED Transactions]]:''' Migrating functionality from our MGED geometry editor into our LIBGED library provided excellent code reuse, but now we need transactions so that actions can be undone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Daga]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Daga]]<br />
|-<br />
|width=62%|'''[[Geometry Selection Functionality]]:''' Implement a new selection command that lets you temporarily group objects based on spatial, attribute, or geometric properties.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Astronomical units]]:''' We already go "big", but accurately modeling at a galactic scale redefines that notion...<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald, Daga]]<br />
|-<br />
|width=62%|'''[[Object-oriented interfaces|Object-oriented C++ Geometry API]]:''' Extend our C++ library which provides a simple interface to BRL-CAD's core functionality. Kickstart start a new geometry kernel.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Kamga]]<br />
|-<br />
|width=62%|'''[[Point Clouds]]:''' BRL-CAD has a basic point cloud primitive. Beef it up, make it faster, maybe integrate with the Point Cloud Library (PCL) for evaluation.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder, Kamga]]<br />
|-<br />
|width=62%|'''[[Annotations]]:''' Implement support for 2D annotations, labels that can be added to geometry.<br />
|align=center|Perl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|-<br />
|width=62%|'''[[Python Bindings]]:''' With or without SWIG, wrap BRL-CAD's command library API so you can issue our creation and editing commands from Python.<br />
|align=center|Python<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Perl Bindings]]:''' With SWIG, wrap BRL-CAD's ray-tracing library API so you can issue calls to librt ray-tracing functions from Perl.<br />
|align=center|Perl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder, Daga]]<br />
|}<br />
<br />
== Rendering & Scientific Analysis ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Shader Enhancements]]:''' We have a functioning custom shader system in BRL-CAD, but there are now folks that specialize and there's lot of room for improvements.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Material and Shader Objects]]:''' This one is a biggie but easy. Implement new object entities for describing shaders and material properties, use them during ray tracing.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[GUI Integration of Analysis Tools]]:''' There are a ''lot'' of visualization tools in BRL-CAD, but most aren't integrated with the GUI. Visualizing directly within the GUI would improve usability.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Generalized abstracted spacial partitioning capability]]:''' Need more be said? If you're familiar with BSPs, KD trees, and grid structures, then this one is for you.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[High Dynamic Range Support]]:''' We don't have displays supporting this yet, but that's never stopped us before. Implement support for images with more than 8-bits per channel.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp]]<br />
|-<br />
|width=62%|'''[[Analysis Library]]:''' There are various tools in BRL-CAD for calculating weights, moments of inertia, and more. They're stand-alone applications. Turn them into a library.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Celestial mechanics particle system]]:''' Simulate solar systems and galaxies.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[Non-vacuum gravity simulator]]:''' Simulate falling to earth.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Polarization]]:''' We already do multispectral ray tracing, but don't simulate polarization effects. Implement ray splitting and filtering.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Density functions]]:''' Accurately represent everything from atmosphere to bone. Implement support for parametric density functions for homogenous materials.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Morrison]]<br />
|-<br />
|width=62%|'''[[Bending light]]:''' Think gravity wells and satellite cameras.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Appleseed renderer integration]]:''' Appleseed is rendering infrastructure used by the film industry to make pretty pictures. Make it shoot rays at our native geometry with our ray trace library.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
== <An Idea of Your Own> ==<br />
<br />
Do you have an idea of your own? Maybe you need [http://brlcad.org/~sean/ideas.html more ideas] to inspire you? We're very open to areas of academic research, industry applications, and ideas that get you hooked on open source CAD development.<br />
<br />
Requirements:<br />
<br />
* Passion for the task being suggested<br />
<br />
= OpenSCAD Projects =<br />
<br />
[http://openscad.org OpenSCAD] is a parametric solid 3D modeling tool which uses a Domain Specific Language to specify designs as plain text. It is specifically designed with 3D printing in mind.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages/Tools<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Improve-DXF-import-and-export Improve DXF Import and Export]:''' Look into using an external library for DXF import (and export?).<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#openscad-standard-library OpenSCAD Standard Library]:''' Create a standard user-space OpenSCAD library.<br />
|align=center|OpenSCAD<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Improve-OpenGL-rendering OpenGL framework]:''' Rewrite the OpenGL rendering code to use a rendering framework. Focus on compatibility with OpenGL ES2 and rendering performance.<br />
|align=center|C++ OpenGL<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#persistant-caching Persistent Caching]:''' Implement a disk-based version of the internal memory caches<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Multi-threaded-geometry-rendering Multi-threaded Geometry Evaluation]:''' Implement multi-threaded evaluation of geometry.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Survey-of-CSG-algorithms Survey of CSG algorithms]:''' Review existing research, evaluate and prototype algorithms.<br />
|align=center|C++<br />
|align=center|MEDIUM-HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#issue-handling Issue Handling]:''' Day-to day issue and community management, fix incoming and existin issues. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#test-framework-improvements Test Framework Improvements]:''' Improve tests and test framework. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#svg-import SVG Import]:''' Improve/finalize SVG import.<br />
|align=center|C++, SVG<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#larger-tasks-for-particularly-experienced-people Larger tasks for particularly experienced people]:''' Various harder tasks which are not fully specified and requires significant effort to design and implement.<br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Torsten]]<br />
|}<br />
<br />
The OpenSCAD team is also open to new ideas. Please [http://www.openscad.org/community.html get in touch] to discuss your ideas and convince a mentor to back it.<br />
<br />
= LibreCAD Projects =<br />
<br />
LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. Support and documentation is free from our large, dedicated community of users, contributors and developers.<br />
Please refer to [http://wiki.librecad.org/index.php/GSoC_2015#LibreCAD_Projects_Ideas LibreCAD GSoC 2015 ideas] for more detailed description.<br />
<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[LibreCAD 3 UI]]:''' Add GUI support for drawing and editing actions to start exposing it to end users.<br />
|align=center|C++,Math<br />
|align=center|MEDIUM TO HIGH<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve Spline/Bézier Support]]''' <br />
|align=center|C++,Math<br />
|align=center|MEDIUM TO HIGH<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve contour topology support]]:''' Hatching and area enclosed in a contour<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve precision and robustness of equation solvers]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Conic curve support]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[SmartSnap]]:''' Adding and improve snap features for drawing<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]], [[Google_Summer_of_Code/Project_Ideas#Mentors|ries]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Support for multiple units upon data entry]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|LordOfBikes]]<br />
|-<br />
|}<br />
<br />
= STEPcode Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[STEP Coverage Test]]:''' Write a program that links against STEPcode and generates a STEP output instantiating every entity for a given schema. Goal is a comprehensive program and data file for testing STEP import/export.<br />
|ANY (C/C++, Python, Java, Perl, ...)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Incremental Loading]]:''' Basically take a work-in-progress to the next level. Modify the STEP parser to only read what it needs when it needs it, test, clean up, profile, and optimize.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Minimal Examples]]:''' Create minimal examples for various schemas - such as AP214 or AP242 - in the style of [http://github.com/stepcode/stepcode/blob/master/example/ap203min/ap203min.cpp ap203min]<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Multiple Protocol Parsing]]:''' Currently creates a parser that works with a specific application protocol (e.g., AP203, AP214). Make it work with multiple simultaneously. <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Source Code Documentation]]:''' We already use doxygen, but could do much better. Improve code documentation and utilize additional doxygen features such as topic pages. Add a 'make doxygen' target to invoke doxygen.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP EXPRESS Documentation]]:''' Write 'exp2html', similar to exp2py or exp2cxx (python and C++ generators) but outputs graphs and hyperlinked documentation with JavaScript search. Output will include EXPRESS comments (this requires modifying the parser).<br />
|align=center|C/C++, JavaScript<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Viewer]]:''' STEP is a common CAD file format supported by just about every major CAD system. Given we have an importer and an interface for displaying geometry, a stand-alone STEP file viewer has some great potential.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Code Refactoring]]:''' Split large files and functions, add unit tests, move contents of LISTdo loops into separate functions.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Thread Safety and Performance]]:''' Modify the libraries to improve thread safety, increase performance using hotspot analysis<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|}<br />
<br />
= LinuxCNC Projects =<br />
<br />
[http://linuxcnc.org LinuxCNC] is software for computer control of machine tools such as milling machines and lathes, 3d printers, robot arms, and more.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''StepConf improvements ([https://sourceforge.net/p/emc/feature-requests/60/], [https://sourceforge.net/p/emc/feature-requests/58/], [https://sourceforge.net/p/emc/feature-requests/57/]):''' [http://linuxcnc.org/docs/html/config/stepconf.html StepConf] is a gui that helps people configure LinuxCNC for many kinds of common machines. It has some missing features that should be easy to add.<br />
|Python<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|- <br />
|width=62%|'''Add flow control to halstreamer ([https://sourceforge.net/p/emc/feature-requests/125/]):''' The userspace program [http://linuxcnc.org/docs/html/man/man1/halstreamer.1.html halstreamer] and its realtime companion [http://linuxcnc.org/docs/html/man/man9/streamer.9.html streamer] make up a utility for moving arbitrary data into the realtime core of LinuxCNC. It currently streams data at maximum rate, and it would be good to add flow control.<br />
|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|-<br />
|width=62%|'''New realtime kernels ([http://thread.gmane.org/gmane.linux.distributions.emc.user/56252]):''' LinuxCNC supports two realtime kernels: [https://www.rtai.org/ RTAI] and [https://rt.wiki.kernel.org/ Preempt-RT]. We target a variety of Debian-based distributions, and we provide debian packages of the realtime kernels we need. The goal of this project is to expand [https://github.com/SebKuzminsky/linux-rtai-build existing packaging infrastructure] to build newer versions of RTAI and Preempt-RT, for [https://www.debian.org/releases/jessie/ Debian Jessie] and [http://releases.ubuntu.com/14.04/ Ubuntu Trusty].<br />
|Shell, make, debian packaging tools<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|-<br />
|width=62%|'''Add peck to rigid tapping ([https://sourceforge.net/p/emc/feature-requests/78/]):''' Given adequate feedback from the machine, LinuxCNC supports [https://www.youtube.com/watch?v=Ja2LbAAJmls rigid tapping] via [http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G33_1-Rigid-Tapping G33.1] G-code. Some kinds of taps and materials benefit from "peck tapping", where the tap is backed out from the work piece periodically. Peck tapping currently has to be done "by hand", by programming one G33.1 move for each peck. This task is to add support for a "peck depth" parameter to the G33.1 command, analogous to peck drilling in [http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G83-Drilling-Peck G83].<br />
|C, C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|}<br />
<br />
= FreeCAD Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
! Language<br />
! Difficulty<br />
! Contact<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=Advance_FreeCAD_test_system Advance FreeCAD test system ]''': Create a framework for result file based comparisons and workbench specific comparators. Also creation of test cases should be simplified by a GUI or wizard.<br />
|align=center|Python/C++<br />
|align=center|Medium<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=Topological_Naming_Project Topological Naming Project]''': Theory evaluation of possible algorithms in respect to FreeCADs internal architecture and implementation of a prototype to show the general applicability of the choosen approach.<br />
|align=center|C++<br />
|align=center|Hard<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=Direct_modeling_tools Direct modeling tools]''': Create a new layer of tools and objects, that work on top of existing Part-based 3D objects, that allow a user to graphically modify their geometry.<br />
|align=center|Python/C++<br />
|align=center|Medium<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=68 Yorik]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=FEM_Post_Processing_based_on_VTK FEM Post Processing based on VTK]''': Advance the currently prototyped FEM post processing based on the vtk library with more functionality and ensure a better itnegration into the workbench<br />
|align=center|C++<br />
|align=center|Medium<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=Multithreading_in_document_evaluation_and_Part_workbench Multithreading in document evaluation and Part workbench]''': Multithread the graph based document object evaluation with intels tbb library and integrate OpenCascades multhithreading<br />
|align=center|C++<br />
|align=center|Medium<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=Extend_Part_workbench_python_API Extend Part workbench python API ]''': Expose 2D geometry API from opencascade and extend the 3D geometry API with then possible new functions <br />
|align=center|C++, Python<br />
|align=center|Easy<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[General measure framework]''': Build a unified measure framework working with different workbenches and objects for advanced data collection<br />
|align=center|C++, Python<br />
|align=center|Medium<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|-<br />
|width=62%|'''[http://www.freecadweb.org/wiki/index.php?title=IPython_notebook_integration IPython notebook integration]''': Create a way to export the open inventor scenegraph as a JavaScript file and add functions for seamless interaction with the IPython display system<br />
|align=center|C++, JavaScript, Python<br />
|align=center|Easy<br />
|align=center|[http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686 Ickby]<br />
|}<br />
<br />
= Mentors =<br />
<br />
BRL-CAD operates under group mentorship. That means you can contact anyone, not just the person assigned to you, for assistance. The mailing list and IRC channel are the preferred communication methods.<br />
<br />
* Christopher Sean Morrison<br />
** brlcad on irc.freenode.net<br />
** Org admin, BRL-CAD open source project lead<br />
<br />
* Erik Greenwald<br />
** ``Erik on irc.freenode.net<br />
** Org admin, BRL-CAD core dev<br />
<br />
* Cliff Yapp<br />
** starseeker on irc.freenode.net<br />
** BRL-CAD Mentor, core dev<br />
<br />
* Daniel Rossberg<br />
** d_rossberg on irc.freenode.net<br />
** BRL-CAD Mentor, core dev, math expert<br />
<br />
* H.S. Rai<br />
** hsrai on irc.freenode.net<br />
** BRL-CAD Mentor, math expert<br />
<br />
* Tom Browder<br />
** BRL-CAD Mentor, analysis expert<br />
<br />
* Bryan Bishop<br />
** BRL-CAD Mentor, python guru<br />
<br />
* Isaac Kamga<br />
** Izakey on irc.freenode.net<br />
** BRL-CAD Mentor, C/C++ Programmer<br />
<br />
* Mohit Daga<br />
** zero_level irc.freenode.net<br />
** BRL-CAD Mentor, Computer Science Engineer<br />
<br />
* Mark Pictor<br />
** mpictor on irc.freenode.net<br />
** STEPcode Mentor<br />
<br />
* Charlie Stirk<br />
** cstirk<br />
** STEPcode Mentor<br />
<br />
* Marius Kintel<br />
** kintel on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Torsten Paul<br />
** teepee on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Ries van Twisk<br />
** ries on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Armin Stebich<br />
** LordOfBikes on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Sebastian Kuzminsky<br />
** seb_kuzminsky on irc.freenode.net<br />
** LinuxCNC Mentor</div>
Starseeker
https://brlcad.org/w/index.php?title=Convert_MGED_from_Tk_to_Qt&diff=9857
Convert MGED from Tk to Qt
2017-02-09T13:40:54Z
<p>Starseeker: Go with Qt 5.6 - LTS</p>
<hr />
<div>BRL-CAD's graphical applications (MGED and Archer in particular) make use of the Tcl/Tk toolkit to describe their interfaces. Tk has some limitations when it comes to complex cross-platform application development, and we are looking to migrate our graphical interface codes from Tk to the Qt toolkit.<br />
<br />
There are two major "directions" that can be attempted:<br />
<br />
* Re-create MGED as a Qt application. MGED is our current "production" geometry editing and viewing interface.<br />
<br />
* Re-create (some of) Archer as a Qt application. Archer is our "next-generation" MGED application. <br />
<br />
Most likely recreating one of these interfaces in its entirity is well beyond the scope of GSoC (although we certainly won't complain if you manage it!) A better strategy is to identify and tackle one aspect of the problem with an eye towards creating a Qt widget that can be reused in subsequent applications. If you complete that task, you can build from there.<br />
<br />
Easily the most important "missing" component at this point is the 3D interactive viewing widget - the centeral widget in Archer's interface and the "3D display" window in MGED. A good starting point would be to create a "Qt viewer widget" that can load and display a libdm 3D context. You will need to handle Qt's OpenGL widget and its interactions with libdm/libfb, set up key bindings using our existing Tk bindings as a guide, and ensure that multile views can work successfully (the quad view mode).<br />
<br />
Another major and important piece of the interface is the tree widget (Archer's is the example to study, and a read-only version has been implemented in the experimental qged code - the challenge will be to first get it updating in response to geometry changes in the database. After that there are any number of additional features needed...)<br />
<br />
We're also constructing a custom CAD terminal widget, tailored to the needs of our CAD system. We have a basic implementation in our experimental qged GUI, but it needs work - text selection doesn't span command outputs, we need a way to auto-hide long outputs that aren't the current output in the history and allow them to expand/contract via some user mouse interaction, we need an "in-process" graphic for commands that have launched but haven't yet completed, ideally with a way to abort them as well (this will require some delving into QThreads and launching libged commands in separate threads, as well as a limited control-the-view terminal mode while some potentially database altering command is running.)<br />
<br />
Anyone wanting to tackle this project should have a good familiarity with things like the Qt event and signals/slots systems as well as the generic widget systems (most of the pre-packaged Qt widgets aren't going to be quite what we need, which usually means creating custom widets with the more general parent classes.) See the qged sources below for an idea of the approach.<br />
<br />
Proposals here should be detailed and demonstrate a firm grasp of the issues. Qt 5.6 or higher should be used (that is the assumption made in the existing code, and if you require a newer Qt for some feature or issue that should be fine - supporting older Qt releases is not something we're going to spend effort on at this early stage.<br />
<br />
<br />
=References=<br />
<br />
* http://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/qtged/src/qged/<br />
* http://qt-project.org/<br />
<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++/Qt<br />
* Sufficient familiarity with Tcl/Tk to be able to read and understand the intent of the code (key bindings, for example.)</div>
Starseeker
https://brlcad.org/w/index.php?title=Convert_MGED_from_Tk_to_Qt&diff=7910
Convert MGED from Tk to Qt
2015-03-06T02:29:57Z
<p>Starseeker: Tweak</p>
<hr />
<div>BRL-CAD's graphical applications (MGED and Archer in particular) make use of the Tcl/Tk toolkit to describe their interfaces. Tk has some limitations when it comes to complex cross-platform application development, and we are looking to migrate our graphical interface codes from Tk to the Qt toolkit.<br />
<br />
There are two major "directions" that can be attempted:<br />
<br />
* Re-create MGED as a Qt application. MGED is our current "production" geometry editing and viewing interface.<br />
<br />
* Re-create (some of) Archer as a Qt application. Archer is our "next-generation" MGED application. <br />
<br />
Most likely recreating one of these interfaces in its entirity is well beyond the scope of GSoC (although we certainly won't complain if you manage it!) A better strategy is to identify and tackle one aspect of the problem with an eye towards creating a Qt widget that can be reused in subsequent applications. If you complete that task, you can build from there.<br />
<br />
Easily the most important "missing" component at this point is the 3D interactive viewing widget - the centeral widget in Archer's interface and the "3D display" window in MGED. A good starting point would be to create a "Qt viewer widget" that can load and display a libdm 3D context. You will need to handle Qt's OpenGL widget and its interactions with libdm/libfb, set up key bindings using our existing Tk bindings as a guide, and ensure that multile views can work successfully (the quad view mode).<br />
<br />
Another major and important piece of the interface is the tree widget (Archer's is the example to study, and a read-only version has been implemented in the experimental qged code - the challenge will be to first get it updating in response to geometry changes in the database. After that there are any number of additional features needed...)<br />
<br />
We're also constructing a custom CAD terminal widget, tailored to the needs of our CAD system. We have a basic implementation in our experimental qged GUI, but it needs work - text selection doesn't span command outputs, we need a way to auto-hide long outputs that aren't the current output in the history and allow them to expand/contract via some user mouse interaction, we need an "in-process" graphic for commands that have launched but haven't yet completed, ideally with a way to abort them as well (this will require some delving into QThreads and launching libged commands in separate threads, as well as a limited control-the-view terminal mode while some potentially database altering command is running.)<br />
<br />
Anyone wanting to tackle this project should have a good familiarity with things like the Qt event and signals/slots systems as well as the generic widget systems (most of the pre-packaged Qt widgets aren't going to be quite what we need, which usually means creating custom widets with the more general parent classes.) See the qged sources below for an idea of the approach.<br />
<br />
Proposals here should be detailed and demonstrate a firm grasp of the issues. Qt 5.3 or higher should be used (that is the assumption made in the existing code, and if you require a newer Qt for some feature or issue that should be fine - supporting older Qt releases is not something we're going to spend effort on at this early stage.<br />
<br />
<br />
=References=<br />
<br />
* http://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/qtged/src/qged/<br />
* http://qt-project.org/<br />
<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++/Qt<br />
* Sufficient familiarity with Tcl/Tk to be able to read and understand the intent of the code (key bindings, for example.)</div>
Starseeker
https://brlcad.org/w/index.php?title=Convert_MGED_from_Tk_to_Qt&diff=7909
Convert MGED from Tk to Qt
2015-03-06T00:48:06Z
<p>Starseeker: fix spelling</p>
<hr />
<div>BRL-CAD's graphical applications (MGED and Archer in particular) make use of the Tcl/Tk toolkit to describe their interfaces. Tk has some limitations when it comes to complex cross-platform application development, and we are looking to migrate our graphical interface codes from Tk to the Qt toolkit.<br />
<br />
There are two major "directions" that can be attempted:<br />
<br />
* Re-create MGED as a Qt application. MGED is our current "production" geometry editing and viewing interface.<br />
<br />
* Re-create (some of) Archer as a Qt application. Archer is our "next-generation" MGED application. <br />
<br />
Most likely recreating one of these interfaces in its entirity is well beyond the scope of GSoC (although we certainly won't complain if you manage it!) A better strategy is to identify and tackle one aspect of the problem with an eye towards creating a Qt widget that can be reused in subsequent applications. If you complete that task, you can build from there.<br />
<br />
Easily the most important "missing" component at this point is the 3D interactive viewing widget - the centeral widget in Archer's interface and the "3D display" window in MGED. A good starting point would be to create a "Qt viewer widget" that can load and display a libdm 3D context. You will need to handle Qt's OpenGL widget and its interactions with libdm/libfb, set up key bindings using our existing Tk bindings as a guide, and ensure that multile views can work successfully (the quad view mode).<br />
<br />
Another major and important piece of the interface is the tree widget (Archer's is the example to study, and a read-only version has been implemented in the experimental qged code - the challenge will be to first get it updating in response to geometry changes in the database. After that there are any number of additional features needed...)<br />
<br />
If you're less comfortable with graphical programming, we're also constructing a custom CAD terminal widget. We have a basic implementation in our experimental qged GUI, but it needs work - text selection doesn't span command outputs, we need a way to auto-hide long outputs that aren't the current output in the history and allow them to expand/contract via some user mouse interaction, we need an "in-process" graphic for commands that have launched but haven't yet completed, ideally with a way to abort them as well (this will require some delving into QThreads and launching libged commands in separate threads, as well as a limited control-the-view terminal mode while some potentially database altering command is running.)<br />
<br />
Anyone wanting to tackle this project should have a good familiarity with things like the Qt event and signals/slots systems as well as the generic widget systems (most of the pre-packaged Qt widgets aren't going to be quite what we need, which usually means creating custom widets with the more general parent classes.) See the qged sources below for an idea of the approach.<br />
<br />
Proposals here should be detailed and demonstrate a firm grasp of the issues. Qt 5.3 or higher should be used (that is the assumption made in the existing code, and if you require a newer Qt for some feature or issue that should be fine - supporting older Qt releases is not something we're going to spend effort on at this early stage.<br />
<br />
<br />
=References=<br />
<br />
* http://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/qtged/src/qged/<br />
* http://qt-project.org/<br />
<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++/Qt<br />
* Sufficient familiarity with Tcl/Tk to be able to read and understand the intent of the code (key bindings, for example.)</div>
Starseeker
https://brlcad.org/w/index.php?title=Convert_MGED_from_Tk_to_Qt&diff=7908
Convert MGED from Tk to Qt
2015-03-05T17:45:11Z
<p>Starseeker: Start fleshing out Tk->Qt - looking like it will probably be necessary to break this into several individual sub-tasks</p>
<hr />
<div>BRL-CAD's graphical applications (MGED and Archer in particular) make use of the Tcl/Tk toolkit to describe their interfaces. Tk has some limitations when it comes to complex cross-platform application development, and we are looking to migrate our graphical interface codes from Tk to the Qt toolkit.<br />
<br />
There are two major "directions" that can be attempted:<br />
<br />
* Re-create MGED as a Qt application. MGED is our current "production" geometry editing and viewing interface.<br />
<br />
* Re-create (some of) Archer as a Qt application. Archer is our "next-generation" MGED application. <br />
<br />
Most likely recreating one of these interfaces in its entirity is well beyond the scope of GSoC (although we certainly won't complain if you manage it!) A better strategy is to identify and tackle one aspect of the problem with an eye towards creating a Qt widget that can be reused in subsequent applications. If you complete that task, you can build from there.<br />
<br />
Easily the most important "missing" component at this point is the 3D interactive viewing widget - the centeral widget in Archer's interface and the "3D display" window in MGED. A good starting point would be to create a "Qt viwer widget" that can load and display a libdm 3D context. You will need to handle Qt's OpenGL widget and its interactions with libdm/libfb, set up key bindings using our existing Tk bindings as a guide, and ensure that multile views can work successfully (the quad view mode).<br />
<br />
Another major and important piece of the interface is the tree widget (Archer's is the example to study, and a read-only version has been implemented in the experimental qged code - the challenge will be to first get it updating in response to geometry changes in the database. After that there are any number of additional features needed...)<br />
<br />
If you're less comfortable with graphical programming, we're also constructing a custom CAD terminal widget. We have a basic implementation in our experimental qged GUI, but it needs work - text selection doesn't span command outputs, we need a way to auto-hide long outputs that aren't the current output in the history and allow them to expand/contract via some user mouse interaction, we need an "in-process" graphic for commands that have launched but haven't yet completed, ideally with a way to abort them as well (this will require some delving into QThreads and launching libged commands in separate threads, as well as a limited control-the-view terminal mode while some potentially database altering command is running.)<br />
<br />
Anyone wanting to tackle this project should have a good familiarity with things like the Qt event and signals/slots systems as well as the generic widget systems (most of the pre-packaged Qt widgets aren't going to be quite what we need, which usually means creating custom widets with the more general parent classes.) See the qged sources below for an idea of the approach.<br />
<br />
Proposals here should be detailed and demonstrate a firm grasp of the issues. Qt 5.3 or higher should be used (that is the assumption made in the existing code, and if you require a newer Qt for some feature or issue that should be fine - supporting older Qt releases is not something we're going to spend effort on at this early stage.<br />
<br />
<br />
=References=<br />
<br />
* http://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/qtged/src/qged/<br />
* http://qt-project.org/<br />
<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++/Qt<br />
* Sufficient familiarity with Tcl/Tk to be able to read and understand the intent of the code (key bindings, for example.)</div>
Starseeker
https://brlcad.org/w/index.php?title=Vector_Drawings_from_NURBS&diff=7907
Vector Drawings from NURBS
2015-03-05T17:07:39Z
<p>Starseeker: Tweak vector drawing task</p>
<hr />
<div>BRL-CAD can render hidden line drawings using rtedge, but the images it generates are raster images (consisting of pixels) rather than vector drawings (based on lines and curves). This is often suboptimal - line drawings are often edited and rescaled using vector based editing programs, and rtedge output must be manually traced in order to be used in those environments.<br />
<br />
Without explicit surface representations we cannot (currently) calculate vector forms of significant lines () directly from models using CSG without using raytracing. BRL-CAD can import and raytrace NURBS based models, and focusing on those as a starting point is a valid direction (the completion of the NURBS Boolean project would offer a path for CSG models via NURBS significant lines.) However, a possible alternative approach to directly deal with CSG models is to take the grid results of the rtedge raytrace and use the knowledge inherent in the ray about what object it's returning the pixel from to group pixels into groups based on objects. From there, the set of xy points in image space could be fitted with spline curves to produce vector representations.<br />
<br />
=References=<br />
<br />
* http://www.cs.princeton.edu/gfx/proj/sg08lines/<br />
<br />
*http://people.csail.mit.edu/sparis/publi/2009/siggraph/Eisemann_09_A_Visibility_Algorithm.pdf<br />
** For the ambitious, it might even be possible to go beyond lines and bound areas - this paper illustrates possibilities with layered 2D output from 3D models.<br />
<br />
* rtedge<br />
* src/rt/viewedge.c<br />
* src/rt/view.c<br />
* rt<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
* Solid mathematical background (algorithms for fitting curves to points)</div>
Starseeker
https://brlcad.org/w/index.php?title=Annotations&diff=7906
Annotations
2015-03-05T17:03:29Z
<p>Starseeker: Add some annotation info</p>
<hr />
<div>BRL-CAD currently has only very basic labels that are attached to CSG primitive parameters in 3D wireframe views. We need much more than that - modern systems typically show a variety of leader line and text graphics that illustrate information associated with 3D geometry. There are two aspects to this task - one is to create an "annotation primitive" in BRL-CAD that can hold this information, and the other is to display that information in the 3D view. The second depends on the first - "hacking in" a 3D text and leader-line display won't get us what we need.<br />
<br />
=References=<br />
<br />
* TODO starting at line 1400<br />
* http://en.wikipedia.org/wiki/Geometric_dimensioning_and_tolerancing<br />
* http://www.wikistep.org/index.php/Recommended_Practices_for_the_Representation_of_GD%26T<br />
* http://www.wikistep.org/index.php/Recommended_Practices_for_the_Presentation_of_Dimensions,_Dimensional_and_Geometric_Tolerances<br />
* http://www.wikistep.org/index.php/Associative_Text_in_3D_recommended_practices<br />
* http://www.wikistep.org/index.php/Model_viewing,_basic_drawing_structure_and_dimensions_recommended_practices<br />
* src/other/openNURBS/opennurbs_annotation*<br />
* include/rtgeom.h<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
* (For graphical components) familiarity with OpenGL + Text</div>
Starseeker
https://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas&diff=7905
Google Summer of Code/Project Ideas
2015-03-05T16:50:51Z
<p>Starseeker: /* BRL-CAD Projects */ - Start setting up a high priority section</p>
<hr />
<div>If you want to work on '''computer-aided design (CAD), geometry, or graphics''', you've come to the right place! Help us improve open source CAD.<br />
<br />
Well prepared proposals have an ''outstanding'' chance here. We consider proposals for all skill levels ranging from simple to crazy hard and everything in between. [https://lists.sourceforge.net/lists/listinfo/brlcad-devel Introduce yourself], and we'll help you plan one right for you.<br />
<br />
We plan on selecting 6-12 students to work on web projects, C/C++ projects, and more. This year, BRL-CAD is coordinating with three other communities that will get 1-2 students each to help bridge our work and encourage collaboration. Projects that help exchange data or share code are desired!<br />
<br />
{|align="center" width="62%"<br />
|align="center" |[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#BRL-CAD_Projects http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png]<br />
|colspan=2 align="center" |Under development for 30+ years, it's big, it's complicated, it's powerful. BRL-CAD will consider just about any project that relates to computer graphics or existing infrastructure.<br />
|}<br />
{|align="center" width="95%"<br />
|align="center" width="25%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#OpenSCAD_Projects http://www.openscad.org/assets/img/logo.png]<br />
|align="center" width="25%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#LibreCAD_Projects http://librecad.org/files/live/sites/lc/files/WebImages/LogoLibrecad_logo.png]<br />
|align="center" width="25%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#STEPcode_Projects http://stepcode.org/STEPcode_logo_sm.png]<br />
|align="center" width="25%"|[http://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas#LinuxCNC_Projects http://wiki.linuxcnc.org/chips.gif]<br />
|-<br />
|align="center"|'''OpenSCAD''': rich syntax, programmable geometry. Lots of possibilities to make it interoperate with BRL-CAD and LibreCAD.<br />
|align="center"|'''LibreCAD''': specializes in 2D CAD modeling, drafting, drawings. Help build a bridge to BRL-CAD or add STEP support.<br />
|align="center"|'''STEPcode''': file format on steroids, STEP is a complex standard for geometry used by nearly every pro CAD system.<br />
|align="center"|'''LinuxCNC''': software for computer control of machine tools such as milling machines and lathes, 3d printers, robot arms, and more.<br />
|}<br />
<br />
'''Unless there isn't a quality proposal, we intend to select at least one student for each of BRL-CAD's main categories as well as at least one student each for OpenSCAD, LibreCAD, and STEPcode.'''<br />
<br />
Remember that project descriptions are just ''initial ideas''. You must expand with [[Summer_of_Code/Application_Guidelines|considerably more detail]]. Change the goals to fit your experience and interests. See our '''[[Summer_of_Code/Checklist|checklist]]''' to get started.<br />
<br />
'''Project titles link to a page with more details.'''<br />
<br />
= BRL-CAD Projects =<br />
== High Priority Topics ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[Convert MGED from Tk to Qt]]:''' Transition BRL-CAD's graphical applications from the Tk toolkit to the Qt toolkit. <br />
|align=center|C/C++/Tcl/Qt<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Annotations]]:''' Implement support for 2D annotations, labels that can be added to geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
== Web Development ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Benchmark Performance Database]]:''' BRL-CAD's Benchmark has been used for two decades to compare performance across configurations. Build a database website. <br />
|Depends (likely PHP or Python)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Synchronize Wiki with Docbook]]:''' We use Docbook for most of our user documentation but find editing a wiki page much easier to use. Set up a system so the two are always in sync.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Interface]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the front-end usability.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Back-end]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the back-end infrastructure.<br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Mediawiki 3D Geometry Extension]]:''' Write an extension for Mediawiki that will visualize our .g files. Maybe leverage LLVM C->Javascript translation. <br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Materials Database]]:''' Create a Materials Database web site for collecting, managing, and providing programmatic interfaces to material properties.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
== Geometry ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[NURBS Editing Support]]:''' BRL-CAD doesn't currently have support for editing NURBS primitives. Fix that.<br />
|align=center|C/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Overlap tool]]:''' Resolving geometric interferences (aka overlaps) is a common geometry editing activity. Design an awesome GUI for resolving conflicts.<br />
|align=center|Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison, Greenwald]]<br />
|-<br />
|align=left width=62%|'''[[Vector Drawings from NURBS]]:''' Huge impact here if you can update one or more of our raytracers to provide vector output instead of raster. Perhaps render directly to PDF or SVG.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[NMG Editing]]:''' Our structured polygonal mesh geometry (N-Manifold Geometry = NMG) is a common export format, but our NMG edit support is non-existent. We need something.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Visualizing Constructive Solid Geometry (CSG)]]:''' CSG forms a directed acyclic graph. Tree view widgets show a simple hierarchical representation, but we need something better.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Plate Mode NURBS raytracing]]:''' Imported NURBS geometry often does NOT enclose space (i.e., not solid), so add support for specifying an implicit thickness.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[STEP exporter]]:''' We have an importer, we need a comprehensive exporter with support for implicit CSG, NURBS, or polygonal mesh geometry.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[STEP importer improvements]]:''' We have an importer, but it's preliminary. Add support for importing hierarchy information, polygonal geometry, and implicit geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|- <br />
|width=62%|'''[[STEP AP 242 Parser]]:''' We already parse a subset of AP203, but the new kid on the block is AP242. Make AP242 work with BRL-CAD's step-g importer. <br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie, Yapp, Kamga]]<br />
|-<br />
|width=62%|'''[[Convert BoT to Pipe]]:''' Command line interface to convert facetted fluid/electrical line geometry into BRL-CAD native pipe solids.<br />
|align=center|C/C++/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[IGES import improvements]]:''' We have extensive support for the International Geometry Exchange Standard (IGES) with our g-iges and iges-g converters, but they need updating.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Geometry Conversion Library]]:''' Probably our biggest open source asset is our extensive collection of importers and exporters. Turn them all into a universal conversion library. <br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Voxelize]] command:''' Convert geometry into voxel data sets by shooting a grid of rays. The finite element analysis and volumetric rendering folks will love you.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[COLLADA Importer]]:''' Create an importer for the COLLADA file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[X3D Importer]]:''' Create an importer for the X3D file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Kamga]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Importer]]:''' Create an importer for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Exporter]]:''' Create an exporter for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Python Geometry]]:''' Wrap BRL-CAD's primitives in Python, make it easier to script geometry creation. <br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Perl Geometry]]:''' Wrap BRL-CAD's primitives in Perl, make it easier to script geometry creation. <br />
|align=center|Perl<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|}<br />
<br />
== Performance & Quality ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[OpenCL GPGPU Raytracing]]:''' We have about two dozen primitives that need to have a ray-object intersection function converted from C to OpenCL.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[Coherent Raytracing]]:''' Our current raytrace pipeline dispatches and processes one ray at a time. Send bundles and convert the pipeline into phases. <br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Booleans]]:''' We have NURBS surface-surface intersections working. Now we're using them to create evaluated forms of our CSG geometry. Make it more robust and faster.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Optimization and Cleanup]]:''' We have a fantastic implementation of NURBS evaluation but haven't gone back to clean up or speed it up. Make it pretty and fast.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Fix Bugs]]:''' We take pride in our breadth of functionality and time-tested stability. We still have bugs. Identify some and fix them!<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|-<br />
|width=62%|'''[[NMG Raytracing Performance Improvement]]:''' BRL-CAD's structured mesh geometry (N-Manifold Geometry = NMG) needs some time in a profiler. Malloc during raytracing is bad.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Mesh library cleanup]]:''' BRL-CAD has an extensive n-manifold polygonal mesh library that needs some refactoring, testing, and optimization rework.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Space Partitioning for Tessellation]]:''' Technically an optimization task, make our geometry converters run an order of magnitude faster by using spatial partitioning during tessellation.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Code Reduction]]:''' BRL-CAD is more than 1M lines of code. Approximately 10% of that is duplication. Help reduce that percentage.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[Header Restructuring]]:''' BRL-CAD has about two dozen libraries with a single header declaring the entire public API. Break up those monster headers into modular sub-headers.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|}<br />
<br />
== Infrastructure ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[New Cross-Platform 3D Display Manager]]:''' BRL-CAD uses '''''display managers''''' for visualizing 3D geometry in a window. We want one that uses a cross-platform toolkit such as Qt + OGRE.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[New Cross-Platform 2D Framebuffer]]:''' BRL-CAD uses '''''framebuffers''''' to display 2D imagery. The merits of having a single interface for most platforms is self-evident.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Advanced Sketch Primitive Editor]]:''' BRL-CAD has a 2D sketch primitive, but our handling of editing sketches doesn't incorporate parametric constraints. There are potentially applicable codes in the open source community we can leverage for this, or we can roll our own solution.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometric Constraint Solver]]:''' Our LIBPC parametric constraint library is the work-in-progress foundation of being able to validate and describe geometry relationships.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[MGED to Archer Command Migration]]:''' Our next-generation editor (Archer) needs to have the same (700+) commands that are in MGED. Help make our next CAD interface awesome.<br />
|align=center|C and Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Kamga]]<br />
|-<br />
|width=62%|'''[[General Tree Walker]]:''' We have a half dozen or more functions that will traverse a geometry hierarchy in different ways. There only needs to be one.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Rework of libbu/libbn to not require Tcl]]:''' Tcl's '''''C API''''' is used throughout BRL-CAD providing great abstractions, but we want our basic utility and numeric libraries (LIBBU & LIBBN) to stand alone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp, Greenwald]]<br />
|-<br />
|width=62%|'''[[Consolidate image processing]]:''' We have 100+ image processing tools that independently read and write file data. Needs much reuse love.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Daga]]<br />
|-<br />
|width=62%|'''[[GED Transactions]]:''' Migrating functionality from our MGED geometry editor into our LIBGED library provided excellent code reuse, but now we need transactions so that actions can be undone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Daga]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Daga]]<br />
|-<br />
|width=62%|'''[[Geometry Selection Functionality]]:''' Implement a new selection command that lets you temporarily group objects based on spatial, attribute, or geometric properties.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Astronomical units]]:''' We already go "big", but accurately modeling at a galactic scale redefines that notion...<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald, Daga]]<br />
|-<br />
|width=62%|'''[[Object-oriented interfaces|Object-oriented C++ Geometry API]]:''' Extend our C++ library which provides a simple interface to BRL-CAD's core functionality. Kickstart start a new geometry kernel.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Kamga]]<br />
|-<br />
|width=62%|'''[[Point Clouds]]:''' BRL-CAD has a basic point cloud primitive. Beef it up, make it faster, maybe integrate with the Point Cloud Library (PCL) for evaluation.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder, Kamga]]<br />
|-<br />
|width=62%|'''[[Annotations]]:''' Implement support for 2D annotations, labels that can be added to geometry.<br />
|align=center|Perl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder]]<br />
|-<br />
|width=62%|'''[[Python Bindings]]:''' With or without SWIG, wrap BRL-CAD's command library API so you can issue our creation and editing commands from Python.<br />
|align=center|Python<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Perl Bindings]]:''' With SWIG, wrap BRL-CAD's ray-tracing library API so you can issue calls to librt ray-tracing functions from Perl.<br />
|align=center|Perl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Browder, Daga]]<br />
|}<br />
<br />
== Rendering & Scientific Analysis ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Shader Enhancements]]:''' We have a functioning custom shader system in BRL-CAD, but there are now folks that specialize and there's lot of room for improvements.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Material and Shader Objects]]:''' This one is a biggie but easy. Implement new object entities for describing shaders and material properties, use them during ray tracing.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[GUI Integration of Analysis Tools]]:''' There are a ''lot'' of visualization tools in BRL-CAD, but most aren't integrated with the GUI. Visualizing directly within the GUI would improve usability.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Generalized abstracted spacial partitioning capability]]:''' Need more be said? If you're familiar with BSPs, KD trees, and grid structures, then this one is for you.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[High Dynamic Range Support]]:''' We don't have displays supporting this yet, but that's never stopped us before. Implement support for images with more than 8-bits per channel.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp]]<br />
|-<br />
|width=62%|'''[[Analysis Library]]:''' There are various tools in BRL-CAD for calculating weights, moments of inertia, and more. They're stand-alone applications. Turn them into a library.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Celestial mechanics particle system]]:''' Simulate solar systems and galaxies.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[Non-vacuum gravity simulator]]:''' Simulate falling to earth.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Polarization]]:''' We already do multispectral ray tracing, but don't simulate polarization effects. Implement ray splitting and filtering.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Density functions]]:''' Accurately represent everything from atmosphere to bone. Implement support for parametric density functions for homogenous materials.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Morrison]]<br />
|-<br />
|width=62%|'''[[Bending light]]:''' Think gravity wells and satellite cameras.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Appleseed renderer integration]]:''' Appleseed is rendering infrastructure used by the film industry to make pretty pictures. Make it shoot rays at our native geometry with our ray trace library.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
== <An Idea of Your Own> ==<br />
<br />
Do you have an idea of your own? Maybe you need [http://brlcad.org/~sean/ideas.html more ideas] to inspire you? We're very open to areas of academic research, industry applications, and ideas that get you hooked on open source CAD development.<br />
<br />
Requirements:<br />
<br />
* Passion for the task being suggested<br />
<br />
= OpenSCAD Projects =<br />
<br />
[http://openscad.org OpenSCAD] is a parametric solid 3D modeling tool which uses a Domain Specific Language to specify designs as plain text. It is specifically designed with 3D printing in mind.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages/Tools<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Form-based-script-parameterization Form-based Customization]:''' Declaration and auto-generation of GUI for driving parametrization.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Torsten]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Improve-DXF-import-and-export Improve DXF Import and Export]:''' Look into using an external library for DXF import (and export?).<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius/Amir]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#openscad-standard-library OpenSCAD Standard Library]:''' Create a standard user-space OpenSCAD library.<br />
|align=center|OpenSCAD<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Improve-OpenGL-rendering OpenGL framework]:''' Rewrite the OpenGL rendering code to use a rendering framework. Focus on compatibility with OpenGL ES2 and rendering performance.<br />
|align=center|C++ OpenGL<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#persistant-caching Persistent Caching]:''' Implement a disk-based version of the internal memory caches<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Multi-threaded-geometry-rendering Multi-threaded Geometry Evaluation]:''' Implement multi-threaded evaluation of geometry.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Project%3A-Survey-of-CSG-algorithms Survey of CSG algorithms]:''' Review existing research, evaluate and prototype algorithms.<br />
|align=center|C++<br />
|align=center|MEDIUM-HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#issue-handling Issue Handling]:''' Day-to day issue and community management, fix incoming and existin issues. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#test-framework-improvements Test Framework Improvements]:''' Improve tests and test framework. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas-for-Development-Tasks#larger-tasks-for-particularly-experienced-people Larger tasks for particularly experienced people]:''' Various harder tasks which are not fully specified and requires significant effort to design and implement.<br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|}<br />
<br />
The OpenSCAD team is also open to new ideas. Please [http://www.openscad.org/community.html get in touch] to discuss your ideas and convince a mentor to back it.<br />
<br />
= LibreCAD Projects =<br />
<br />
LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. Support and documentation is free from our large, dedicated community of users, contributors and developers.<br />
Please refer to [http://wiki.librecad.org/index.php/GSoC_2015#LibreCAD_Projects_Ideas LibreCAD GSoC 2015 ideas] for more detailed description.<br />
<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[LibreCAD 3 UI Phase 1]]:''' Add GUI support for drawing and editing actions to start exposing it to end users.<br />
|align=center|C++,Math<br />
|align=center|MEDIUM TO HIGH<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >, R. van Twisk <LibreCAD@rvt.dds.nl>]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve Spline/Bézier Support]]''' <br />
|align=center|C++,Math<br />
|align=center|MEDIUM TO HIGH<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >, R. van Twisk <LibreCAD@rvt.dds.nl>]]<br />
|-<br />
<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve contour topology support]]:''' Hatching and area enclosed in a contour<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Improve precision and robustness of equation solvers]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Conic curve support]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
<br />
|- bgcolor=#fafafa<br />
|width=62%|'''[[SmartSnap]]:''' Adding and improve snap features for drawing<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[LibreCAD on mobile]]:''' Qt5 support for mobile (Android and iOS, see [http://doc.qt.digia.com/qtcreator-2.1/creator-mobile-example.html Qt mobile]).<br />
|align=center|Qt Android iOS<br />
|align=center|MEDIUM<br />
|align=center|[[dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
<br />
|- bgcolor=#ffffff<br />
|width=62%|'''[[Support for multiple units upon data entry]]''' <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|R. van Twisk <gsoc_2014@rvt.dds.nl>,dli (Dongxu Li < dongxuli2011 at gmail >]]<br />
|-<br />
|}<br />
<br />
= STEPcode Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[STEP Coverage Test]]:''' Write a program that links against STEPcode and generates a STEP output instantiating every entity for a given schema. Goal is a comprehensive program and data file for testing STEP import/export.<br />
|ANY (C/C++, Python, Java, Perl, ...)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Incremental Loading]]:''' Basically take a work-in-progress to the next level. Modify the STEP parser to only read what it needs when it needs it, test, clean up, profile, and optimize.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Minimal Examples]]:''' Create minimal examples for various schemas - such as AP214 or AP242 - in the style of [http://github.com/stepcode/stepcode/blob/master/example/ap203min/ap203min.cpp ap203min]<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Multiple Protocol Parsing]]:''' Currently creates a parser that works with a specific application protocol (e.g., AP203, AP214). Make it work with multiple simultaneously. <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Source Code Documentation]]:''' We already use doxygen, but could do much better. Improve code documentation and utilize additional doxygen features such as topic pages. Add a 'make doxygen' target to invoke doxygen.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP EXPRESS Documentation]]:''' Write 'exp2html', similar to exp2py or exp2cxx (python and C++ generators) but outputs graphs and hyperlinked documentation with JavaScript search. Output will include EXPRESS comments (this requires modifying the parser).<br />
|align=center|C/C++, JavaScript<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Viewer]]:''' STEP is a common CAD file format supported by just about every major CAD system. Given we have an importer and an interface for displaying geometry, a stand-alone STEP file viewer has some great potential.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Code Refactoring]]:''' Split large files and functions, add unit tests, move contents of LISTdo loops into separate functions.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Thread Safety and Performance]]:''' Modify the libraries to improve thread safety, increase performance using hotspot analysis<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|}<br />
<br />
= LinuxCNC Projects =<br />
<br />
[http://linuxcnc.org LinuxCNC] is software for computer control of machine tools such as milling machines and lathes, 3d printers, robot arms, and more.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''StepConf improvements ([https://sourceforge.net/p/emc/feature-requests/60/], [https://sourceforge.net/p/emc/feature-requests/58/], [https://sourceforge.net/p/emc/feature-requests/57/]):''' [http://linuxcnc.org/docs/html/config/stepconf.html StepConf] is a gui that helps people configure LinuxCNC for many kinds of common machines. It has some missing features that should be easy to add.<br />
|Python<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|- <br />
|width=62%|'''Add flow control to halstreamer ([https://sourceforge.net/p/emc/feature-requests/125/]):''' The userspace program [http://linuxcnc.org/docs/html/man/man1/halstreamer.1.html halstreamer] and its realtime companion [http://linuxcnc.org/docs/html/man/man9/streamer.9.html streamer] make up a utility for moving arbitrary data into the realtime core of LinuxCNC. It currently streams data at maximum rate, and it would be good to add flow control.<br />
|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|-<br />
|width=62%|'''New realtime kernels ([http://thread.gmane.org/gmane.linux.distributions.emc.user/56252]):''' LinuxCNC supports two realtime kernels: [https://www.rtai.org/ RTAI] and [https://rt.wiki.kernel.org/ Preempt-RT]. We target a variety of Debian-based distributions, and we provide debian packages of the realtime kernels we need. The goal of this project is to expand [https://github.com/SebKuzminsky/linux-rtai-build existing packaging infrastructure] to build newer versions of RTAI and Preempt-RT, for [https://www.debian.org/releases/jessie/ Debian Jessie] and [http://releases.ubuntu.com/14.04/ Ubuntu Trusty].<br />
|Shell, make, debian packaging tools<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|-<br />
|width=62%|'''Add peck to rigid tapping ([https://sourceforge.net/p/emc/feature-requests/78/]):''' Given adequate feedback from the machine, LinuxCNC supports [https://www.youtube.com/watch?v=Ja2LbAAJmls rigid tapping] via [http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G33_1-Rigid-Tapping G33.1] G-code. Some kinds of taps and materials benefit from "peck tapping", where the tap is backed out from the work piece periodically. Peck tapping currently has to be done "by hand", by programming one G33.1 move for each peck. This task is to add support for a "peck depth" parameter to the G33.1 command, analogous to peck drilling in [http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G83-Drilling-Peck G83].<br />
|C, C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|SebKuzminsky]]<br />
|}<br />
<br />
<br />
= Mentors =<br />
<br />
BRL-CAD operates under group mentorship. That means you can contact anyone, not just the person assigned to you, for assistance. The mailing list and IRC channel are the preferred communication methods.<br />
<br />
* Christopher Sean Morrison<br />
** brlcad on irc.freenode.net<br />
** Org admin, BRL-CAD open source project lead<br />
<br />
* Erik Greenwald<br />
** ``Erik on irc.freenode.net<br />
** Org admin, BRL-CAD core dev<br />
<br />
* Cliff Yapp<br />
** starseeker on irc.freenode.net<br />
** BRL-CAD Mentor, core dev<br />
<br />
* Daniel Rossberg<br />
** d_rossberg on irc.freenode.net<br />
** BRL-CAD Mentor, core dev, math expert<br />
<br />
* H.S. Rai<br />
** hsrai on irc.freenode.net<br />
** BRL-CAD Mentor, math expert<br />
<br />
* Tom Browder<br />
** BRL-CAD Mentor, analysis expert<br />
<br />
* Bryan Bishop<br />
** BRL-CAD Mentor, python guru<br />
<br />
* Isaac Kamga<br />
** Izakey on irc.freenode.net<br />
** BRL-CAD Mentor, C/C++ Programmer<br />
<br />
* Mohit Daga<br />
** zero_level irc.freenode.net<br />
** BRL-CAD Mentor, Computer Science Engineer<br />
<br />
* Mark Pictor<br />
** mpictor on irc.freenode.net<br />
** STEPcode Mentor<br />
<br />
* Charlie Stirk<br />
** cstirk<br />
** STEPcode Mentor<br />
<br />
* Marius Kintel<br />
** kintel on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Torsten Paul<br />
** teepee on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Dongxu Li<br />
** dli on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jose Rallaz<br />
** rallazz on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Ries van Twisk<br />
** ries on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jasleen Kaur<br />
** jasleen on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Armin Stebich<br />
** LordOfBikes on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Sebastian Kuzminsky<br />
** seb_kuzminsky on irc.freenode.net<br />
** LinuxCNC Mentor</div>
Starseeker
https://brlcad.org/w/index.php?title=Doxygen&diff=7852
Doxygen
2015-01-06T18:25:48Z
<p>Starseeker: show how to view output from doxygen</p>
<hr />
<div>BRL-CAD and Doxygen<br />
<br />
Doxygen (http://www.stack.nl/~dimitri/doxygen/) is a tool for generating documentation from source code comments in C and C++ sources, which works automatically so long as certain formatting conventions are respected. In order to generate diagrams, users should also install the Graphviz (http://www.graphviz.org/) graph visualization software.<br />
<br />
Once the necessary tools are installed on your computer, BRL-CAD's CMake build will detect them and enable compilation targets to generate HTML output:<br />
<br />
make dox - this is the toplevel Doxygen target, and the preferred way to generate the documentation. It works on all the libraries simultaneously, which makes for the best quality documentation but may also take longer to generate output.<br />
<br />
To view the output generated from this command, open it in firefox or some other web browser:<br />
<br />
firefox doc/doxygen_output/html/index.html<br />
<br />
make dox-<lib**> - per library doxygen targets that build documentation only for a single library (libbu, librt, etc.)<br />
<br />
The per-library outputs will be in their own directories:<br />
<br />
firefox doc/doxygen_libbu/html/index.html<br />
<br />
== Editing Doxygen ==<br />
<br />
For examples of how to format Doxygen comments in source code, study the libbu headers - these are the most mature of BRL-CAD's libraries when it comes to doxygen formatting.<br />
<br />
The hierarchical structure of the comments is not controlled by comments in the headers themselves, but in special purpose files located in BRL-CAD's misc/doxygen directory. Each library has a lib**.dox file within which it's hierarchy is defined. libbu.dox is a good example of a mature file of this type - as of this writing (early 2015) most of the libraries do not have a mature hierarchy defined.<br />
<br />
To properly organize the documentation for a library, the first step is to populate its lib**.dox file. Once that file is ready, appropriate markup is added to the header contents to properly categorize content.</div>
Starseeker
https://brlcad.org/w/index.php?title=Doxygen&diff=7851
Doxygen
2015-01-06T18:19:44Z
<p>Starseeker: Add some notes about BRL-CAD's Doxygen setup</p>
<hr />
<div>BRL-CAD and Doxygen<br />
<br />
Doxygen (http://www.stack.nl/~dimitri/doxygen/) is a tool for generating documentation from source code comments in C and C++ sources, which works automatically so long as certain formatting conventions are respected. In order to generate diagrams, users should also install the Graphviz (http://www.graphviz.org/) graph visualization software.<br />
<br />
Once the necessary tools are installed on your computer, BRL-CAD's CMake build will detect them and enable compilation targets to generate HTML output:<br />
<br />
make dox - this is the toplevel Doxygen target, and the preferred way to generate the documentation. It works on all the libraries simultaneously, which makes for the best quality documentation but may also take longer to generate output.<br />
<br />
make dox-<lib**> - per library doxygen targets that build documentation only for a single library (libbu, librt, etc.)<br />
<br />
== Editing Doxygen ==<br />
<br />
For examples of how to format Doxygen comments in source code, study the libbu headers - these are the most mature of BRL-CAD's libraries when it comes to doxygen formatting.<br />
<br />
The hierarchical structure of the comments is not controlled by comments in the headers themselves, but in special purpose files located in BRL-CAD's misc/doxygen directory. Each library has a lib**.dox file within which it's hierarchy is defined. libbu.dox is a good example of a mature file of this type - as of this writing (early 2015) most of the libraries do not have a mature hierarchy defined.<br />
<br />
To properly organize the documentation for a library, the first step is to populate its lib**.dox file. Once that file is ready, appropriate markup is added to the header contents to properly categorize content.</div>
Starseeker
https://brlcad.org/w/index.php?title=Geometric_Constraint_Solver&diff=6645
Geometric Constraint Solver
2014-03-14T21:49:23Z
<p>Starseeker: /* References */ Add NIST STEP reference talking about constraints.</p>
<hr />
<div>Previous GSoC projects have made progress towards a parametrics/constraint library. Please check [[libpg : A parametrics/constraint library|libpc Developer Doc]] as well as the [http://brlcad.svn.sourceforge.net/viewvc/brlcad/brlcad/trunk/src/libpc/ libpc source]. For this year's project, we're suggesting a specific direction as outlined below.<br />
<br />
BRL-CAD does not presently provide the means to specify values that are undetermined or otherwise dependent calculations. That is to say that there is no support for constraints and parametrics such that a modeler can define a sphere such that the sphere's radius necessarily maintains tangency with a given planar surface. This task would focus on implementing basic support for this feature in the BRL-CAD geometry format. Parametric representation of Geometry (and constraints) provides a good foundation for various aspects of Design computation, Geometry Generative Algorithms, and A more logically connected model not to mention significant reduction in Modeling time (since the process of modeling during an actual design cycle is inherently iterative).<br />
<br />
Since the initial work on libpc began, the open source gecode constraint solver has released version 4.0 with support for floating point data types. The work to be done is to put gecode's constraint solver "underneath" the libpc API in place of the existing solver and demonstrate successful soltions to primitive constraint equation systems. (Discuss these with the BRL-CAD developers.)<br />
<br />
=References=<br />
<br />
* http://www.gecode.org/<br />
* http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
* http://www.nist.gov/manuscript-publication-search.cfm?pub_id=822720<br />
* src/libpc<br />
* include/pc.h<br />
* src/librt/primitives/table.c<br />
** contains primitive callback definitions<br />
* src/librt/primitives/**<br />
** each primitive needs to implement a routine that returns available parameters, rt_*_param().<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
* General understanding of constraint solving</div>
Starseeker
https://brlcad.org/w/index.php?title=Geometric_Constraint_Solver&diff=6516
Geometric Constraint Solver
2014-03-03T15:35:02Z
<p>Starseeker: Put the Geometric Constraint Solver task back in it's previous form</p>
<hr />
<div>Previous GSoC projects have made progress towards a parametrics/constraint library. Please check [[libpg : A parametrics/constraint library|libpc Developer Doc]] as well as the [http://brlcad.svn.sourceforge.net/viewvc/brlcad/brlcad/trunk/src/libpc/ libpc source]. For this year's project, we're suggesting a specific direction as outlined below.<br />
<br />
BRL-CAD does not presently provide the means to specify values that are undetermined or otherwise dependent calculations. That is to say that there is no support for constraints and parametrics such that a modeler can define a sphere such that the sphere's radius necessarily maintains tangency with a given planar surface. This task would focus on implementing basic support for this feature in the BRL-CAD geometry format. Parametric representation of Geometry (and constraints) provides a good foundation for various aspects of Design computation, Geometry Generative Algorithms, and A more logically connected model not to mention significant reduction in Modeling time (since the process of modeling during an actual design cycle is inherently iterative).<br />
<br />
Since the initial work on libpc began, the open source gecode constraint solver has released version 4.0 with support for floating point data types. The work to be done is to put gecode's constraint solver "underneath" the libpc API in place of the existing solver and demonstrate successful soltions to primitive constraint equation systems. (Discuss these with the BRL-CAD developers.)<br />
<br />
=References=<br />
<br />
* http://www.gecode.org/<br />
* http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
* src/libpc<br />
* include/pc.h<br />
* src/librt/primitives/table.c<br />
** contains primitive callback definitions<br />
* src/librt/primitives/**<br />
** each primitive needs to implement a routine that returns available parameters, rt_*_param().<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
* General understanding of constraint solving</div>
Starseeker
https://brlcad.org/w/index.php?title=Advanced_Sketch_Primitive_Editor&diff=6515
Advanced Sketch Primitive Editor
2014-03-03T15:32:57Z
<p>Starseeker: Add specific task for 2D parametric sketch editing</p>
<hr />
<div>BRL-CAD supports many primitives, including a 2D sketch primitive, but we do not presently provide the means to specify values that are undetermined or otherwise dependent calculations. So we don't have a way to constrain (for example) a line segment to remain at a fixed angle relative to another line segment during editing.<br />
<br />
This task would focus on implementing basic support for this feature in the context of BRL-CAD's sketch primitive. Options include:<br />
<br />
* Integrate existing BSD licensed 2D constraint solving functionality from exising projects:<br />
** https://code.google.com/p/psketcher/<br />
** https://code.google.com/p/sketchsolve/<br />
<br />
In particular, psketcher offers some Qt visualizations of sketch editing - a good "first step" would be to make a "Qt sketch editor" for BRL-CAD's sketch objects. This is likely to require refactoring psketcher and/or sketchsolve, but they do provide a starting point.<br />
<br />
* Once a solving framework is in place and working with BRL-CAD sketch objects, test out the Gecode constraint solver by defining the 2D constraints from the above solvers in the Gecode framework - see how its solving speed compares to the dedicated 2D solutions, and how straightforward it is to use Gecode to solve such problems.<br />
** http://www.gecode.org/<br />
** http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
<br />
This task is related to the more general parametric constraint tasks, but it is more narrowly scoped and more focused on immediately user visible features.<br />
<br />
=References=<br />
* https://code.google.com/p/psketcher/<br />
* https://code.google.com/p/sketchsolve/<br />
* http://www.gecode.org/<br />
* http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
* src/librt/primitives/sketch<br />
** contains sources pertaining to BRL-CAD's 2D sketch primitive<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++</div>
Starseeker
https://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas&diff=6514
Google Summer of Code/Project Ideas
2014-03-03T15:28:51Z
<p>Starseeker: /* Infrastructure */ 2D sketch editing proposal is too different from GCS task - make it two separate tasks</p>
<hr />
<div>If you want to work on '''computer-aided design (CAD), geometry, or graphics''', you've come to the right place! Help us improve open source CAD.<br />
<br />
Well prepared proposals have an ''outstanding'' chance here. We consider proposals for all skill levels. Possibilities range from simple to crazy hard and everything in between. [https://lists.sourceforge.net/lists/listinfo/brlcad-devel Introduce yourself].<br />
<br />
We plan on selecting 6-12 students to work on web projects, C/C++ projects, and more. This year, BRL-CAD is coordinating with three other communities that will get 1-2 students each to help bridge our work and encourage collaboration. Projects that help exchange data or share code are desired!<br />
<br />
{|align="center" width="62%"<br />
|align="center" |http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png<br />
|colspan=2 align="center" |Under development for 30+ years, it's big, it's complicated, it's powerful. BRL-CAD will consider just about any project that relates to computer graphics or existing infrastructure.<br />
|}<br />
{|align="center" width="90%"<br />
|align="center" width="33%"|[http://openscad.org http://www.openscad.org/assets/img/logo.png]<br />
|align="center" width="33%"|[https://librecad.org http://librecad.org/files/live/sites/lc/files/WebImages/LogoLibrecad_logo.png]<br />
|align="center" width="33%"|[http://stepcode.org/mw/index.php?title=List_of_projects http://stepcode.org/STEPcode_logo_sm.png]<br />
|-<br />
|align="center"|'''OpenSCAD''': rich syntax, programmable geometry. Lots of possibilities to make it interoperate with BRL-CAD and LibreCAD.<br />
|align="center"|'''LibreCAD''': specializes in 2D CAD modeling, drafting, drawings. Help build a bridge to BRL-CAD or add STEP support.<br />
|align="center"|'''STEPcode''': file format on steroids, STEP is a complex standard for geometry used by nearly every pro CAD system.<br />
|}<br />
<br />
'''Unless there isn't a quality proposal, we intend to select at least one student for each of BRL-CAD's main categories as well as at least one student each for OpenSCAD, LibreCAD, and STEPcode.'''<br />
<br />
Remember that project descriptions are just ''initial ideas''. You must expand with [[Summer_of_Code/Application_Guidelines|considerably more detail]]. Change the goals to fit your experience and interests. See our '''[[Summer_of_Code/Checklist|checklist]]''' to get started.<br />
<br />
'''Project titles link to a page with more details.'''<br />
<br />
= BRL-CAD Projects =<br />
<br />
== Web Development ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Benchmark Performance Database]]:''' BRL-CAD's Benchmark has been used for two decades to compare performance across configurations. Build a database website. <br />
|Depends (likely PHP or Python)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Synchronize Wiki with Docbook]]:''' We use Docbook for most of our user documentation but find editing a wiki page much easier to use. Set up a system so the two are always in sync.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Interface]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the front-end usability.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Back-end]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the back-end infrastructure.<br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Mediawiki 3D Geometry Extension]]:''' Write an extension for Mediawiki that will visualize our .g files. Maybe leverage LLVM C->Javascript translation. <br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Materials Database]]:''' Create a Materials Database web site for collecting, managing, and providing programmatic interfaces to material properties.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
<br />
== Geometry ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[NURBS Editing Support]]:''' BRL-CAD doesn't currently have support for editing NURBS primitives. Fix that.<br />
|align=center|C/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Overlap tool]]:''' Resolving geometric interferences (aka overlaps) is a common geometry editing activity. Design an awesome GUI for resolving conflicts.<br />
|align=center|Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison, Greenwald]]<br />
|-<br />
|align=left width=62%|'''[[Vector Drawings from NURBS]]:''' Huge impact here if you can update one or more of our raytracers to provide vector output instead of raster. Perhaps render directly to PDF or SVG.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[NMG Editing]]:''' Our structured polygonal mesh geometry (N-Manifold Geometry = NMG) is a common export format, but our NMG edit support is non-existent. We need something.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Visualizing Constructive Solid Geometry (CSG)]]:''' CSG forms a directed acyclic graph. Tree view widgets show a simple hierarchical representation, but we need something better.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Plate Mode NURBS raytracing]]:''' Imported NURBS geometry often does NOT enclose space (i.e., not solid), so add support for specifying an implicit thickness.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[STEP exporter]]:''' We have an importer, we need a comprehensive exporter with support for implicit CSG, NURBS, or polygonal mesh geometry.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[STEP importer improvements]]:''' We have an importer, but it's preliminary. Add support for importing hierarchy information, polygonal geometry, and implicit geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Convert BoT to Pipe]]:''' Command line interface to convert facetted fluid/electrical line geometry into BRL-CAD native pipe solids.<br />
|align=center|C/C++/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[IGES import improvements]]:''' We have extensive support for the International Geometry Exchange Standard (IGES) with our g-iges and iges-g converters, but they need updating.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Geometry Conversion Library]]:''' Probably our biggest open source asset is our extensive collection of importers and exporters. Turn them all into a universal conversion library. <br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Voxelize]] command:''' Convert geometry into voxel data sets by shooting a grid of rays. The finite element analysis and volumetric rendering folks will love you.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[COLLADA Importer]]:''' Create an importer for the COLLADA file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[X3D Importer]]:''' Create an importer for the X3D file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Importer]]:''' Create an importer for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Exporter]]:''' Create an exporter for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Python Geometry]]:''' Wrap BRL-CAD's primitives in Python, make it easier to script geometry creation. <br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== Performance & Quality ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[OpenCL GPGPU Raytracing]]:''' We have about two dozen primitives that need to have a ray-object intersection function converted from C to OpenCL.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[Coherent Raytracing]]:''' Our current raytrace pipeline dispatches and processes one ray at a time. Send bundles and convert the pipeline into phases. <br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Booleans]]:''' We have NURBS surface-surface intersections working. Now we're using them to create evaluated forms of our CSG geometry. Make it more robust and faster.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Optimization and Cleanup]]:''' We have a fantastic implementation of NURBS evaluation but haven't gone back to clean up or speed it up. Make it purdy.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Fix Bugs]]:''' We take pride in our breadth of functionality and time-tested stability. We still have bugs. Identify some and fix 'em!<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|TBD]]<br />
|-<br />
|width=62%|'''[[NMG Raytracing Performance Improvement]]:''' BRL-CAD's structured mesh geometry (N-Manifold Geometry = NMG) needs some time in a profiler. Malloc during raytracing is bad.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Mesh library cleanup]]:''' BRL-CAD has an extensive n-manifold polygonal mesh library that needs some refactoring, testing, and optimization rework.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Space Partitioning for Tessellation]]:''' Technically an optimization task, make our geometry converters run an order of magnitude faster by using spatial partitioning during tessellation.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Code Reduction]]:''' BRL-CAD is more than 1M lines of code. Approximately 10% of that is duplication. Help reduce that percentage.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|}<br />
<br />
== Infrastructure ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[New Cross-Platform 3D Display Manager]]:''' BRL-CAD uses '''''display managers''''' for visualizing 3D geometry in a window. We want one that uses a cross-platform toolkit such as Qt + OGRE.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[New Cross-Platform 2D Framebuffer]]:''' BRL-CAD uses '''''framebuffers''''' to display 2D imagery. The merits of having a single interface for most platforms is self-evident.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Advanced Sketch Primitive Editor]]:''' BRL-CAD has a 2D sketch primitive, but our handling of editing sketches doesn't incorporate parametric constraints. There are potentially applicable codes in the open source community we can leverage for this, or we can roll our own solution.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometric Constraint Solver]]:''' Our LIBPC parametric constraint library is the work-in-progress foundation of being able to validate and describe geometry relationships.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[MGED to Archer Command Migration]]:''' Our next-generation editor (Archer) needs to have the same (700+) commands that are in MGED. Help make our next CAD interface awesome.<br />
|align=center|C and Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[General Tree Walker]]:''' We have a half dozen or more functions that will traverse a geometry hierarchy in different ways. There only needs to be one.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Rework of libbu/libbn to not require Tcl]]:''' Tcl's '''''C API''''' is used throughout BRL-CAD providing great abstractions, but we want our basic utility and numeric libraries (LIBBU & LIBBN) to stand alone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp, Greenwald]]<br />
|-<br />
|width=62%|'''[[Consolidate image processing]]:''' We have 100+ image processing tools that independently read and write file data. Needs much reuse love.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[GED Transactions]]:''' Migrating functionality from our MGED geometry editor into our LIBGED library provided excellent code reuse, but now we need transactions so that actions can be undone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometry Selection Functionality]]:''' Implement a new selection command that lets you temporarily group objects based on spatial, attribute, or geometric properties.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Astronomical units]]:''' We already go "big", but accurately modeling at a galactic scale redefines that notion...<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Object-oriented interfaces|BRL-CAD core C++ interface]]:''' Extend the C++ library which provides a simple interface to BRL-CAD's core functionality.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Python Bindings]]:''' With or without SWIG, wrap BRL-CAD's command library API so you can issue our creation and editing commands from Python.<br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
== Rendering & Scientific Analysis ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Shader Enhancements]]:''' We have a functioning custom shader system in BRL-CAD, but there are now folks that specialize and there's lot of room for improvements.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Material and Shader Objects]]:''' This one is a biggie but easy. Implement new object entities for describing shaders and material properties, use them during ray tracing.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[GUI Integration of Analysis Tools]]:''' There are a ''lot'' of visualization tools in BRL-CAD, but most aren't integrated with the GUI. Visualizing directly within the GUI would improve usability.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Generalized abstracted spacial partitioning capability]]:''' Need more be said? If you're familiar with BSPs, KD trees, and grid structures, then this one is for you.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[High Dynamic Range Support]]:''' We don't have displays supporting this yet, but that's never stopped us before. Implement support for images with more than 8-bits per channel.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp]]<br />
|-<br />
|width=62%|'''[[Analysis Library]]:''' There are various tools in BRL-CAD for calculating weights, moments of inertia, and more. They're stand-alone applications. Turn them into a library.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Celestial mechanics particle system]]:''' Simulate solar systems and galaxies.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[Non-vacuum gravity simulator]]:''' Simulate falling to earth.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Polarization]]:''' We already do multispectral ray tracing, but don't simulate polarization effects. Implement ray splitting and filtering.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Density functions]]:''' Accurately represent everything from atmosphere to bone. Implement support for parametric density functions for homogenous materials.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Morrison]]<br />
|-<br />
|width=62%|'''[[Bending light]]:''' Think gravity wells and satellite cameras.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== <An Idea of Your Own> ==<br />
<br />
Do you have an idea of your own? Maybe you need [http://brlcad.org/~sean/ideas.html more ideas] to inspire you? We're very open to areas of academic research, industry applications, and ideas that get you hooked on open source CAD development.<br />
<br />
Requirements:<br />
<br />
* Passion for the task being suggested<br />
<br />
<br />
= OpenSCAD Projects =<br />
<br />
[http://openscad.org OpenSCAD] is a parametric solid 3D modeling tool which uses a Domain Specific Language to specify designs as plain text. It is specifically designed with 3D printing in mind.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages/Tools<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-issue-handling Issue Handling]:''' Day-to day issue and community management, fix incoming and existin issues. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-test-framework-improvements Test Framework Improvements]:''' Improve tests and test framework. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-thingiverse-customizer-and-sculpteo-customizer-support Thingiverse Customizer and Sculpteo customizer support]:''' Design and implement a customization GUI similar to Thingiverse Customizer.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-user-interface-brushup User interface brushup]:''' General brushup of the user interface.<br />
|align=center|C++ Qt<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-improve-dxf-import Improve DXF import]:''' Look into using an external library for DXF import (and export?).<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-opengl-framework OpenGL framework]:''' Rewrite the OpenGL rendering code to use a rendering framework. Focus on compatibility with OpenGL ES2 and rendering performance.<br />
|align=center|C++ OpenGL<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-persistant-caching Persistant caching]:''' Implement a disk-based version of the internal memory caches<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-multi-threaded-geometry-evaluation Multi-threaded Geometry Evaluation]:''' Implement multi-threaded evaluation of geometry.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-web-front-end Web front-end]:''' Experiment with decoupling the user interface from the backend by writing a web front-end and defining how to interface with the backend<br />
|align=center|Web + some C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-larger-tasks-for-particularly-experienced-people Larger tasks for particularly experienced people]:''' Various harder tasks which are not fully specified and requires significant effort to design and implement.<br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-cad-for-blind-and-sight-impaired-people CAD for Blind and Sight Impaired people]''' Rework OpenSCAD to make it easier for Blind and Sight Impaired people. <br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Don]]<br />
|}<br />
<br />
The OpenSCAD team is also open to new ideas. Please [http://www.openscad.org/community.html get in touch] to discuss your ideas and convince a mentor to back it.<br />
<br />
= LibreCAD Projects =<br />
<br />
LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. Support and documentation is free from our large, dedicated community of users, contributors and developers.<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''http://wiki.librecad.org/index.php?title=GSoC_2014:''' LibreCAD is a popular 2D CAD tool but is based on a old (10 years old) codebase that is hard to add features to. LibreCAD 3 aim's to completely rewrite LibreCAD in different different libraries to make coding against librecad easer.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|R. van Twisk]]<br />
|-<br />
|}<br />
<br />
= STEPcode Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!Impact<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[STEP Coverage Test]]:''' Write a program that links against STEPcode and generates a STEP output instantiating every entity for a given schema. Goal is a comprehensive program and data file for testing STEP import/export.<br />
|ANY (C/C++, Python, Java, Perl, ...)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Incremental Loading]]:''' Basically take a work-in-progress to the next level. Modify the STEP parser to only read what it needs when it needs it, test, clean up, profile, and optimize.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Multiple Protocol Parsing]]:''' Currently creates a parser that works with a specific application protocol (e.g., AP203, AP214). Make it work with multiple simultaneously. <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP AP 242 Parser]]:''' We already parse a subset of AP203, but the new kid on the block is AP242. Make AP242 work with BRL-CAD's step-g importer. <br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Libraries]]:''' We took over NIST's STEP Class Library (SCL) project during our development of a STEP importer. SCL has since turned into a larger community collaboration. The code needs cleanup.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Viewer]]:''' STEP is a common CAD file format supported by just about every major CAD system. Given we have an importer and an interface for displaying geometry, a stand-alone STEP file viewer has some great potential.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|}<br />
<br />
<br />
= Mentors =<br />
<br />
BRL-CAD operates under group mentorship. That means you can contact anyone, not just the person assigned to you, for assistance. The mailing list and IRC channel are the preferred communication methods.<br />
<br />
* Christopher Sean Morrison<br />
** brlcad on irc.freenode.net<br />
** Org admin, BRL-CAD open source project lead<br />
<br />
* Erik Greenwald<br />
** ``Erik on irc.freenode.net<br />
** Org admin, BRL-CAD core dev<br />
<br />
* Cliff Yapp<br />
** starseeker on irc.freenode.net<br />
** BRL-CAD Mentor, core dev<br />
<br />
* Daniel Rossberg<br />
** d_rossberg on irc.freenode.net<br />
** BRL-CAD Mentor, core dev, math expert<br />
<br />
* H.S. Rai<br />
** hsrai on irc.freenode.net<br />
** BRL-CAD Mentor, math expert<br />
<br />
* Tom Browder<br />
** BRL-CAD Mentor, analysis expert<br />
<br />
* Bryan Bishop<br />
** BRL-CAD Mentor, python guru<br />
<br />
* Mark Pictor<br />
** mpictor on irc.freenode.net<br />
** STEPcode Mentor<br />
<br />
* Charlie Stirk<br />
** cstirk<br />
** STEPcode Mentor<br />
<br />
* Marius Kintel<br />
** kintel on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Torsten Paul<br />
** teepee on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Dongxu Li<br />
** dli on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jose Rallaz<br />
** rallazz on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Ries van Twisk<br />
** ries on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jasleen Kaur<br />
** jasleen on irc.freenode.net<br />
** LibreCAD Mentor</div>
Starseeker
https://brlcad.org/w/index.php?title=Geometric_Constraint_Solver&diff=6513
Geometric Constraint Solver
2014-03-02T23:49:47Z
<p>Starseeker: mention some psketcher todo items</p>
<hr />
<div>BRL-CAD supports many primitives, including a 2D sketch primitive, but we do not presently provide the means to specify values that are undetermined or otherwise dependent calculations. That is to say that there is no support for constraints and parametrics such that a modeler can define a sphere such that the sphere's radius necessarily maintains tangency with a given planar surface or (in the 2D case) that a line segment must remain at a fixed angle relative to another line segment.<br />
<br />
This task would focus on implementing basic support for this feature in the BRL-CAD geometry format. Past work has focused on a full, generic constraint system for 2D and 3D modeling. For this year's task, we are proposing a slightly different approach to the problem, with more "incremental" steps towards the final goal:<br />
<br />
* Beginning with the 2D sketch primitive, integrate existing BSD licensed 2D constraint solving functionality from exising projects:<br />
** https://code.google.com/p/psketcher/<br />
** https://code.google.com/p/sketchsolve/<br />
<br />
In particular, psketcher offers some Qt visualizations of sketch editing - a good "first step" would be to make a "Qt sketch editor" for BRL-CAD's sketch objects. Note that this will require replacing GSL with something else (probably Eigen) for matrix functionality in psketcher's src/mmcMatrix/mmcMatrix.cpp, and possibly other refactoring.<br />
<br />
* Once a solving framework is in place and working with BRL-CAD sketch objects, test out the Gecode constraint solver by defining the 2D constraints from the above solvers in the Gecode framework - see how its solving speed compares to the dedicated 2D solutions, and how straightforward it is to use Gecode to solve such problems.<br />
** http://www.gecode.org/<br />
** http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
<br />
* If Gecode proves viable, begin expressing 3D constraints.<br />
<br />
=References=<br />
* https://code.google.com/p/psketcher/<br />
* https://code.google.com/p/sketchsolve/<br />
* http://www.gecode.org/<br />
* http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
* src/librt/primitives/sketch<br />
** contains sources pertaining to BRL-CAD's 2D sketch primitive<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
<br />
Note: Previous GSoC projects have made some progress towards a parametrics/constraint library. Please check [[libpg : A parametrics/constraint library|libpc Developer Doc]] as well as the [http://brlcad.svn.sourceforge.net/viewvc/brlcad/brlcad/trunk/src/libpc/ libpc source]. While it is certainly a viable route to pick up where those efforts left off, the above approaches are likely to require less "up front" work for visible results.</div>
Starseeker
https://brlcad.org/w/index.php?title=Geometric_Constraint_Solver&diff=6512
Geometric Constraint Solver
2014-03-02T22:52:44Z
<p>Starseeker: Rework constraint solver task</p>
<hr />
<div>BRL-CAD supports many primitives, including a 2D sketch primitive, but we do not presently provide the means to specify values that are undetermined or otherwise dependent calculations. That is to say that there is no support for constraints and parametrics such that a modeler can define a sphere such that the sphere's radius necessarily maintains tangency with a given planar surface or (in the 2D case) that a line segment must remain at a fixed angle relative to another line segment.<br />
<br />
This task would focus on implementing basic support for this feature in the BRL-CAD geometry format. Past work has focused on a full, generic constraint system for 2D and 3D modeling. For this year's task, we are proposing a slightly different approach to the problem, with more "incremental" steps towards the final goal:<br />
<br />
* Beginning with the 2D sketch primitive, integrate existing BSD licensed 2D constraint solving functionality from exising projects:<br />
** https://code.google.com/p/psketcher/<br />
** https://code.google.com/p/sketchsolve/<br />
<br />
In particular, psketcher offers some Qt visualizations of sketch editing - a good "first step" would be to make a "Qt sketch editor" for BRL-CAD's sketch objects.<br />
<br />
* Once a solving framework is in place and working with BRL-CAD sketch objects, test out the Gecode constraint solver by defining the 2D constraints from the above solvers in the Gecode framework - see how its solving speed compares to the dedicated 2D solutions, and how straightforward it is to use Gecode to solve such problems.<br />
** http://www.gecode.org/<br />
** http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
<br />
* If Gecode proves viable, begin expressing 3D constraints.<br />
<br />
=References=<br />
* https://code.google.com/p/psketcher/<br />
* https://code.google.com/p/sketchsolve/<br />
* http://www.gecode.org/<br />
* http://www.gecode.org/doc-latest/reference/classCartesianHeart.html<br />
* src/librt/primitives/sketch<br />
** contains sources pertaining to BRL-CAD's 2D sketch primitive<br />
<br />
Requirements:<br />
<br />
* Familiarity with C/C++<br />
<br />
Note: Previous GSoC projects have made some progress towards a parametrics/constraint library. Please check [[libpg : A parametrics/constraint library|libpc Developer Doc]] as well as the [http://brlcad.svn.sourceforge.net/viewvc/brlcad/brlcad/trunk/src/libpc/ libpc source]. While it is certainly a viable route to pick up where those efforts left off, the above approaches are likely to require less "up front" work for visible results.</div>
Starseeker
https://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas&diff=6509
Google Summer of Code/Project Ideas
2014-03-01T13:25:01Z
<p>Starseeker: /* Infrastructure */ only one search link needed</p>
<hr />
<div>If you want to work on '''computer-aided design (CAD), geometry, or graphics''', you've come to the right place! Help us improve open source CAD.<br />
<br />
Well prepared proposals have an ''outstanding'' chance here. We consider proposals for all skill levels. Possibilities range from simple to crazy hard and everything in between. [https://lists.sourceforge.net/lists/listinfo/brlcad-devel Introduce yourself].<br />
<br />
We plan on selecting 6-12 students to work on web projects, C/C++ projects, and more. This year, BRL-CAD is coordinating with three other communities that will get 1-2 students each to help bridge our work and encourage collaboration. Projects that help exchange data or share code are desired!<br />
<br />
{|align="center" width="62%"<br />
|align="center" |http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png<br />
|colspan=2 align="center" |Under development for 30+ years, it's big, it's complicated, it's powerful. BRL-CAD will consider just about any project that relates to computer graphics or existing infrastructure.<br />
|}<br />
{|align="center" width="90%"<br />
|align="center" width="33%"|[http://openscad.org http://www.openscad.org/assets/img/logo.png]<br />
|align="center" width="33%"|[https://librecad.org http://librecad.org/files/live/sites/lc/files/WebImages/LogoLibrecad_logo.png]<br />
|align="center" width="33%"|[http://stepcode.org/mw/index.php?title=List_of_projects http://stepcode.org/STEPcode_logo_sm.png]<br />
|-<br />
|align="center"|'''OpenSCAD''': rich syntax, programmable geometry. Lots of possibilities to make it interoperate with BRL-CAD and LibreCAD.<br />
|align="center"|'''LibreCAD''': specializes in 2D CAD modeling, drafting, drawings. Help build a bridge to BRL-CAD or add STEP support.<br />
|align="center"|'''STEPcode''': file format on steroids, STEP is a complex standard for geometry used by nearly every pro CAD system.<br />
|}<br />
<br />
'''Unless there isn't a quality proposal, we intend to select at least one student for each of BRL-CAD's main categories as well as at least one student each for OpenSCAD, LibreCAD, and STEPcode.'''<br />
<br />
Remember that project descriptions are just ''initial ideas''. You must expand with [[Summer_of_Code/Application_Guidelines|considerably more detail]]. Change the goals to fit your experience and interests. See our '''[[Summer_of_Code/Checklist|checklist]]''' to get started.<br />
<br />
'''Project titles link to a page with more details.'''<br />
<br />
= BRL-CAD Projects =<br />
<br />
== Web Development ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Benchmark Performance Database]]:''' BRL-CAD's Benchmark has been used for two decades to compare performance across configurations. Build a database website. <br />
|Depends (likely PHP or Python)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Synchronize Wiki with Docbook]]:''' We use Docbook for most of our user documentation but find editing a wiki page much easier to use. Set up a system so the two are always in sync.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Interface]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the front-end usability.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Back-end]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the back-end infrastructure.<br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Mediawiki 3D Geometry Extension]]:''' Write an extension for Mediawiki that will visualize our .g files. Maybe leverage LLVM C->Javascript translation. <br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Materials Database]]:''' Create a Materials Database web site for collecting, managing, and providing programmatic interfaces to material properties.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
<br />
== Geometry ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[NURBS Editing Support]]:''' BRL-CAD doesn't currently have support for editing NURBS primitives. Fix that.<br />
|align=center|C/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Overlap tool]]:''' Resolving geometric interferences (aka overlaps) is a common geometry editing activity. Design an awesome GUI for resolving conflicts.<br />
|align=center|Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison, Greenwald]]<br />
|-<br />
|align=left width=62%|'''[[Vector Drawings from NURBS]]:''' Huge impact here if you can update one or more of our raytracers to provide vector output instead of raster. Perhaps render directly to PDF or SVG.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[NMG Editing]]:''' Our structured polygonal mesh geometry (N-Manifold Geometry = NMG) is a common export format, but our NMG edit support is non-existent. We need something.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Visualizing Constructive Solid Geometry (CSG)]]:''' CSG forms a directed acyclic graph. Tree view widgets show a simple hierarchical representation, but we need something better.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Plate Mode NURBS raytracing]]:''' Imported NURBS geometry often does NOT enclose space (i.e., not solid), so add support for specifying an implicit thickness.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[STEP exporter]]:''' We have an importer, we need a comprehensive exporter with support for implicit CSG, NURBS, or polygonal mesh geometry.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[STEP importer improvements]]:''' We have an importer, but it's preliminary. Add support for importing hierarchy information, polygonal geometry, and implicit geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Convert BoT to Pipe]]:''' Command line interface to convert facetted fluid/electrical line geometry into BRL-CAD native pipe solids.<br />
|align=center|C/C++/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[IGES import improvements]]:''' We have extensive support for the International Geometry Exchange Standard (IGES) with our g-iges and iges-g converters, but they need updating.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Geometry Conversion Library]]:''' Probably our biggest open source asset is our extensive collection of importers and exporters. Turn them all into a universal conversion library. <br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Voxelize]] command:''' Convert geometry into voxel data sets by shooting a grid of rays. The finite element analysis and volumetric rendering folks will love you.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[COLLADA Importer]]:''' Create an importer for the COLLADA file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[X3D Importer]]:''' Create an importer for the X3D file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Importer]]:''' Create an importer for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Exporter]]:''' Create an exporter for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Python Geometry]]:''' Wrap BRL-CAD's primitives in Python, make it easier to script geometry creation. <br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== Performance & Quality ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[OpenCL GPGPU Raytracing]]:''' We have about two dozen primitives that need to have a ray-object intersection function converted from C to OpenCL.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[Coherent Raytracing]]:''' Our current raytrace pipeline dispatches and processes one ray at a time. Send bundles and convert the pipeline into phases. <br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Booleans]]:''' We have NURBS surface-surface intersections working. Now we're using them to create evaluated forms of our CSG geometry. Make it more robust and faster.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Optimization and Cleanup]]:''' We have a fantastic implementation of NURBS evaluation but haven't gone back to clean up or speed it up. Make it purdy.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Fix Bugs]]:''' We take pride in our breadth of functionality and time-tested stability. We still have bugs. Identify some and fix 'em!<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|TBD]]<br />
|-<br />
|width=62%|'''[[NMG Raytracing Performance Improvement]]:''' BRL-CAD's structured mesh geometry (N-Manifold Geometry = NMG) needs some time in a profiler. Malloc during raytracing is bad.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Mesh library cleanup]]:''' BRL-CAD has an extensive n-manifold polygonal mesh library that needs some refactoring, testing, and optimization rework.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Space Partitioning for Tessellation]]:''' Technically an optimization task, make our geometry converters run an order of magnitude faster by using spatial partitioning during tessellation.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Code Reduction]]:''' BRL-CAD is more than 1M lines of code. Approximately 10% of that is duplication. Help reduce that percentage.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|}<br />
<br />
== Infrastructure ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[New Cross-Platform 3D Display Manager]]:''' BRL-CAD uses '''''display managers''''' for visualizing 3D geometry in a window. We want one that uses a cross-platform toolkit such as Qt + OGRE.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[New Cross-Platform 2D Framebuffer]]:''' BRL-CAD uses '''''framebuffers''''' to display 2D imagery. The merits of having a single interface for most platforms is self-evident.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Geometric Constraint Solver]]:''' Our LIBPC parametric constraint library is the work-in-progress foundation of being able to validate and describe geometry relationships.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[MGED to Archer Command Migration]]:''' Our next-generation editor (Archer) needs to have the same (700+) commands that are in MGED. Help make our next CAD interface awesome.<br />
|align=center|C and Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[General Tree Walker]]:''' We have a half dozen or more functions that will traverse a geometry hierarchy in different ways. There only needs to be one.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Rework of libbu/libbn to not require Tcl]]:''' Tcl's '''''C API''''' is used throughout BRL-CAD providing great abstractions, but we want our basic utility and numeric libraries (LIBBU & LIBBN) to stand alone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp, Greenwald]]<br />
|-<br />
|width=62%|'''[[Consolidate image processing]]:''' We have 100+ image processing tools that independently read and write file data. Needs much reuse love.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[GED Transactions]]:''' Migrating functionality from our MGED geometry editor into our LIBGED library provided excellent code reuse, but now we need transactions so that actions can be undone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometry Selection Functionality]]:''' Implement a new selection command that lets you temporarily group objects based on spatial, attribute, or geometric properties.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Astronomical units]]:''' We already go "big", but accurately modeling at a galactic scale redefines that notion...<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Object-oriented interfaces|BRL-CAD core C++ interface]]:''' Extend the C++ library which provides a simple interface to BRL-CAD's core functionality.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Python Bindings]]:''' With or without SWIG, wrap BRL-CAD's command library API so you can issue our creation and editing commands from Python.<br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
== Rendering & Scientific Analysis ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Shader Enhancements]]:''' We have a functioning custom shader system in BRL-CAD, but there are now folks that specialize and there's lot of room for improvements.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Material and Shader Objects]]:''' This one is a biggie but easy. Implement new object entities for describing shaders and material properties, use them during ray tracing.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[GUI Integration of Analysis Tools]]:''' There are a ''lot'' of visualization tools in BRL-CAD, but most aren't integrated with the GUI. Visualizing directly within the GUI would improve usability.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Generalized abstracted spacial partitioning capability]]:''' Need more be said? If you're familiar with BSPs, KD trees, and grid structures, then this one is for you.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[High Dynamic Range Support]]:''' We don't have displays supporting this yet, but that's never stopped us before. Implement support for images with more than 8-bits per channel.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp]]<br />
|-<br />
|width=62%|'''[[Analysis Library]]:''' There are various tools in BRL-CAD for calculating weights, moments of inertia, and more. They're stand-alone applications. Turn them into a library.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Celestial mechanics particle system]]:''' Simulate solar systems and galaxies.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[Non-vacuum gravity simulator]]:''' Simulate falling to earth.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Polarization]]:''' We already do multispectral ray tracing, but don't simulate polarization effects. Implement ray splitting and filtering.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Density functions]]:''' Accurately represent everything from atmosphere to bone. Implement support for parametric density functions for homogenous materials.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Morrison]]<br />
|-<br />
|width=62%|'''[[Bending light]]:''' Think gravity wells and satellite cameras.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== <An Idea of Your Own> ==<br />
<br />
Do you have an idea of your own? Maybe you need [http://brlcad.org/~sean/ideas.html more ideas] to inspire you? We're very open to areas of academic research, industry applications, and ideas that get you hooked on open source CAD development.<br />
<br />
Requirements:<br />
<br />
* Passion for the task being suggested<br />
<br />
<br />
= OpenSCAD Projects =<br />
<br />
[http://openscad.org OpenSCAD] is a parametric solid 3D modeling tool which uses a Domain Specific Language to specify designs as plain text. It is specifically designed with 3D printing in mind.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages/Tools<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-issue-handling Issue Handling]:''' Day-to day issue and community management, fix incoming and existin issues. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-test-framework-improvements Test Framework Improvements]:''' Improve tests and test framework. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-thingiverse-customizer-and-sculpteo-customizer-support Thingiverse Customizer and Sculpteo customizer support]:''' Design and implement a customization GUI similar to Thingiverse Customizer.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-user-interface-brushup User interface brushup]:''' General brushup of the user interface.<br />
|align=center|C++ Qt<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-improve-dxf-import Improve DXF import]:''' Look into using an external library for DXF import (and export?).<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-opengl-framework OpenGL framework]:''' Rewrite the OpenGL rendering code to use a rendering framework. Focus on compatibility with OpenGL ES2 and rendering performance.<br />
|align=center|C++ OpenGL<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-persistant-caching Persistant caching]:''' Implement a disk-based version of the internal memory caches<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-multi-threaded-geometry-evaluation Multi-threaded Geometry Evaluation]:''' Implement multi-threaded evaluation of geometry.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-web-front-end Web front-end]:''' Experiment with decoupling the user interface from the backend by writing a web front-end and defining how to interface with the backend<br />
|align=center|Web + some C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-larger-tasks-for-particularly-experienced-people Larger tasks for particularly experienced people]:''' Various harder tasks which are not fully specified and requires significant effort to design and implement.<br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-cad-for-blind-and-sight-impaired-people CAD for Blind and Sight Impaired people]''' Rework OpenSCAD to make it easier for Blind and Sight Impaired people. <br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Don]]<br />
|}<br />
<br />
The OpenSCAD team is also open to new ideas. Please [http://www.openscad.org/community.html get in touch] to discuss your ideas and convince a mentor to back it.<br />
<br />
= LibreCAD Projects =<br />
<br />
LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. Support and documentation is free from our large, dedicated community of users, contributors and developers.<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''http://wiki.librecad.org/index.php?title=GSoC_2014:''' LibreCAD is a popular 2D CAD tool but is based on a old (10 years old) codebase that is hard to add features to. LibreCAD 3 aim's to completely rewrite LibreCAD in different different libraries to make coding against librecad easer.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|R. van Twisk]]<br />
|-<br />
|}<br />
<br />
= STEPcode Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!Impact<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[STEP Coverage Test]]:''' Write a program that links against STEPcode and generates a STEP output instantiating every entity for a given schema. Goal is a comprehensive program and data file for testing STEP import/export.<br />
|ANY (C/C++, Python, Java, Perl, ...)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Incremental Loading]]:''' Basically take a work-in-progress to the next level. Modify the STEP parser to only read what it needs when it needs it, test, clean up, profile, and optimize.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Multiple Protocol Parsing]]:''' Currently creates a parser that works with a specific application protocol (e.g., AP203, AP214). Make it work with multiple simultaneously. <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP AP 242 Parser]]:''' We already parse a subset of AP203, but the new kid on the block is AP242. Make AP242 work with BRL-CAD's step-g importer. <br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Libraries]]:''' We took over NIST's STEP Class Library (SCL) project during our development of a STEP importer. SCL has since turned into a larger community collaboration. The code needs cleanup.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Viewer]]:''' STEP is a common CAD file format supported by just about every major CAD system. Given we have an importer and an interface for displaying geometry, a stand-alone STEP file viewer has some great potential.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|}<br />
<br />
<br />
= Mentors =<br />
<br />
BRL-CAD operates under group mentorship. That means you can contact anyone, not just the person assigned to you, for assistance. The mailing list and IRC channel are the preferred communication methods.<br />
<br />
* Christopher Sean Morrison<br />
** brlcad on irc.freenode.net<br />
** Org admin, BRL-CAD open source project lead<br />
<br />
* Erik Greenwald<br />
** ``Erik on irc.freenode.net<br />
** Org admin, BRL-CAD core dev<br />
<br />
* Cliff Yapp<br />
** starseeker on irc.freenode.net<br />
** BRL-CAD Mentor, core dev<br />
<br />
* Daniel Rossberg<br />
** d_rossberg on irc.freenode.net<br />
** BRL-CAD Mentor, core dev, math expert<br />
<br />
* H.S. Rai<br />
** hsrai on irc.freenode.net<br />
** BRL-CAD Mentor, math expert<br />
<br />
* Tom Browder<br />
** BRL-CAD Mentor, analysis expert<br />
<br />
* Bryan Bishop<br />
** BRL-CAD Mentor, python guru<br />
<br />
* Mark Pictor<br />
** mpictor on irc.freenode.net<br />
** STEPcode Mentor<br />
<br />
* Charlie Stirk<br />
** cstirk<br />
** STEPcode Mentor<br />
<br />
* Marius Kintel<br />
** kintel on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Torsten Paul<br />
** teepee on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Dongxu Li<br />
** dli on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jose Rallaz<br />
** rallazz on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Ries van Twisk<br />
** ries on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jasleen Kaur<br />
** jasleen on irc.freenode.net<br />
** LibreCAD Mentor</div>
Starseeker
https://brlcad.org/w/index.php?title=Mesh_library_cleanup&diff=6508
Mesh library cleanup
2014-03-01T13:02:30Z
<p>Starseeker: librt-isms are definitely present in nmg - removing them will be a fair bit of work.</p>
<hr />
<div>BRL-CAD has an extensive n-manifold (NMG) polygonal mesh library presently embedded within LIBRT. N-manifold is mostly a fancy way of saying it provides an arbitrary boundary representation structure. This library is used for a wide range of tasks but is commonly interacted with during geometry export to polygonal formats (e.g., g-stl). The library goes to extensive lengths to ensure that geometry is "correct" at every step along the way, that solidity is preserved, that topology is preserved, and more. All of that work means that the library can be slow and over time has become even more "unrobust" to real geometry. There are lots of O(n^2) and O(n^3) algorithms with dynamic memory allocations that make performance suboptimal. The source code is the documentation. It's one of the best at what it does, but far from good enough.<br />
<br />
This project entails basic source code cleanup, validation, and verification. As the library code is embedded into LIBRT, the first step is to extricate it to its own directory. That will require some header reshuffling and a lot of work to formally split LIBNMG's API entirely from LIBRT. With that complete, the next step is documentation cleanup pulling all of the source code comments into the nmg.h public header (or sub-header thereof) to become familiarized with the API. Then begin testing the lowest-level functions to make sure they do exactly what they are supposed to do by creating API unit tests. Test-driven development is a must here.<br />
<br />
=References=<br />
<br />
* http://en.wikipedia.org/wiki/Topological_manifold<br />
* http://cubit.sandia.gov/help-version8.1/Chapter_1/Features/Non-Manifold_Topology.html<br />
* http://ftp.arl.army.mil/mike/papers/90nmg/<br />
* src/librt/primitives/nmg<br />
* include/nmg.h<br />
* include/raytrace.h<br />
<br />
= Requirements=<br />
<br />
* Ability to read and refactor complex C<br />
* Ability to write API unit tests</div>
Starseeker
https://brlcad.org/w/index.php?title=NURBS_Booleans&diff=6507
NURBS Booleans
2014-03-01T12:58:38Z
<p>Starseeker: Update NURBS Boolean task</p>
<hr />
<div>Non-Uniform Rational B-Splines are the dominant geometric representation format in Computer Aided Design. BRL-CAD's support for these primitives is relatively recent, and while we can raytrace them we are still developing the ability to perform operations such as subtraction and intersection between two solid NURBS Boundary Representations (Breps). This ability is fundamental to a wide variety of editing operations and essential to the process of converting implicit-primitive based boolean geometry trees to evaluated NURBS models.<br />
<br />
This task would build on work done in previous GSoC projects to make existing functionality robust and fast. <br />
<br />
=References=<br />
<br />
* src/libbrep<br />
* src/librt/primitives/brep<br />
* src/other/openNURBS<br />
* include/raytrace.h<br />
* include/rtgeom.h<br />
<br />
* http://brlcad.org/wiki/User:Phoenix/GSoc2013/Reports<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C++<br />
*Solid mathematical foundations</div>
Starseeker
https://brlcad.org/w/index.php?title=STEP_importer_improvements&diff=6506
STEP importer improvements
2014-03-01T12:52:17Z
<p>Starseeker: Update STEP importer task</p>
<hr />
<div><br />
STEP is the current standard for exchange of CAD data between different software packages. BRL-CAD makes use of the STEPcode libraries to support its step-g converter, but the converter is still in its infancy.<br />
<br />
The current importer focuses on AP203 import, and needs to support a large number of data types:<br />
<br />
** Surfaces that are stored individually without Brep superstructure (see, for example, the wing shapes generated by OpenVSP: http://www.openvsp.org/wiki/doku.php?id=step) Even though these are not proper "solids" in the BRL-CAD sense of the term, we can and should import them - if nothing else, we can create one Brep object per surface and then develop post-processing tools to "stitch" the surfaces into a solid.<br />
** Isolated curves can be brought in as part of sketch primitives.<br />
** Polygonal data<br />
** Unorganized triangle mesh data<br />
** Metadata (in many cases can be mapped to attributes, worst case perhaps store as binary objects...)<br />
** etc.<br />
<br />
Right now our importer is AP203 only - we are also interested in AP203e2, AP214, and AP242.<br />
<br />
<br />
=References=<br />
<br />
* src/conv/step<br />
** this is where the current step-g importers and exporters resides<br />
* src/other/step<br />
** this is STEPcode<br />
<br />
* Recommended Practices for AP203<br />
**http://www.steptools.com/support/stdev_docs/express/ap203/recprac203v8.pdf<br />
* Usage Guide for the STEP PDM Schema V1.2<br />
**http://www.steptools.com/support/stdev_docs/express/pdm/pdmug_release4_3.pdf<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C++</div>
Starseeker
https://brlcad.org/w/index.php?title=STEP_exporter&diff=6505
STEP exporter
2014-03-01T12:51:18Z
<p>Starseeker: mention AP203e2</p>
<hr />
<div>STEP is the current standard for exchange of CAD data between different software packages. BRL-CAD makes use of the STEPcode libraries to support import and export of STEP files, but STEP is a very large standard and there is a lot of additional work to be done.<br />
<br />
For this project, there's a lot of directions that can be taken:<br />
<br />
* We usually export Brep geometry since that is what AP203 supports, but newer STEP standards (AP214, AP242) also support a number of geometric primitives. We also don't currently support exporting mesh geometry (triangle or polygon based) and that's something we need to support, even if STEP isn't really a traditional container for triangle meshes.<br />
<br />
* We don't do much about trying to preserve our attribute metadata currently - explore what options are available for doing so.<br />
<br />
* Undoubtedly many more possibilities.<br />
<br />
<br />
The relevant standards are: AP203, AP203e2, AP214, and the in-development AP242. A number of useful resources are listed below.<br />
<br />
=References=<br />
<br />
* src/conv/step<br />
** this is where the current step-g importers and exporters resides<br />
* src/other/step<br />
** this is STEPcode<br />
<br />
* Recommended Practices for AP203<br />
**http://www.steptools.com/support/stdev_docs/express/ap203/recprac203v8.pdf<br />
* Usage Guide for the STEP PDM Schema V1.2<br />
**http://www.steptools.com/support/stdev_docs/express/pdm/pdmug_release4_3.pdf<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C++</div>
Starseeker
https://brlcad.org/w/index.php?title=STEP_exporter&diff=6504
STEP exporter
2014-03-01T12:45:55Z
<p>Starseeker: Update exporter task</p>
<hr />
<div>STEP is the current standard for exchange of CAD data between different software packages. BRL-CAD makes use of the STEPcode libraries to support import and export of STEP files, but STEP is a very large standard and there is a lot of additional work to be done.<br />
<br />
For this project, there's a lot of directions that can be taken:<br />
<br />
* We usually export Brep geometry since that is what AP203 supports, but newer STEP standards (AP214, AP242) also support a number of geometric primitives. We also don't currently support exporting mesh geometry (triangle or polygon based) and that's something we need to support, even if STEP isn't really a traditional container for triangle meshes.<br />
<br />
* We don't do much about trying to preserve our attribute metadata currently - explore what options are available for doing so.<br />
<br />
* Undoubtedly many more possibilities.<br />
<br />
<br />
There are three relevant standards: AP203, AP214, and the in-development AP242. A number of useful resources are listed below.<br />
<br />
=References=<br />
<br />
* src/conv/step<br />
** this is where the current step-g importers and exporters resides<br />
* src/other/step<br />
** this is STEPcode<br />
<br />
* Recommended Practices for AP203<br />
**http://www.steptools.com/support/stdev_docs/express/ap203/recprac203v8.pdf<br />
* Usage Guide for the STEP PDM Schema V1.2<br />
**http://www.steptools.com/support/stdev_docs/express/pdm/pdmug_release4_3.pdf<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C++</div>
Starseeker
https://brlcad.org/w/index.php?title=Plate_Mode_NURBS_raytracing&diff=6503
Plate Mode NURBS raytracing
2014-03-01T12:29:06Z
<p>Starseeker: /* References */ mention libbrep</p>
<hr />
<div>Often when modeling, it is necessary to represent solids with very large surface areas but very small thicknesses, such as sheet metal. It is often impractical to represent these thin solids exactly as bounded volumes, so an alternative approach is to model a surface and "tag" it with an implicit thickness. That is, when a ray intersects the surface, an "out" hit point is assigned some small distance from the initial hit point along the ray. BRL-CAD currently implements this modeling technique for the BoT primitive, and BoTs that utilize it are referred to as "plate mode".<br />
<br />
This task would be to implement plate mode raytracing for NURBS surfaces. Thin materials (such as those used for airplane skins) are a common modeling scenario for NURBS models.<br />
<br />
A student proposal on this topic would need demonstrate research into the various issues that arise when plate-mode raytracing is used and how to address them.<br />
<br />
=References=<br />
*src/librt/primitives/brep/brep.cpp<br />
** our new nurbs primitive<br />
*src/libbrep<br />
** where most of the current brep algorithms live<br />
*src/librt/primitives/bot<br />
** our "bag o' triangles" primitive implements plate mode meshes, perfect example to follow<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C/C++</div>
Starseeker
https://brlcad.org/w/index.php?title=Visualizing_Constructive_Solid_Geometry_(CSG)&diff=6502
Visualizing Constructive Solid Geometry (CSG)
2014-03-01T12:27:50Z
<p>Starseeker: Update task description for CSG graph visualization</p>
<hr />
<div>In recent years, tools like graphviz have made automatic graphical layout of graph structures in images both practical and useful. Traditionally, geometric hierarchies in BRL-CAD databases have been visualized either as lists or trees, and those methods continue to be the primary geometry browsing methods.<br />
<br />
This task would follow up on work from 2012 using automatic graph layout libraries to produce a graph based visualization of the structure of .g databases:<br />
<br />
http://brlcad.org/wiki/User:Cprecup/GSoC2012_progress<br />
<br />
The task is not simply to generate images of graphical geometry hierarchies - that is relatively straightforward and can be done with scripts - but to design graphical, interactive widgets that utilize graph algorithms to interactively display geometry structure in useful, intuitive and interactive ways (tying changes in wireframe 3D renderings to selection or de-selection of nodes in a graph display of .g geometry, for example). Some progress was made in 2012, but there is a lot more that can be done.<br />
<br />
Our current interfaces use the Tk toolkit, but Qt would also make an interesting toolkit for this sort of work.<br />
<br />
Proposals should include specific ideas (mockups and example layouts are a good way to convey graphical ideas).<br />
<br />
=References=<br />
<br />
* src/tclscripts<br />
* src/tclscripts/mged<br />
* src/tclscripts/archer<br />
* src/libtclcad<br />
<br />
Potentially useful libraries must be under a compatible (BSD, MIT, LGPL2) license - (work so far has been done using the Adaptagrams library):<br />
<br />
*Adaptagrams: http://adaptagrams.sourceforge.net/<br />
<br />
=Requirements=<br />
<br />
*Familiarity with Tcl/Tk and/or Qt<br />
*Familiarity with C/C++<br />
*Comfortable understanding of graphs (will be working with graph libraries)</div>
Starseeker
https://brlcad.org/w/index.php?title=Google_Summer_of_Code/Project_Ideas&diff=6485
Google Summer of Code/Project Ideas
2014-02-27T12:54:43Z
<p>Starseeker: /* Performance & Quality */ Intersections -> Booleans</p>
<hr />
<div>If you want to work on '''computer-aided design (CAD), geometry, or graphics''', you've come to the right place! Help us improve open source CAD.<br />
<br />
Well prepared proposals have an ''outstanding'' chance here. We consider proposals for all skill levels. Possibilities range from simple to crazy hard and everything in between. [https://lists.sourceforge.net/lists/listinfo/brlcad-devel Introduce yourself].<br />
<br />
We plan on selecting 6-12 students to work on web projects, C/C++ projects, and more. This year, BRL-CAD is coordinating with three other communities that will get 1-2 students each to help bridge our work and encourage collaboration. Projects that help exchange data or share code are desired!<br />
<br />
{|align="center" width="62%"<br />
|align="center" |http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png<br />
|colspan=2 align="center" |Under development for 30+ years, it's big, it's complicated, it's powerful. BRL-CAD will consider just about any project that relates to computer graphics or existing infrastructure.<br />
|}<br />
{|align="center" width="90%"<br />
|align="center" width="33%"|[http://openscad.org http://www.openscad.org/assets/img/logo.png]<br />
|align="center" width="33%"|[https://librecad.org http://librecad.org/files/live/sites/lc/files/WebImages/LogoLibrecad_logo.png]<br />
|align="center" width="33%"|[http://stepcode.org/mw/index.php?title=List_of_projects http://stepcode.org/STEPcode_logo_sm.png]<br />
|-<br />
|align="center"|'''OpenSCAD''': rich syntax, programmable geometry. Lots of possibilities to make it interoperate with BRL-CAD and LibreCAD.<br />
|align="center"|'''LibreCAD''': specializes in 2D CAD modeling, drafting, drawings. Help build a bridge to BRL-CAD or add STEP support.<br />
|align="center"|'''STEPcode''': file format on steroids, STEP is a complex standard for geometry used by nearly every pro CAD system.<br />
|}<br />
<br />
'''Unless there isn't a quality proposal, we intend to select at least one student for each of BRL-CAD's main categories as well as at least one student each for OpenSCAD, LibreCAD, and STEPcode.'''<br />
<br />
Remember that project descriptions are just ''initial ideas''. You must expand with [[Summer_of_Code/Application_Guidelines|considerably more detail]]. Change the goals to fit your experience and interests. See our '''[[Summer_of_Code/Checklist|checklist]]''' to get started.<br />
<br />
'''Project titles link to a page with more details.'''<br />
<br />
= BRL-CAD Projects =<br />
<br />
== Web Development ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Benchmark Performance Database]]:''' BRL-CAD's Benchmark has been used for two decades to compare performance across configurations. Build a database website. <br />
|Depends (likely PHP or Python)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Synchronize Wiki with Docbook]]:''' We use Docbook for most of our user documentation but find editing a wiki page much easier to use. Set up a system so the two are always in sync.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Interface]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the front-end usability.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Online Geometry Viewer Back-end]]:''' Continuation of existing work, improve our interface for viewing geometry online. Focus on the back-end infrastructure.<br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Mediawiki 3D Geometry Extension]]:''' Write an extension for Mediawiki that will visualize our .g files. Maybe leverage LLVM C->Javascript translation. <br />
|Depends (likely PHP or Python)<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Materials Database]]:''' Create a Materials Database web site for collecting, managing, and providing programmatic interfaces to material properties.<br />
|Depends (likely PHP or Python)<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|}<br />
<br />
<br />
== Geometry ==<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[NURBS Editing Support]]:''' BRL-CAD doesn't currently have support for editing NURBS primitives. Fix that.<br />
|align=center|C/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Overlap tool]]:''' Resolving geometric interferences (aka overlaps) is a common geometry editing activity. Design an awesome GUI for resolving conflicts.<br />
|align=center|Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison, Greenwald]]<br />
|-<br />
|align=left width=62%|'''[[Vector Drawings from NURBS]]:''' Huge impact here if you can update one or more of our raytracers to provide vector output instead of raster. Perhaps render directly to PDF or SVG.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[NMG Editing]]:''' Our structured polygonal mesh geometry (N-Manifold Geometry = NMG) is a common export format, but our NMG edit support is non-existent. We need something.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Visualizing Constructive Solid Geometry (CSG)]]:''' CSG forms a directed acyclic graph. Tree view widgets show a simple hierarchical representation, but we need something better.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|align=left width=62%|'''[[Plate Mode NURBS raytracing]]:''' Imported NURBS geometry often does NOT enclose space (i.e., not solid), so add support for specifying an implicit thickness.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[STEP exporter]]:''' We have an importer, we need a comprehensive exporter with support for implicit CSG, NURBS, or polygonal mesh geometry.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[STEP importer improvements]]:''' We have an importer, but it's preliminary. Add support for importing hierarchy information, polygonal geometry, and implicit geometry.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Convert BoT to Pipe]]:''' Command line interface to convert facetted fluid/electrical line geometry into BRL-CAD native pipe solids.<br />
|align=center|C/C++/Tcl<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[IGES import improvements]]:''' We have extensive support for the International Geometry Exchange Standard (IGES) with our g-iges and iges-g converters, but they need updating.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Geometry Conversion Library]]:''' Probably our biggest open source asset is our extensive collection of importers and exporters. Turn them all into a universal conversion library. <br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Voxelize]] command:''' Convert geometry into voxel data sets by shooting a grid of rays. The finite element analysis and volumetric rendering folks will love you.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[COLLADA Importer]]:''' Create an importer for the COLLADA file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[X3D Importer]]:''' Create an importer for the X3D file format.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Importer]]:''' Create an importer for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[OpenSCAD Exporter]]:''' Create an exporter for OpenSCAD's format.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Python Geometry]]:''' Wrap BRL-CAD's primitives in Python, make it easier to script geometry creation. <br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== Performance & Quality ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[[OpenCL GPGPU Raytracing]]:''' We have about two dozen primitives that need to have a ray-object intersection function converted from C to OpenCL.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[Coherent Raytracing]]:''' Our current raytrace pipeline dispatches and processes one ray at a time. Send bundles and convert the pipeline into phases. <br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Booleans]]:''' We have NURBS surface-surface intersections working. Now we're using them to create evaluated forms of our CSG geometry. Make it more robust and faster.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Rossberg]]<br />
|-<br />
|align=left width=62%|'''[[NURBS Optimization and Cleanup]]:''' We have a fantastic implementation of NURBS evaluation but haven't gone back to clean up or speed it up. Make it purdy.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Fix Bugs]]:''' We take pride in our breadth of functionality and time-tested stability. We still have bugs. Identify some and fix 'em!<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|TBD]]<br />
|-<br />
|width=62%|'''[[NMG Raytracing Performance Improvement]]:''' BRL-CAD's structured mesh geometry (N-Manifold Geometry = NMG) needs some time in a profiler. Malloc during raytracing is bad.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Mesh library cleanup]]:''' BRL-CAD has an extensive n-manifold polygonal mesh library that needs some refactoring, testing, and optimization rework.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Space Partitioning for Tessellation]]:''' Technically an optimization task, make our geometry converters run an order of magnitude faster by using spatial partitioning during tessellation.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Code Reduction]]:''' BRL-CAD is more than 1M lines of code. Approximately 10% of that is duplication. Help reduce that percentage.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|}<br />
<br />
== Infrastructure ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[New Cross-Platform 3D Display Manager]]:''' BRL-CAD uses '''''display managers''''' for visualizing 3D geometry in a window. We want one that uses a cross-platform toolkit such as Qt + OGRE.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[New Cross-Platform 2D Framebuffer]]:''' BRL-CAD uses '''''framebuffers''''' to display 2D imagery. The merits of having a single interface for most platforms is self-evident.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometric Constraint Solver]]:''' Our LIBPC parametric constraint library is the work-in-progress foundation of being able to validate and describe geometry relationships.<br />
|align=center|C/C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[MGED to Archer Command Migration]]:''' Our next-generation editor (Archer) needs to have the same (700+) commands that are in MGED. Help make our next CAD interface awesome.<br />
|align=center|C and Tcl<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[General Tree Walker]]:''' We have a half dozen or more functions that will traverse a geometry hierarchy in different ways. There only needs to be one.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Rework of libbu/libbn to not require Tcl]]:''' Tcl's '''''C API''''' is used throughout BRL-CAD providing great abstractions, but we want our basic utility and numeric libraries (LIBBU & LIBBN) to stand alone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Yapp, Greenwald]]<br />
|-<br />
|width=62%|'''[[Consolidate image processing]]:''' We have 100+ image processing tools that independently read and write file data. Needs much reuse love.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[GED Transactions]]:''' Migrating functionality from our MGED geometry editor into our LIBGED library provided excellent code reuse, but now we need transactions so that actions can be undone.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Add exec option to search]]:''' Our LIBGED library provides a ''search'' command very similar to the UNIX ''find'' command for scanning through geometry. Implement the -exec option.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp]]<br />
|-<br />
|width=62%|'''[[Geometry Selection Functionality]]:''' Implement a new selection command that lets you temporarily group objects based on spatial, attribute, or geometric properties.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[Astronomical units]]:''' We already go "big", but accurately modeling at a galactic scale redefines that notion...<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Python Bindings]]:''' With or without SWIG, wrap BRL-CAD's command library API so you can issue our creation and editing commands from Python.<br />
|align=center|Python<br />
|align=center|Easy<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== Rendering & Scientific Analysis ==<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[Shader Enhancements]]:''' We have a functioning custom shader system in BRL-CAD, but there are now folks that specialize and there's lot of room for improvements.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Greenwald]]<br />
|-<br />
|width=62%|'''[[Material and Shader Objects]]:''' This one is a biggie but easy. Implement new object entities for describing shaders and material properties, use them during ray tracing.<br />
|align=center|C<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|-<br />
|width=62%|'''[[GUI Integration of Analysis Tools]]:''' There are a ''lot'' of visualization tools in BRL-CAD, but most aren't integrated with the GUI. Visualizing directly within the GUI would improve usability.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg]]<br />
|-<br />
|width=62%|'''[[Generalized abstracted spacial partitioning capability]]:''' Need more be said? If you're familiar with BSPs, KD trees, and grid structures, then this one is for you.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison]]<br />
|-<br />
|width=62%|'''[[High Dynamic Range Support]]:''' We don't have displays supporting this yet, but that's never stopped us before. Implement support for images with more than 8-bits per channel.<br />
|align=center|C and/or C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Yapp]]<br />
|-<br />
|width=62%|'''[[Analysis Library]]:''' There are various tools in BRL-CAD for calculating weights, moments of inertia, and more. They're stand-alone applications. Turn them into a library.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Yapp, Morrison]]<br />
|-<br />
|width=62%|'''[[Celestial mechanics particle system]]:''' Simulate solar systems and galaxies.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald]]<br />
|-<br />
|width=62%|'''[[Non-vacuum gravity simulator]]:''' Simulate falling to earth.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Greenwald, Morrison, Yapp]]<br />
|-<br />
|width=62%|'''[[Polarization]]:''' We already do multispectral ray tracing, but don't simulate polarization effects. Implement ray splitting and filtering.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison, Rossberg]]<br />
|-<br />
|width=62%|'''[[Density functions]]:''' Accurately represent everything from atmosphere to bone. Implement support for parametric density functions for homogenous materials.<br />
|align=center|C<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Rossberg, Morrison]]<br />
|-<br />
|width=62%|'''[[Bending light]]:''' Think gravity wells and satellite cameras.<br />
|align=center|C<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Morrison]]<br />
|}<br />
<br />
<br />
== <An Idea of Your Own> ==<br />
<br />
Do you have an idea of your own? Maybe you need [http://brlcad.org/~sean/ideas.html more ideas] to inspire you? We're very open to areas of academic research, industry applications, and ideas that get you hooked on open source CAD development.<br />
<br />
Requirements:<br />
<br />
* Passion for the task being suggested<br />
<br />
<br />
= OpenSCAD Projects =<br />
<br />
[http://openscad.org OpenSCAD] is a parametric solid 3D modeling tool which uses a Domain Specific Language to specify designs as plain text. It is specifically designed with 3D printing in mind.<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages/Tools<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-issue-handling Issue Handling]:''' Day-to day issue and community management, fix incoming and existin issues. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-test-framework-improvements Test Framework Improvements]:''' Improve tests and test framework. Good place to get started.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-thingiverse-customizer-and-sculpteo-customizer-support Thingiverse Customizer and Sculpteo customizer support]:''' Design and implement a customization GUI similar to Thingiverse Customizer.<br />
|align=center|C++<br />
|align=center|EASY-MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-user-interface-brushup User interface brushup]:''' General brushup of the user interface.<br />
|align=center|C++ Qt<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-improve-dxf-import Improve DXF import]:''' Look into using an external library for DXF import (and export?).<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-opengl-framework OpenGL framework]:''' Rewrite the OpenGL rendering code to use a rendering framework. Focus on compatibility with OpenGL ES2 and rendering performance.<br />
|align=center|C++ OpenGL<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-persistant-caching Persistant caching]:''' Implement a disk-based version of the internal memory caches<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-multi-threaded-geometry-evaluation Multi-threaded Geometry Evaluation]:''' Implement multi-threaded evaluation of geometry.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-web-front-end Web front-end]:''' Experiment with decoupling the user interface from the backend by writing a web front-end and defining how to interface with the backend<br />
|align=center|Web + some C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|-<br />
|align=left width=62%|'''[https://github.com/openscad/openscad/wiki/Ideas:-GSoC-2014#wiki-larger-tasks-for-particularly-experienced-people Larger tasks for particularly experienced people]:''' Various harder tasks which are not fully specified and requires significant effort to design and implement.<br />
|align=center|C++<br />
|align=center|HARD<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Marius]]<br />
|}<br />
<br />
The OpenSCAD team is also open to new ideas. Please [http://www.openscad.org/community.html get in touch] to discuss your ideas and convince a mentor to back it.<br />
<br />
<br />
= LibreCAD Projects =<br />
<br />
LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. Support and documentation is free from our large, dedicated community of users, contributors and developers.<br />
<br />
{| bgcolor=#fff<br />
!<br />
!align=center|Languages<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[LibreCAD 3 kickoff]]:''' LibreCAD is a popular 2D CAD tool but is based on a old (10 years old) codebase that is hard to add features to. LibreCAD 3 aim's to completely rewrite LibreCAD in different different libraries to make coding against librecad easer.<br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|R. van Twisk]]<br />
|-<br />
|}<br />
<br />
<br />
= STEPcode Projects =<br />
<br />
{| bgcolor=#fff width=100%<br />
!<br />
!align=center|Languages<br />
!Impact<br />
!align=center|Difficulty<br />
!align=center|Contacts<br />
|-<br />
|width=62%|'''[[STEP Coverage Test]]:''' Write a program that links against STEPcode and generates a STEP output instantiating every entity for a given schema. Goal is a comprehensive program and data file for testing STEP import/export.<br />
|ANY (C/C++, Python, Java, Perl, ...)<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Incremental Loading]]:''' Basically take a work-in-progress to the next level. Modify the STEP parser to only read what it needs when it needs it, test, clean up, profile, and optimize.<br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Multiple Protocol Parsing]]:''' Currently creates a parser that works with a specific application protocol (e.g., AP203, AP214). Make it work with multiple simultaneously. <br />
|align=center|C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP AP 242 Parser]]:''' We already parse a subset of AP203, but the new kid on the block is AP242. Make AP242 work with BRL-CAD's step-g importer. <br />
|align=center|C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|- <br />
|width=62%|'''[[STEP Libraries]]:''' We took over NIST's STEP Class Library (SCL) project during our development of a STEP importer. SCL has since turned into a larger community collaboration. The code needs cleanup.<br />
|align=center|C/C++<br />
|align=center|EASY<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|-<br />
|width=62%|'''[[STEP Viewer]]:''' STEP is a common CAD file format supported by just about every major CAD system. Given we have an importer and an interface for displaying geometry, a stand-alone STEP file viewer has some great potential.<br />
|align=center|C/C++<br />
|align=center|MEDIUM<br />
|align=center|[[Google_Summer_of_Code/Project_Ideas#Mentors|Mark, Charlie]]<br />
|}<br />
<br />
<br />
= Mentors =<br />
<br />
BRL-CAD operates under group mentorship. That means you can contact anyone, not just the person assigned to you, for assistance. The mailing list and IRC channel are the preferred communication methods.<br />
<br />
* Christopher Sean Morrison<br />
** brlcad on irc.freenode.net<br />
** Org admin, BRL-CAD open source project lead<br />
<br />
* Erik Greenwald<br />
** ``Erik on irc.freenode.net<br />
** Org admin, BRL-CAD core dev<br />
<br />
* Cliff Yapp<br />
** starseeker on irc.freenode.net<br />
** BRL-CAD Mentor, core dev<br />
<br />
* Daniel Rossberg<br />
** d_rossberg on irc.freenode.net<br />
** BRL-CAD Mentor, core dev, math expert<br />
<br />
* H.S. Rai<br />
** hsrai on irc.freenode.net<br />
** BRL-CAD Mentor, math expert<br />
<br />
* Tom Browder<br />
** BRL-CAD Mentor, analysis expert<br />
<br />
* Mark Pictor<br />
** mpictor on irc.freenode.net<br />
** STEPcode Mentor<br />
<br />
* Charlie Stirk<br />
** cstirk<br />
** STEPcode Mentor<br />
<br />
* Marius Kintel<br />
** kintel on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Torsten Paul<br />
** teepee on irc.freenode.net<br />
** OpenSCAD Mentor<br />
<br />
* Dongxu Li<br />
** dli on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jose Rallaz<br />
** rallazz on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Ries van Twisk<br />
** ries on irc.freenode.net<br />
** LibreCAD Mentor<br />
<br />
* Jasleen Kaur<br />
** jasleen on irc.freenode.net<br />
** LibreCAD Mentor</div>
Starseeker
https://brlcad.org/w/index.php?title=NURBS_Booleans&diff=6483
NURBS Booleans
2014-02-27T12:53:28Z
<p>Starseeker: Starseeker moved page NURBS Intersections to NURBS Booleans: Work is now much more in boolean evals than intersections themselves</p>
<hr />
<div>Non-Uniform Rational B-Splines are the dominant geometric representation format in Computer Aided Design. BRL-CAD's support for these primitives is relatively recent, and while we can raytrace them we do not have the ability to perform operations such as surface/surface intersection calculations. These abilities are fundamental to a wide variety of editing operations and essential to the process of converting implicit-primitive based boolean geometry trees to evaluated NURBS models.<br />
<br />
This task would target the problem of implementing an algorithm to calculate surface/surface intersection for general NURBS surfaces. These guys implemented something very similar although their implementation was not robust: http://www.cs.unc.edu/~geom/CSG/boole.html These guys followed that work and implemented a robust solution, but killed performance: http://www.cs.unc.edu/~geom/ESOLID/ (Note that while the papers are excellent references from which to get ideas, the source code from these efforts is not license compatible with BRL-CAD.) You will need to be very careful about tolerances and tolerance tracking without resorting to fixed-precision arithmetic. There are a variety of other research papers on the surface/surface intersection problem - students interested in this topic should discuss it with developers on the IRC channel or via email.<br />
<br />
=References=<br />
<br />
* src/librt/primitives/brep<br />
* src/librt/primitives/bspline<br />
* src/other/openNURBS<br />
* src/librt/opennurbs_ext.*<br />
* include/opennurbs_ext.h<br />
* include/raytrace.h<br />
* include/rtgeom.h<br />
<br />
=Requirements=<br />
<br />
*Familiarity with C++<br />
*Solid mathematical foundations</div>
Starseeker
https://brlcad.org/w/index.php?title=NURBS_Intersections&diff=6484
NURBS Intersections
2014-02-27T12:53:28Z
<p>Starseeker: Starseeker moved page NURBS Intersections to NURBS Booleans: Work is now much more in boolean evals than intersections themselves</p>
<hr />
<div>#REDIRECT [[NURBS Booleans]]</div>
Starseeker