Skip to content

Commit

Permalink
[1.3.11] 2024-05-24
Browse files Browse the repository at this point in the history
*Context*
- Context::filterPrimitivesByData() was not properly filtering out primitives that did not have the specified primitive data field.

*Radiation*
- Added overloaded version of RadiationModel::scaleSpectrum() that performs scaling in-place without creating new global data.
- Periodic boundary conditions were not working correctly with the radiation camera.
- Output radiation images were incorrectly flipped about the vertical axis.
- There was an error with texture coordinates. For Patches, textures were flipped about the x- and y-directions, and for Triangles, textures were flipped about the y-direction.
- Combined DGK colorboard spectra in plugins/radiationmodel/spectral_data/color_board/ into a single file named DGK_DKK_colorboard.xml. Also added a JPEG image reference of the colorboard.
- Added Calibrite ColorChecker colorboard in plugins/radiationmodel/spectral_data/color_board/.
- ColorCalibration::addColorboard() was changed to accept everything that is needed to fully define the colorboard. Accordingly, ColorCalibration::setColorboardReflectivity() was removed.
- Argument order of ColorCalibration::addDefaultColorboard() was changed to be consistent with ColorCalibration::addColorboard() and typical Helios convention.
- Added method to output optional primitive data (reflectivity and transmissivity values).
- Updated calibrated_CREE6500K_Basler-acA2500-20gc_spectral_response_[*] spectra in the camera library to be properly normalized.
  • Loading branch information
bnbailey-psl committed May 24, 2024
1 parent ed9430e commit 7345c95
Show file tree
Hide file tree
Showing 658 changed files with 107,753 additions and 56,009 deletions.
231 changes: 123 additions & 108 deletions core/src/Context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8513,151 +8513,166 @@ float Context::sumPrimitiveSurfaceArea( const std::vector<uint> &UUIDs ) const{

std::vector<uint> Context::filterPrimitivesByData( const std::vector<uint> &UUIDs, const std::string &primitive_data_label, float filter_value, const std::string &comparator ){

if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}
if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}

std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_FLOAT ){
float data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}
std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_FLOAT ){
float data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}

std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
}else{
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}
}

return UUIDs_out;
return UUIDs_out;

}

std::vector<uint> Context::filterPrimitivesByData( const std::vector<uint> &UUIDs, const std::string &primitive_data_label, double filter_value, const std::string &comparator ){

if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}
if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}

std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_DOUBLE ){
double data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}
std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_DOUBLE ){
double data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}

std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
}else{
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}
}

return UUIDs_out;
return UUIDs_out;

}

std::vector<uint> Context::filterPrimitivesByData( const std::vector<uint> &UUIDs, const std::string &primitive_data_label, int filter_value, const std::string &comparator ){

if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}
if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}

std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_INT ){
int data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}
std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_INT ){
int data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}

std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
}else{
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}
}

return UUIDs_out;
return UUIDs_out;

}

std::vector<uint> Context::filterPrimitivesByData( const std::vector<uint> &UUIDs, const std::string &primitive_data_label, uint filter_value, const std::string &comparator ){

if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}
if( comparator!="==" && comparator!=">" && comparator!="<" && comparator!=">=" && comparator!="<=" ){
helios_runtime_error("ERROR (Context::filterPrimitivesByData): Invalid comparator. Must be one of '==', '>', '<', '>=', or '<='.");
}

std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_UINT ){
uint data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}
std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_UINT ){
uint data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( comparator=="==" && data==filter_value ){
continue;
}else if ( comparator==">" && data>filter_value ) {
continue;
}else if ( comparator=="<" && data<filter_value ){
continue;
}else if ( comparator==">=" && data>=filter_value ){
continue;
}else if ( comparator=="<=" && data<=filter_value ){
continue;
}

std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
std::swap( UUIDs_out.at(p),UUIDs_out.back() );
UUIDs_out.pop_back();
}else{
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}
}

return UUIDs_out;
return UUIDs_out;

}

std::vector<uint> Context::filterPrimitivesByData( const std::vector<uint> &UUIDs, const std::string &primitive_data_label, const std::string &filter_value ){

std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_STRING ){
std::string data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( data!=filter_value ) {
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
std::vector<uint> UUIDs_out = UUIDs;
for( int p=UUIDs.size()-1; p>=0; p-- ){
uint UUID = UUIDs_out.at(p);
if( doesPrimitiveDataExist(UUID,primitive_data_label.c_str()) && getPrimitiveDataType(UUID,primitive_data_label.c_str())==HELIOS_TYPE_STRING ){
std::string data;
getPrimitiveData(UUID,primitive_data_label.c_str(),data);
if( data!=filter_value ) {
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}else{
std::swap(UUIDs_out.at(p), UUIDs_out.back());
UUIDs_out.pop_back();
}
}
}

return UUIDs_out;
return UUIDs_out;

}
19 changes: 18 additions & 1 deletion doc/CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -1622,4 +1622,21 @@ The radiation model has been re-designed, with the following primary additions:
- Added synthetic annotation self-test sample.
- Added synthetic annotation to utilities/run_samples.sh automated testing script.
- Error fixed in SyntheticAnnotation::setCameraPosition() where arguments were not being correctly assigned.
- Error fixed in SyntheticAnnotation::render() where the 'outputdir' string needed to be converted to string in the error message.
- Error fixed in SyntheticAnnotation::render() where the 'outputdir' string needed to be converted to string in the error message.

[1.3.11] 2024-05-24

*Context*
- Context::filterPrimitivesByData() was not properly filtering out primitives that did not have the specified primitive data field.

*Radiation*
- Added overloaded version of RadiationModel::scaleSpectrum() that performs scaling in-place without creating new global data.
- Periodic boundary conditions were not working correctly with the radiation camera.
- Output radiation images were incorrectly flipped about the vertical axis.
- There was an error with texture coordinates. For Patches, textures were flipped about the x- and y-directions, and for Triangles, textures were flipped about the y-direction.
- Combined DGK colorboard spectra in plugins/radiationmodel/spectral_data/color_board/ into a single file named DGK_DKK_colorboard.xml. Also added a JPEG image reference of the colorboard.
- Added Calibrite ColorChecker colorboard in plugins/radiationmodel/spectral_data/color_board/.
- ColorCalibration::addColorboard() was changed to accept everything that is needed to fully define the colorboard. Accordingly, ColorCalibration::setColorboardReflectivity() was removed.
- Argument order of ColorCalibration::addDefaultColorboard() was changed to be consistent with ColorCalibration::addColorboard() and typical Helios convention.
- Added method to output optional primitive data (reflectivity and transmissivity values).
- Updated calibrated_CREE6500K_Basler-acA2500-20gc_spectral_response_[*] spectra in the camera library to be properly normalized.
2 changes: 1 addition & 1 deletion doc/UserGuide.dox
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*! \mainpage Helios Documentation v1.3.10
/*! \mainpage Helios Documentation v1.3.11

<p> <br> </p>

Expand Down
2 changes: 1 addition & 1 deletion doc/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="Helios_logo_small.png"/></td>
<td id="projectalign">
<div id="projectname"><span id="projectnumber">&#160;v1.3.10</span>
<div id="projectname"><span id="projectnumber">&#160;v1.3.11</span>
</div>
</td>
</tr>
Expand Down
Loading

0 comments on commit 7345c95

Please sign in to comment.