Skip to content

Commit f4e8f8c

Browse files
bnbailey-pslsmbanx
andcommitted
[1.3.24] 2024-11-27
* Added utilities/dependencies.sh script to automatically install all dependent libraries on Linux and MacOS. Credit to Sean Banks for creating this script. *Context* - Seemed to still have an issue with tube objects, where there was severe twisting. *Plant Architecture* - Numerous model improvements via parameter tuning and texture adjustments - Added rice, maize, and walnut models - Changed map structures that hold organ prototypes to use the prototype function pointer as the key rather than a string, which allows different prototypes along a single shoot. - Peduncles were not correctly lining up with their parent petioles. *Radiation* - Error corrected in radiation camera documentation example code. *Photosynthesis* - Updated code to include stomatal sidedness option (this was already described in the documentation, although it had not been implemented). Co-authored-by: Sean Banks <[email protected]>
1 parent eac7abc commit f4e8f8c

File tree

883 files changed

+45076
-43631
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

883 files changed

+45076
-43631
lines changed

CONTRIBUTING.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ If you have comments or suggestions, please feel free to [open an issue](https:/
1010

1111
Documentation source files for the Helios core can be found in `doc/UserGuide.dox`, and for each plugin in the corresponding plug-in directory sub-folder `doc/*.dox`. These files are written in [Doxygen](https://www.doxygen.nl/index.html) format. Additionally, documentation for data structures, functions, methods, etc. is written directly in the corresponding header file, and also uses Doxygen syntax.
1212

13-
If you edit the documentation and want to view the changes, you can build the documentation HTML files. To do this, you need to have Doxygen installed on your system. Then, navigate to the Helios root directory and run:
13+
If you edit the documentation and want to view the changes, you can build the documentation HTML files. To do this, you need to have Doxygen, LaTeX and ghostscript installed on your system. For Linux:
14+
15+
```bash
16+
sudo apt-get install doxygen texlive-full ghostscript
17+
```
18+
19+
To build the documentation, navigate to the Helios root directory and run:
1420

1521
```bash
1622
doxygen doc/Doxyfile

core/src/Context.cpp

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3630,16 +3630,17 @@ void Tube::appendTubeSegment( const helios::vec3 &node_position, float node_radi
36303630
if (rotation_axis.magnitude() > 1e-6) {
36313631
float angle = acos(std::clamp(previous_axial_vector * axial_vector, -1.0f, 1.0f));
36323632
previous_radial_dir = rotatePointAboutLine(previous_radial_dir, nullorigin, rotation_axis, angle);
3633-
} else {
3634-
// Handle the case of nearly parallel vectors
3635-
// Ensure previous_radial_dir remains orthogonal to axial_vector
3636-
previous_radial_dir = cross(axial_vector, previous_radial_dir);
3637-
if (previous_radial_dir.magnitude() < 1e-6) {
3638-
// If still degenerate, choose another orthogonal direction
3639-
previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
3640-
}
3641-
previous_radial_dir.normalize();
36423633
}
3634+
// else {
3635+
// // Handle the case of nearly parallel vectors
3636+
// // Ensure previous_radial_dir remains orthogonal to axial_vector
3637+
// previous_radial_dir = cross(axial_vector, previous_radial_dir);
3638+
// if (previous_radial_dir.magnitude() < 1e-6) {
3639+
// // If still degenerate, choose another orthogonal direction
3640+
// previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
3641+
// }
3642+
// previous_radial_dir.normalize();
3643+
// }
36433644
}
36443645

36453646
previous_axial_vector = axial_vector;
@@ -3750,16 +3751,17 @@ void Tube::appendTubeSegment(const helios::vec3 &node_position, float node_radiu
37503751
if (rotation_axis.magnitude() > 1e-6) {
37513752
float angle = acos(std::clamp(previous_axial_vector * axial_vector, -1.0f, 1.0f));
37523753
previous_radial_dir = rotatePointAboutLine(previous_radial_dir, nullorigin, rotation_axis, angle);
3753-
} else {
3754-
// Handle the case of nearly parallel vectors
3755-
// Ensure previous_radial_dir remains orthogonal to axial_vector
3756-
previous_radial_dir = cross(axial_vector, previous_radial_dir);
3757-
if (previous_radial_dir.magnitude() < 1e-6) {
3758-
// If still degenerate, choose another orthogonal direction
3759-
previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
3760-
}
3761-
previous_radial_dir.normalize();
37623754
}
3755+
// else {
3756+
// // Handle the case of nearly parallel vectors
3757+
// // Ensure previous_radial_dir remains orthogonal to axial_vector
3758+
// previous_radial_dir = cross(axial_vector, previous_radial_dir);
3759+
// if (previous_radial_dir.magnitude() < 1e-6) {
3760+
// // If still degenerate, choose another orthogonal direction
3761+
// previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
3762+
// }
3763+
// previous_radial_dir.normalize();
3764+
// }
37633765
}
37643766

37653767
previous_axial_vector = axial_vector;
@@ -4791,16 +4793,17 @@ uint Context::addTubeObject(uint radial_subdivisions, const std::vector<vec3> &n
47914793
if (rotation_axis.magnitude() > 1e-6) {
47924794
float angle = acos(std::clamp(previous_axial_vector * axial_vector, -1.0f, 1.0f));
47934795
previous_radial_dir = rotatePointAboutLine(previous_radial_dir, nullorigin, rotation_axis, angle);
4794-
} else {
4795-
// Handle the case of nearly parallel vectors
4796-
// Ensure previous_radial_dir remains orthogonal to axial_vector
4797-
previous_radial_dir = cross(axial_vector, previous_radial_dir);
4798-
if (previous_radial_dir.magnitude() < 1e-6) {
4799-
// If still degenerate, choose another orthogonal direction
4800-
previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
4801-
}
4802-
previous_radial_dir.normalize();
48034796
}
4797+
// else {
4798+
// // Handle the case of nearly parallel vectors
4799+
// // Ensure previous_radial_dir remains orthogonal to axial_vector
4800+
// previous_radial_dir = cross(axial_vector, previous_radial_dir);
4801+
// if (previous_radial_dir.magnitude() < 1e-6) {
4802+
// // If still degenerate, choose another orthogonal direction
4803+
// previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
4804+
// }
4805+
// previous_radial_dir.normalize();
4806+
// }
48044807
}
48054808

48064809
previous_axial_vector = axial_vector;
@@ -4921,16 +4924,17 @@ uint Context::addTubeObject(uint radial_subdivisions, const std::vector<vec3> &n
49214924
if (rotation_axis.magnitude() > 1e-6) {
49224925
float angle = acos(std::clamp(previous_axial_vector * axial_vector, -1.0f, 1.0f));
49234926
previous_radial_dir = rotatePointAboutLine(previous_radial_dir, nullorigin, rotation_axis, angle);
4924-
} else {
4925-
// Handle the case of nearly parallel vectors
4926-
// Ensure previous_radial_dir remains orthogonal to axial_vector
4927-
previous_radial_dir = cross(axial_vector, previous_radial_dir);
4928-
if (previous_radial_dir.magnitude() < 1e-6) {
4929-
// If still degenerate, choose another orthogonal direction
4930-
previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
4931-
}
4932-
previous_radial_dir.normalize();
49334927
}
4928+
// else {
4929+
// // Handle the case of nearly parallel vectors
4930+
// // Ensure previous_radial_dir remains orthogonal to axial_vector
4931+
// previous_radial_dir = cross(axial_vector, previous_radial_dir);
4932+
// if (previous_radial_dir.magnitude() < 1e-6) {
4933+
// // If still degenerate, choose another orthogonal direction
4934+
// previous_radial_dir = cross(axial_vector, vec3(1.0f, 0.0f, 0.0f));
4935+
// }
4936+
// previous_radial_dir.normalize();
4937+
// }
49344938
}
49354939

49364940
previous_axial_vector = axial_vector;

doc/CHANGELOG

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1966,4 +1966,23 @@ The radiation model has been re-designed, with the following primary additions:
19661966
- Error fixed when parsing XML files for strawberry canopies. Thanks to Heesup Yun for the fix.
19671967

19681968
*Radiation*
1969-
- Error corrected in the camera model related to the field of view and aspect ratio. Thanks to Peng Wei for this fix.
1969+
- Error corrected in the camera model related to the field of view and aspect ratio. Thanks to Peng Wei for this fix.
1970+
1971+
[1.3.24] 2024-11-27
1972+
1973+
* Added utilities/dependencies.sh script to automatically install all dependent libraries on Linux and MacOS. Credit to Sean Banks for creating this script.
1974+
1975+
*Context*
1976+
- Seemed to still have an issue with tube objects, where there was severe twisting.
1977+
1978+
*Plant Architecture*
1979+
- Numerous model improvements via parameter tuning and texture adjustments
1980+
- Added rice, maize, and walnut models
1981+
- Changed map structures that hold organ prototypes to use the prototype function pointer as the key rather than a string, which allows different prototypes along a single shoot.
1982+
- Peduncles were not correctly lining up with their parent petioles.
1983+
1984+
*Radiation*
1985+
- Error corrected in radiation camera documentation example code.
1986+
1987+
*Photosynthesis*
1988+
- Updated code to include stomatal sidedness option (this was already described in the documentation, although it had not been implemented).

doc/UserGuide.dox

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*! \mainpage Helios Documentation v1.3.23
1+
/*! \mainpage Helios Documentation v1.3.24
22

33
<p> <br> </p>
44

@@ -175,6 +175,20 @@ $ git pull
175175

176176
As Helios is simply C++ code, it can be used on any platform that supports C++ programming. If you prefer to use an interactive development environment (IDE), two great options are <a href="https://www.jetbrains.com/clion/">CLion</a> by JetBrains (recommended) and <a href="https://code.visualstudio.com">VS Code</a>. These IDEs are available on Windows, Linux, and Mac, and make setting up Helios projects relatively easy. CLion is free for educational purposes, and is loaded with very nice features for C++ development such as direct display of Helios documentation. VS Code also works, but is a little more clunky. Building and compiling from the command-line and using any text editor such as Vim or Emacs also works just fine.
177177

178+
\subsubsection Automatically Installing Helios Dependencies
179+
180+
Running Helios requires several dependent packages to be installed, depending on the plug-ins you are using. The sections below detail manual installation of dependent packages for Windows, Linux, and MacOS.
181+
182+
For Linux and MacOS, there is also a script that can be used to install all required packages for all plugins automatically, simply run the following shell script 'utilities/dependencies.sh' with the argument "ALL" (or with no arguments) as follows: `source dependencies.sh`
183+
184+
There are a few additional options for installing dependencies if it is not necessary to use all plugins.
185+
186+
To install only the dependencies required to run Helios with no plugins (or plugins that require no packages), use the argument "BASE": `source dependencies.sh BASE`
187+
188+
To install only the dependencies required to run Helios with the visualizer plugin, use the argument "VIS": `source dependencies.sh VIS`
189+
190+
To install only the dependencies required to run Helios with CUDA (required for the Radiation, Energy Balance, LiDAR, Aerial LiDAR, and Voxel Intersection plugins), use the argument "CUDA": `source dependencies.sh CUDA`
191+
178192
\section SetupPC Set-up on Windows PC
179193

180194
\subsection SetupPCMSVC Install Microsoft Visual Studio C++ compiler tools
@@ -227,6 +241,10 @@ $ git pull
227241

228242
OptiX is normally packaged with Helios, such that you do not have to worry about installing it. However, if you are using Windows Subsystem for Linux (WSL), you will need to manually install OptiX since the version included with Helios does not have the required drivers for WSL. You can follow the instructions on this site to perform the installation: <a href="https://forums.developer.nvidia.com/t/problem-running-optix-7-6-in-wsl/239355/7">https://forums.developer.nvidia.com/t/problem-running-optix-7-6-in-wsl/239355/7</a>.
229243

244+
Alternatively, simply run the dependencies script found in the utilities/ folder: `source dependencies.sh`
245+
246+
This will automatically install and configure the Linux drivers (version 470.256.02) to run OptiX.
247+
230248
\section SetupLinux Set-up on Linux
231249

232250
\subsection SetupLinuxCLion Setting up basic build functionality

doc/header.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<tr id="projectrow">
4141
<td id="projectlogo"><img alt="Logo" src="Helios_logo_small.png"/></td>
4242
<td id="projectalign">
43-
<div id="projectname"><span id="projectnumber">&#160;v1.3.23</span>
43+
<div id="projectname"><span id="projectnumber">&#160;v1.3.24</span>
4444
</div>
4545
</td>
4646
</tr>

0 commit comments

Comments
 (0)