But perhaps more programs now use INSUNITS property.
I'll implement automatic unit detection based on this property. It is trivial task.
This is what I'll do.
Code:
switch (dxf.Var_INSUNITS)
{
case 0: { break; } // Unitless
case 1: // Inches
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 1;
break;
}
case 2: // Feet
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 12;
break;
}
case 3: // Miles
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 63360;
break;
}
case 4: // Millimeters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1;
break;
}
case 5: // Centimeters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 100;
break;
}
case 6: // Meters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1000;
break;
}
case 7: // Kilometers
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1000000;
break;
}
case 8:// Microinches
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 0.000001;
break;
}
case 9: // Mils
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 0.001;
break;
}
case 10: // Yards
{
_Param->DataUnits = Units::Inches;
_Param->Scale = 36;
break;
}
case 11: // Angstroms
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 0.0000001;
break;
}
case 12: // Nanometers
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 0.000001;
break;
}
case 13: // Microns
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 0.001;
break;
}
case 14: // Decimeters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 100;
break;
}
case 15: // Decameters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 10000;
break;
}
case 16: // Hectometers
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 100000;
break;
}
case 17:// Gigameters
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1000000000000;
break;
}
case 18: // Astronomical units
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1.496e+14;
break;
}
case 19: // Light years
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 9.461e+18;
break;
}
case 20: // Parsecs
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 3.086e+19;
break;
}
case 21: // US Survey Feet
{
_Param->DataUnits = Units::Millimeters;
_Param->Scale = 1200000 / 3937;
break;
}
default:
break;
}