X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fdistance.cpp;h=efac8e93b47f48dfd89d7d7457d3c52864f35f46;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=c1a7e65d15dd5816ab1e0d65cefb45731b3109f6;hpb=e3acc0b267b14fda5db3c7bbb2f218b993ef84b3;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/distance.cpp b/synfig-core/trunk/src/synfig/distance.cpp index c1a7e65..efac8e9 100644 --- a/synfig-core/trunk/src/synfig/distance.cpp +++ b/synfig-core/trunk/src/synfig/distance.cpp @@ -1,20 +1,22 @@ -/* === 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 */ /* ========================================================================= */ @@ -38,67 +40,71 @@ 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)); @@ -120,20 +126,20 @@ Distance::get(Distance::System target, const RendDesc& rend_desc)const 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(); } } @@ -173,27 +179,27 @@ Distance::meters_to_system(Real x,System target_system) { 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