-/* === S I N F G =========================================================== */
+/* === S Y N F I G ========================================================= */
/*! \file distance.cpp
** \brief Template File
**
-** $Id: distance.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $
+** $Id$
**
** \legal
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2008 Chris Moore
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** This package is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
** \endlegal
*/
/* ========================================================================= */
using namespace std;
using namespace etl;
-using namespace sinfg;
+using namespace synfig;
/* === M A C R O S ========================================================= */
-#define POINTS_PER_INCH (72.0)
+#define POINTS_PER_INCH (72.0)
+#define INCHES_PER_METER (39.3700787402)
+#define POINTS_PER_METER (POINTS_PER_INCH*INCHES_PER_METER)
+#define CENTIMETERS_PER_METER (100.0)
+#define MILLIMETERS_PER_METER (1000.0)
-/* === G L O B A L S ======================================================= */
+#define METERS_PER_UNIT (rend_desc.get_physical_w()/abs(rend_desc.get_tl()[0]-rend_desc.get_br()[0]))
-#define METERS_PER_UNIT (rend_desc.get_physical_w()/abs(rend_desc.get_tl()[0]-rend_desc.get_br()[0]))
+/* === G L O B A L S ======================================================= */
/* === P R O C E D U R E S ================================================= */
/* === M E T H O D S ======================================================= */
-Distance::Distance(const sinfg::String& str)
+Distance::Distance(const synfig::String& str)
{
(*this)=str;
/* int i(0);
float val;
int ret(strscanf(str,"%f%n",&val,&i));
- sinfg::info("Distance::Distance(): ret=%d, val=%f",ret,val);
-
+ synfig::info("Distance::Distance(): ret=%d, val=%f",ret,val);
+
if(ret<=0)
{
// Error
- sinfg::error("Distance::Distance(): Bad value \"%s\"",str.c_str());
+ synfig::error("Distance::Distance(): Bad value \"%s\"",str.c_str());
value_=0;
}
else
value_=val;
-
- sinfg::info("Distance::Distance(): system=\"%s\"",String(str.begin()+i,str.end()).c_str());
+
+ synfig::info("Distance::Distance(): system=\"%s\"",String(str.begin()+i,str.end()).c_str());
system_=ident_system(String(str.begin()+i,str.end()));
*/
}
Distance&
-Distance::operator=(const sinfg::String& str)
+Distance::operator=(const synfig::String& str)
{
int i(0);
float val;
int ret(strscanf(str,"%f%n",&val,&i));
- sinfg::info("Distance::Distance(): ret=%d, val=%f",ret,val);
-
+ // synfig::info("Distance::Distance(): ret=%d, val=%f",ret,val);
+
if(ret<=0)
{
// Error
- sinfg::error("Distance::Distance(): Bad value \"%s\"",str.c_str());
+ synfig::error("Distance::Distance(): Bad value \"%s\"",str.c_str());
return *this;
}
else
value_=val;
- sinfg::String sys(str.begin()+i,str.end());
+ synfig::String sys(str.begin()+i,str.end());
if(sys.size())
system_=ident_system(sys);
return *this;
}
-sinfg::String
+synfig::String
Distance::get_string(int digits)const
{
digits=min(9,max(0,digits));
return units(rend_desc);
if(target==SYSTEM_PIXELS)
return units(rend_desc)*METERS_PER_UNIT*rend_desc.get_x_res();
-
- return meters_to_system(meters(rend_desc),target);
+
+ return meters_to_system(meters(rend_desc),target);
}
-
+
Real
Distance::meters()const
{
switch(system_)
{
- case SYSTEM_INCHES: return value_/39.3700787402;
- case SYSTEM_POINTS: return value_/POINTS_PER_INCH/39.3700787402;
- case SYSTEM_METERS: return value_;
- case SYSTEM_CENTIMETERS: return value_/100.0;
- case SYSTEM_MILLIMETERS: return value_/1000.0;
+ case SYSTEM_INCHES: return value_/INCHES_PER_METER;
+ case SYSTEM_POINTS: return value_/POINTS_PER_METER;
+ case SYSTEM_METERS: return value_;
+ case SYSTEM_CENTIMETERS: return value_/CENTIMETERS_PER_METER;
+ case SYSTEM_MILLIMETERS: return value_/MILLIMETERS_PER_METER;
default: throw BadSystem();
}
}
{
switch(target_system)
{
- case SYSTEM_INCHES: return x*39.3700787402;
- case SYSTEM_POINTS: return x*39.3700787402*POINTS_PER_INCH;
- case SYSTEM_METERS: return x;
- case SYSTEM_CENTIMETERS: return x*100.0;
- case SYSTEM_MILLIMETERS: return x*1000.0;
+ case SYSTEM_INCHES: return x*INCHES_PER_METER;
+ case SYSTEM_POINTS: return x*POINTS_PER_METER;
+ case SYSTEM_METERS: return x;
+ case SYSTEM_CENTIMETERS: return x*CENTIMETERS_PER_METER;
+ case SYSTEM_MILLIMETERS: return x*MILLIMETERS_PER_METER;
default: throw BadSystem();
}
}
Distance::System // (static)
-Distance::ident_system(const sinfg::String& x)
+Distance::ident_system(const synfig::String& x)
{
- sinfg::String str;
+ synfig::String str;
// Make it all upper case, and remove white space
for(unsigned int i=0;i<x.size();i++)if(x[i]!=' ' && x[i]!='\t')str+=toupper(x[i]);
// If it is plural, make it singular
if(str[str.size()-1]=='S')
- str=sinfg::String(str.begin(),str.end()-1);
-
+ str=synfig::String(str.begin(),str.end()-1);
+
if(str.empty() || str=="U" || str=="UNIT")
return SYSTEM_UNITS;
if(str=="PX" || str=="PIXEL")
return SYSTEM_CENTIMETERS;
if(str=="MM" || str=="MILLIMETER")
return SYSTEM_MILLIMETERS;
-
- sinfg::warning("Distance::ident_system(): Unknown distance system \"%s\"",x.c_str());
-
+
+ synfig::warning("Distance::ident_system(): Unknown distance system \"%s\"",x.c_str());
+
return SYSTEM_UNITS;
}
-sinfg::String // (static)
+synfig::String // (static)
Distance::system_name(Distance::System system)
{
switch(system)
case SYSTEM_METERS: return "m";
case SYSTEM_MILLIMETERS: return "mm";
case SYSTEM_CENTIMETERS: return "cm";
-
+
default: throw BadSystem();
}
- return sinfg::String();
+ return synfig::String();
}
-sinfg::String // (static)
+synfig::String // (static)
Distance::system_local_name(Distance::System system)
{
switch(system)
case SYSTEM_METERS: return _("Meters");
case SYSTEM_MILLIMETERS:return _("Millimeters");
case SYSTEM_CENTIMETERS:return _("Centimeters");
-
+
default: throw BadSystem();
}
- return sinfg::String();
+ return synfig::String();
}