lumiera_documentation/src/proc/mobject/explicitplacement.hpp
Ichthyostega 6bdf0e2cdc put my name in the copyright claim of those files I have written in the last months.
(search & replace). Please feel free to add your name to any files to which you added any contributions.
ALL SOURCECODE IS LICENCED UNDER THE TERMS AND CONDITIONS OF THE GPL (2 and above)
2007-11-27 03:19:35 +01:00

86 lines
2.8 KiB
C++

/*
EXPLICITPLACEMENT.hpp - special Placement yielding an absolute location (Time,Track) for a MObject
Copyright (C) CinelerraCV
2007, Hermann Vosseler <Ichthyostega@web.de>
This program 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.
This program 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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MOBJECT_EXPLICITPLACEMENT_H
#define MOBJECT_EXPLICITPLACEMENT_H
#include "proc/mobject/placement.hpp"
namespace mobject
{
/**
* Special kind of Placement, where the location of the
* MObject has been nailed down to a fixed position.
* The Session allways contains one special EDL, which
* actually is a snapshot of all EDLs contents fixed
* and reduced to simple positions. This so called Fixture
* contains only ExplicitPlacement objects and is processed
* by the Builder to create the render engine node network.
*
* @see Placement#resolve factory method for deriving an ExplicitPlacement
*/
class ExplicitPlacement : public Placement<MObject>
{
public:
const Time time;
const Track track;
typedef std::pair<Time,Track> SolutionData; //TODO (ichthyo consideres better passing of solution by subclass)
/** no need to resolve any further, as this ExplicitPlacement
* already \i is the result of a resolve()-call.
*/
virtual
ExplicitPlacement resolve () const
{
return *this;
}
protected:
/* @todo ichthyo considers a much more elegant implementation utilizing a subclass
* of FixedLocation, which would serve as Placement::LocatingSolution, and
* would be used as LocatingPin::chain subobject as well, so that it could
* be initialized directly here in the ExplicitPlacement ctor.
* (ichthyo: siehe Trac #100)
*/
ExplicitPlacement (const Placement<MObject>& base, const SolutionData found)
: Placement<MObject>(base),
time(found.first), track(found.second)
{ };
friend ExplicitPlacement Placement<MObject>::resolve () const;
private:
/** copying prohibited, ExplicitPlacement is effectively const! */
ExplicitPlacement& operator= (const ExplicitPlacement&);
};
} // namespace mobject
#endif