#include <opennurbs_string_value.h>

Public Types

enum  ScaleStringFormat : unsigned char {
  ScaleStringFormat::None = 0, ScaleStringFormat::RatioFormat = 1, ScaleStringFormat::EquationFormat = 2, ScaleStringFormat::FractionFormat = 3,
  ScaleStringFormat::Unset = 0xFF
}
 Specifies prefered formats for automatically created string descriptions of a scale value. More...
 

Public Member Functions

 ON_ScaleValue ()=default
 
 ON_ScaleValue (const ON_ScaleValue &)=default
 
 ~ON_ScaleValue ()=default
 
const ON_SHA1_Hash ContentHash () const
 
bool IsSet () const
 
bool IsUnset () const
 
const class ON_LengthValueLeftLengthValue () const
 
double LeftToRightScale () const
 
ON_ScaleValueoperator= (const ON_ScaleValue &)=default
 
bool Read (class ON_BinaryArchive &archive)
 
const class ON_LengthValueRightLengthValue () const
 
double RightToLeftScale () const
 
const ON_wStringScaleAsString () const
 
const wchar_t * ScaleAsStringPointer () const
 
const ON_ParseSettings ScaleStringParseSettings () const
 
void SwapLeftAndRight ()
 
bool Write (class ON_BinaryArchive &archive) const
 

Static Public Member Functions

static int Compare (const ON_ScaleValue &lhs, const ON_ScaleValue &rhs)
 
static ON_ScaleValue Create (const class ON_LengthValue &left_side_length, const class ON_LengthValue &right_side_length, ON_ScaleValue::ScaleStringFormat string_format_preference)
 
static ON_ScaleValue CreateFromString (ON_ParseSettings parse_settings, const wchar_t *string)
 Create an ON_ScaleValue by parsing a string. More...
 
static ON_ScaleValue CreateFromSubString (ON_ParseSettings parse_settings, const wchar_t *string, int string_count, const wchar_t **string_end)
 Create an ON_ScaleValue by parsing a string. More...
 
static ON_ScaleValue::ScaleStringFormat ScaleStringFormatFromUnsigned (unsigned int scale_string_format_as_unsigned)
 

Static Public Attributes

static const ON_ScaleValue OneToOne
 
static const ON_ScaleValue Unset
 

Member Enumeration Documentation

◆ ScaleStringFormat

enum ON_ScaleValue::ScaleStringFormat : unsigned char
strong

Specifies prefered formats for automatically created string descriptions of a scale value.

Enumerator
None 

No preference for automatically created string descriptions of a scale value.

RatioFormat 

Prefer the ratio format using a colon, like "1:4" or "4:1".

EquationFormat 

Prefer the equation format using an equal sign, like "1 = 4" or "4 = 1".

FractionFormat 

Prefer the fraction format using a slash, like "1/4" or "4/1".

Unset 

ON_ScaleValue::ScaleStringFormat::Unset is used to indicate no preference is set. This condition is different from ON_ScaleValue::ScaleStringFormat::None.

Constructor & Destructor Documentation

◆ ON_ScaleValue() [1/2]

ON_ScaleValue::ON_ScaleValue ( )
default

◆ ~ON_ScaleValue()

ON_ScaleValue::~ON_ScaleValue ( )
default

◆ ON_ScaleValue() [2/2]

ON_ScaleValue::ON_ScaleValue ( const ON_ScaleValue )
default

Member Function Documentation

◆ Compare()

static int ON_ScaleValue::Compare ( const ON_ScaleValue lhs,
const ON_ScaleValue rhs 
)
static

◆ ContentHash()

const ON_SHA1_Hash ON_ScaleValue::ContentHash ( ) const

◆ Create()

static ON_ScaleValue ON_ScaleValue::Create ( const class ON_LengthValue left_side_length,
const class ON_LengthValue right_side_length,
ON_ScaleValue::ScaleStringFormat  string_format_preference 
)
static
Parameters
left_length[in]
right_length[in]
Returns
A scale value for converting a distance from source_length to destination_length.

If you don't like the automatically created string value, then format the string yourself and use ON_ScaleValue::CreateFromString().

◆ CreateFromString()

static ON_ScaleValue ON_ScaleValue::CreateFromString ( ON_ParseSettings  parse_settings,
const wchar_t *  string 
)
static

Create an ON_ScaleValue by parsing a string.

Parameters
parse_settings[in] Pass ON_ParseSettings(context_length_unit_system,context_angle_unit_system,context_locale_id)
string[in] null terminated string to parse.
Returns
If the string is valid, the exact scale value is returned. If the string is not valid or parsing ends before the string's null terminator, the ON_ScaleValue::Unset is returned.

If the entire string is not parsed, that is an error condition. Use CreateFromSubString() to permit parsing a portion of the string. Examples: "1:4", "1=4", "1/4", "0.25" will set LeftToRightScale() = 4, RightToLeftScale() = 0.25

"4:1", "4=1", "4/1", "4" will set LeftToRightScale() = 0.25, RightToLeftScale() = 4

"100:1", "100=1", "1 meter = 1 centimeter" will set LeftToRightScale() = 0.01, RightToLeftScale() = 100

"1:100", "1=100", "1 centimeter = 1 meter" will set LeftToRightScale() = 100, RightToLeftScale() = 0.01

"12:1", "12=1", "12/1", "12", "1 foot = 1 inch" will set LeftToRightScale() = 0.08333..., RightToLeftScale() = 12

"1:12", "1=12", "1/12", "1 inch = 1 foot" will set LeftToRightScale() = 12, RightToLeftScale() = 0.08333...

"1:48", "1 = 48", "1/4 inch = 1 foot" will set LeftToRightScale() = 48, RightToLeftScale() = 0.0208333...

◆ CreateFromSubString()

static ON_ScaleValue ON_ScaleValue::CreateFromSubString ( ON_ParseSettings  parse_settings,
const wchar_t *  string,
int  string_count,
const wchar_t **  string_end 
)
static

Create an ON_ScaleValue by parsing a string.

Parameters
parse_settings[in] Pass ON_ParseSettings(context_length_unit_system,context_angle_unit_system,context_locale_id)
string[in] null terminated string to parse.
string_count[in] string[] and string_count specify the string to parse. If string_count >= 0, it specifies the maximum number of elements in string[] that may be parsed. If string_count = -1, then the string must contain a character that terminates scale parsing.
string_end[out] If string_end is not nullptr, then *string_end points to the first element in the string that was not parsed.
Returns
If the string is valid, the exact scale value is returned. If the string is not valid or parsing ends before the string's null terminator, the ON_ScaleValue::Unset is returned.

If the entire string is not parsed, that is an error condition. Use CreateFromSubString() to permit parsing a portion of the string.

Examples: "1:4", "1=4", "1/4", "0.25" will set LeftToRightScale() = 4, RightToLeftScale() = 0.25

"4:1", "4=1", "4/1", "4" will set LeftToRightScale() = 0.25, RightToLeftScale() = 4

"100:1", "100=1", "1 meter = 1 centimeter" will set LeftToRightScale() = 0.01, RightToLeftScale() = 100

"1:100", "1=100", "1 centimeter = 1 meter" will set LeftToRightScale() = 100, RightToLeftScale() = 0.01

"12:1", "12=1", "12/1", "12", "1 foot = 1 inch" will set LeftToRightScale() = 0.08333..., RightToLeftScale() = 12

"1:12", "1=12", "1/12", "1 inch = 1 foot" will set LeftToRightScale() = 12, RightToLeftScale() = 0.08333...

"1:48", "1 = 48", "1/4 inch = 1 foot" will set LeftToRightScale() = 48, RightToLeftScale() = 0.0208333...

◆ IsSet()

bool ON_ScaleValue::IsSet ( ) const

◆ IsUnset()

bool ON_ScaleValue::IsUnset ( ) const

◆ LeftLengthValue()

const class ON_LengthValue& ON_ScaleValue::LeftLengthValue ( ) const

◆ LeftToRightScale()

double ON_ScaleValue::LeftToRightScale ( ) const
Returns
A dimensionless scale factor. The word "dimensionless" is critical. Differneces in left and right side unit systems are accounted for in the returned value.

LeftToRightScale() = 1.0/RightToLeftScale() Examples: "1:4", "1=4", "1/4", "0.25" will set LeftToRightScale() = 4, RightToLeftScale() = 0.25

"4:1", "4=1", "4/1", "4" will set LeftToRightScale() = 0.25, RightToLeftScale() = 4

"100:1", "100=1", "1 meter = 1 centimeter" will set LeftToRightScale() = 0.01, RightToLeftScale() = 100

"1:100", "1=100", "1 centimeter = 1 meter" will set LeftToRightScale() = 100, RightToLeftScale() = 0.01

"12:1", "12=1", "12/1", "12", "1 foot = 1 inch" will set LeftToRightScale() = 0.08333..., RightToLeftScale() = 12

"1:12", "1=12", "1/12", "1 inch = 1 foot" will set LeftToRightScale() = 12, RightToLeftScale() = 0.08333...

"1:48", "1 = 48", "1/4 inch = 1 foot" will set LeftToRightScale() = 48, RightToLeftScale() = 0.0208333...

◆ operator=()

ON_ScaleValue& ON_ScaleValue::operator= ( const ON_ScaleValue )
default

◆ Read()

bool ON_ScaleValue::Read ( class ON_BinaryArchive archive)

◆ RightLengthValue()

const class ON_LengthValue& ON_ScaleValue::RightLengthValue ( ) const

◆ RightToLeftScale()

double ON_ScaleValue::RightToLeftScale ( ) const
Returns
A dimensionless scale factor. The word "dimensionless" is critical. Differneces in left and right side unit systems are accounted for in the returned value.

RightToLeftScale() = 1.0/LeftToRightScale() Examples: "1:4", "1=4", "1/4", "0.25" will set LeftToRightScale() = 4, RightToLeftScale() = 0.25

"4:1", "4=1", "4/1", "4" will set LeftToRightScale() = 0.25, RightToLeftScale() = 4

"100:1", "100=1", "1 meter = 1 centimeter" will set LeftToRightScale() = 0.01, RightToLeftScale() = 100

"1:100", "1=100", "1 centimeter = 1 meter" will set LeftToRightScale() = 100, RightToLeftScale() = 0.01

"12:1", "12=1", "12/1", "12", "1 foot = 1 inch" will set LeftToRightScale() = 0.08333..., RightToLeftScale() = 12

"1:12", "1=12", "1/12", "1 inch = 1 foot" will set LeftToRightScale() = 12, RightToLeftScale() = 0.08333...

"1:48", "1 = 48", "1/4 inch = 1 foot" will set LeftToRightScale() = 48, RightToLeftScale() = 0.0208333...

◆ ScaleAsString()

const ON_wString& ON_ScaleValue::ScaleAsString ( ) const
Returns
The scale as a string.

If ON_ScaleValue::CreateFromString() or ON_ScaleValue::CreateFromSubString() were used to create this ON_ScaleValue, a copy of that string is returned.

◆ ScaleAsStringPointer()

const wchar_t* ON_ScaleValue::ScaleAsStringPointer ( ) const

◆ ScaleStringFormatFromUnsigned()

static ON_ScaleValue::ScaleStringFormat ON_ScaleValue::ScaleStringFormatFromUnsigned ( unsigned int  scale_string_format_as_unsigned)
static

◆ ScaleStringParseSettings()

const ON_ParseSettings ON_ScaleValue::ScaleStringParseSettings ( ) const

◆ SwapLeftAndRight()

void ON_ScaleValue::SwapLeftAndRight ( )

◆ Write()

bool ON_ScaleValue::Write ( class ON_BinaryArchive archive) const

Member Data Documentation

◆ OneToOne

const ON_ScaleValue ON_ScaleValue::OneToOne
static

◆ Unset

const ON_ScaleValue ON_ScaleValue::Unset
static